2012-09-15 92 views
5

此代碼始終返回true。這在按下登錄按鈕時被調用。我第一次嘗試與WiFi連接(在模擬器上)。它返回true,然後我斷開wifi然後嘗試。它仍然返回true。即使互聯網不可用,Android networkinfo始終返回true

public static boolean isNetworkAvailable(Context context) { 

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
      // if no network is available networkInfo will be null 
      // otherwise check if we are connected 
      if (networkInfo != null && networkInfo.isConnected()) { 
       State network = networkInfo.getState(); 
       Log.d("here", "true"); 
       return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING); 

      } 
      Log.d("here1", "false"); 
      return false; 
} 

回答

14

此代碼的工作設備上,因爲我用我的應用程序的一個非常類似的東西。請記住,此代碼會告訴您,您是否將連接到網絡,而不是您連接到的網絡是否具有互聯網連接。如果您使用的是仿真器,它總是通過3G模擬進行連接,所以斷開計算機的WiFi並不會改變這一點。您可以將模擬器置於飛行模式,這會給您帶來您所尋找的「錯誤」。

我在我的應用程序中所做的是創建一個接收網絡更改廣播的服務。網絡連接後,它會嘗試通過互聯網下載已知(小型)文件。只有這樣做,它纔會向所有活動廣播互聯網可用的意向,然後可以基於此改變狀態。

+0

因此,沒有直接的方法可以判斷互聯網是否可用? –

+0

沒有。問題在於「網絡」在這裏是一個定義問題。你可以連接到無線網絡,完全訪問內部網,這可以爲你的應用程序。你也可以坐在一個非常嚴格的防火牆後面,例如阻止www.facebook.com來保持員工的生產力。 您需要明確檢查您感興趣的服務或常用網址。 我的連通性服務不是火箭科學,當我有一點時間時,我會清理它並將它發佈到這裏 - 可能不是在星期一之前。 – 323go

+1

偉大的答案請問,如果我引用你的答案,只要它適合,因爲它讓我瘋狂的+1 – shareef

相關問題