2014-04-18 42 views
3

我想檢查是否有互聯網連接或如果設備實際連接到無線網絡。如何檢查移動數據是否實際活動或WiFi實際連接到任何熱點?

注意:我不想看看是否有互聯網連接或只是WiFi連接。我想檢查設備是否實際接收和發送數據包。

該代碼片段實際檢查是否存在移動數據連接,或者是否啓用了wifi,但並未說明連接是否已建立。

public boolean isNetworkConnected(Context context) { 
     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo ni = cm.getActiveNetworkInfo();    
     if (ni == null) { 
      // There are no active networks. 
      Toast.makeText(context, "No Network", Toast.LENGTH_LONG).show(); 
      return false; 
     } else 
      return true; 

OR

boolean isConnected = ni != null && ni.isConnectedOrConnecting(); 

    if(isConnected){ 

     return true; 

    } 
    else{ 
     Toast.makeText(context, "No Network", Toast.LENGTH_LONG).show(); 
     return false; 
    } 
} 

public boolean haveNetworkConnection(Context context) { 
     boolean haveConnectedWifi = false; 
     boolean haveConnectedMobile = false; 

     ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo[] netInfo = cm.getAllNetworkInfo(); 
     for (NetworkInfo ni : netInfo) { 
      if (ni.getTypeName().equalsIgnoreCase("WIFI")) 
       if (ni.isConnected()) 
        haveConnectedWifi = true; 
      if (ni.getTypeName().equalsIgnoreCase("MOBILE")) 
       if (ni.isConnected()) 
        haveConnectedMobile = true; 
     } 
     return haveConnectedWifi || haveConnectedMobile; 
    } 

所有上述代碼段僅當WiFi或數據啓用檢查。它不顯示連接是否建立。如果wifi或數據已啓用,它將始終返回true。

再次,我的目標是檢查是否檢查連接是否建立。

任何幫助將是很有益的。謝謝在提前.. :)

這個問題已經有了答案。再次感謝。

+0

爲了我的理解和清晰度,我相信只有在連接服務器的請求發生時才能建立連接。你想在這裏建立什麼樣的連接? – Sameer

+0

我只想檢查互聯網是否真的可以提供給用戶。因爲如果移動數據或wifi已啓用,則此代碼每次都會返回true。連接應該在,U應該能夠訪問互聯網。有時候會發生什麼是你有移動數據設置,你沒有數據計劃。 – mike20132013

回答

5

感謝您的評論和答覆的傢伙,但我認爲這個解決方案正在爲我工​​作。這實際上是試圖連接到互聯網並檢查狀態。不知道這是否是正確的做法。

public Boolean isOnline() { 
     try { 
      Process p1 = java.lang.Runtime.getRuntime().exec("ping -c 1 www.google.com"); 
      int returnVal = p1.waitFor(); 
      boolean reachable = (returnVal==0); 
      if(reachable){ 
       System.out.println("Internet access"); 
       return reachable; 
      } 
      else{ 
       System.out.println("No Internet access"); 
      } 

     } catch (Exception e) { 

      e.printStackTrace(); 
     } 
     return false; 
    } 

希望這可以幫助其他觀衆。

+1

我在運行這個onCreate時遇到了一些問題,UI會掛起。我建議在AsyncTask中運行它。 –

+0

真的..這是一個有點廣泛的任務在主線程中做。有時它會凍結用戶界面幾秒鐘來執行檢查。 – mike20132013

+0

@ mike20132013我想你的意思是說**昂貴的**而不是廣泛的** :) – peter

0

您必須ping通互聯網上的服務器(即。谷歌)才能查看您是否實際連接。

相關問題