2015-07-21 81 views
2

我正在研究在從服務器填充數據之前必須具有互聯網連接的應用程序。我有一個bool方法來檢查是否有可用的網絡連接,但它不能正常工作。如何檢測Android手機是否可以訪問互聯網即使移動數據已打開

這裏是什麼是要做到:

1:檢查WLAN網絡,並設有一個網絡接入

2:檢查是移動數據啓用並有一個網絡訪問

問題(BUG):

目前,我沒有互聯網接入,但我的移動數據,而不是GETT ON,如果我的Toast消息沒有連接到互聯網,它仍然會告訴我,我有互聯網接入,但我無法訪問互聯網。

我檢查了其他所有可能的方法,但他們都有與我正在使用的方法相關的方法。

問題: 我怎麼可以檢測是否有即使移動數據是啓用的主動上網。

我的代碼:

private boolean haveConnected() { 
     //Vars 
     boolean wifiIsConnected = false; 
     boolean mobileDataIsConnected = false; 
     State checkMobile; 
     State checkWifi; 
     ConnectivityManager connectManager; 

    //init 
     connectManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     checkMobile = connectManager.getNetworkInfo(0).getState(); 
     checkWifi = connectManager.getNetworkInfo(1).getState(); 

     if (checkMobile == NetworkInfo.State.CONNECTED) { 
      mobileDataIsConnected = true; 
     } else if (checkWifi == NetworkInfo.State.CONNECTED) { 
      wifiIsConnected = true; 

     } 
     return wifiIsConnected || mobileDataIsConnected; 
    } 
+0

的http://計算器.com/questions/17717749/check-for-active-internet-connection-android –

+0

我覺得你不能直接做。你必須提出一個請求,並得到一個有效的響應,以確保互聯網連接是積極的 – Chol

+0

試過這樣,但墜毀>> – hatboy

回答

0

您應該使用BroadcastReciever,讓OS告訴你,當它連接/斷開。然後,你可以有一個班會跟蹤這些事件。這裏是official description。此外,還有一個StackOverflow question,有幾個例子可能對您有所幫助。

+0

我已經嘗試從自定義接收器獲取網絡狀態,但同樣的問題,它會顯示連接,即使當我沒有有效的互聯網訪問.. – hatboy

+0

如果執行得當,它可以正常工作。另一個有用的鏈接是這樣的:http://stackoverflow.com/questions/15546712/uncomfort-app-is-getting-stopped-while-checking-for-network/15546897#15546897 – C0D3LIC1OU5

+0

嚴重的是,同樣的問題.. – hatboy

0

做一個簡單的請求隨時隨地在互聯網上,如果達到你有數據的請求,否則你得到超時

+0

處理時間也很重要... – hatboy

+0

我猜一個2-3秒的簡單針也行,試試這樣的東西http://stackoverflow.com/questions/3905358/how-to-ping-external-ip- from-java-android – admiral

0

你可以只檢查活動網絡:

ConnectivityManager conManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetworkInfo = conManager.getActiveNetworkInfo(); 

    networkAvailable = activeNetworkInfo != null; 

    if (!networkAvailable) { 
     //do your logic 
    } 
+0

這是更簡單的解決方案,它也可以工作。我會改變一行:'networkAvailable = activeNetworkInfo == null? false:activeNetworkingInfo.isConnected();'根據文檔(http://developer.android.com/reference/android/net/ConnectivityManager.html#getActiveNetworkInfo()) – C0D3LIC1OU5

+0

您的代碼檢查是否啓用了Wifi或Mobile Data或不.. – hatboy

相關問題