2012-10-05 144 views
2

使用此代碼來檢查設備是否在線時,應用程序加載。查看在線狀態android

public boolean isOnline() 
{ 
    ConnectivityManager connMgr = (ConnectivityManager) 
      getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 
    return (networkInfo != null && networkInfo.isConnected()); 
} 

但是,這總是返回true,即使它關閉了計算機的Wifi測試。這個函數只是測試連接或實際連接的能力嗎?

謝謝!

+1

你提到需要這2個權限 「計算機無線網絡。」你在模擬器中測試這個嗎? – Brigham

+0

[Android檢查互聯網連接]可能的重複(http://stackoverflow.com/questions/9570237/android-check-internet-connection) –

回答

9

嘗試使用:

private boolean isOnline() 
    { 
     try 
     { 
      ConnectivityManager cm = (ConnectivityManager)mContext.getSystemService(Context.CONNECTIVITY_SERVICE); 
      return cm.getActiveNetworkInfo().isConnectedOrConnecting(); 
     } 
     catch (Exception e) 
     { 
      return false; 
     } 
    } 

哪裏mContext是你使用的上下文。

我的猜測是你的代碼在設備上可以正常工作,但你可能正在模擬器上測試。我注意到,即使計算機的互聯網如果關閉,模擬器有時仍保持連接狀態。爲了實現正確的功能,您應該進入設置並從那裏禁用WiFi和移動數據,而不是關閉計算機的WiFi。

此外,如果設備處於連接過程中,我上面給出的代碼也會返回true,而您正在使用的代碼只會在已建立連接時返回true。

+0

爲什麼downvote? –

+0

這爲什麼會有所作爲?據推測,OP在一個'Activity'或其他擴展Context的應用程序組件中調用'getSystemService(...)',否則代碼將無法編譯。這就是爲什麼downvote。 – Squonk

+0

呃,我不是說用'mContext'就能解決問題。我正在使用不同的return語句。我已經無數次地使用過這個代碼,因此提出了它。 –

4

此代碼一直爲我工作。

`

public boolean isNetworkAvailable() { 
     ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 

// test for connection 
     if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() 
       && cm.getActiveNetworkInfo().isConnected()) { 
      return true; 
     } else { 
      return false; 
     } 
    } 
+0

非常感謝您的回覆。看起來它可能只是一個模擬器問題。 –

1
protected boolean isOnline() 
{ 
    boolean haveConnectedWifi = false; 
    boolean haveConnectedMobile = false; 

    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); 
    if (activeNetwork != null) { // connected to the internet 
     if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { 
      if (activeNetwork.isConnected()) 
       haveConnectedWifi = true; 
     } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { 
      if (activeNetwork.isConnected()) 
       haveConnectedMobile = true; 
     } 
    } 

    return haveConnectedWifi || haveConnectedMobile; 
} 

而且在manifest

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

感謝提及清單權限 –