2014-09-26 106 views
18

我有一個要求,當我連接到網絡時,我想檢查是否有任何互聯網連接。如何檢查Android網絡中的互聯網連接(通過HOTSPOT使用其他設備的互聯網)

例如,我有設備A和設備B

設備A與與該設備B.在設備A的熱點連接,我明白了與無線網絡連接和在裝置B相連接 - 一個設備與熱點連接。

現在,如果我從設備B(不是網絡熱點)移除互聯網,那麼在設備A中,它仍然顯示 - 與Wi-Fi連接,但沒有互聯網連接。

像ConnectivityManager這樣的類有助於確定設備是否與網絡連接,而不是與互聯網連接有關。

我想跟蹤此問題。有什麼辦法可以做到這一點?

+0

+1,很好的問題,我正在檢查我的一個應用程序的互聯網連接,但沒有處理過這個問題。關於現在答案的錯誤 – nobalG 2014-09-26 09:16:04

+0

B設備是設備A的熱點嗎?並且一旦你關閉了設備B的熱點,你想在設備A中檢測到它嗎? – KOTIOS 2014-09-26 09:22:36

+1

不要刪除熱點。從設備B刪除互聯網 – 2014-09-26 09:25:57

回答

-2

試試下面的函數來檢查您的網絡連接:

public static boolean isInternetConnected(Context mContext) { 

     try { 
      ConnectivityManager connect = null; 
      connect = (ConnectivityManager) mContext 
        .getSystemService(Context.CONNECTIVITY_SERVICE); 

      if (connect != null) { 
       NetworkInfo resultMobile = connect 
         .getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

       NetworkInfo resultWifi = connect 
         .getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

       if ((resultMobile != null && resultMobile 
         .isConnectedOrConnecting()) 
         || (resultWifi != null && resultWifi 
           .isConnectedOrConnecting())) { 
        return true; 
       } else { 
        return false; 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return false; 
    } 

下列權限添加到您的清單文件,

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+3

請明確地閱讀問題,用戶詢問有關ConnectivityManager的解決方案,但要了解有關網絡可用性的信息,而不是有關網絡可用性的信息。 – 2014-09-26 09:24:11

4

它可以是一個荒謬的解決方案,但我想也可能是真正的解決方案:

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
     try { 
      URL url = new URL("http://www.google.com"); 
      HttpURLConnection urlc = (HttpURLConnection) url.openConnection(); 
      urlc.setConnectTimeout(3000); 
      urlc.connect(); 
      if (urlc.getResponseCode() == HttpURLConnection.HTTP_OK) { 
       return new Boolean(true); 
      } 
     } catch (MalformedURLException mue) { 
      // TODO Auto-generated catch block 
      mue.printStackTrace(); 
     } catch (IOException ie) { 
      // TODO Auto-generated catch block 
      ie.printStackTrace(); 
     } 
    } 
    return false; 
} 
+1

+1,根本不可笑!其實一個非常優雅的解決方案。 – RossC 2014-09-26 09:39:48

+1

那麼,如果谷歌離線,這意味着我沒有互聯網? – 2014-09-26 09:40:32

+0

我這麼認爲。這就像嘗試連接你的服務器。如果沒有檢查谷歌。如果谷歌沒有連接,意味着你離線。 – 2014-09-26 09:41:15