2012-01-25 126 views
2

我使用此代碼來檢查Internet連接:使用Context.CONNECTIVITY_SERVICE檢查互聯網連接

private boolean checkInternetConnection() { 
    ConnectivityManager cm = (ConnectivityManager) 
           getSystemService(Context.CONNECTIVITY_SERVICE); 
    // test for connection 
    if (cm.getActiveNetworkInfo() != null 
      && cm.getActiveNetworkInfo().isAvailable() 
      && cm.getActiveNetworkInfo().isConnected()) { 
     return true; 
    } else { 
     return false; 
    } 
} 

但即使當我關掉無線網絡連接仍然返回true。

在模擬器和設備上試了同樣的結果?
有什麼不對?

+0

我認爲它也檢查您的移動運營商網絡。 –

+0

那我該怎麼辦?你能幫忙嗎? – Navdroid

回答

5

這個簡單的代碼在我的情況:

public boolean netConnect(Context ctx) 
{ 
    ConnectivityManager cm; 
    NetworkInfo info = null; 
    try 
    { 
     cm = (ConnectivityManager) 
       ctx.getSystemService(Context.CONNECTIVITY_SERVICE); 
     info = cm.getActiveNetworkInfo(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    if (info != null) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

而且這一個..

public boolean isOnline() { 
    ConnectivityManager cm = (ConnectivityManager) 
           getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnectedOrConnecting()) { 
     return true; 
    } 
    return false; 
} 
+1

ConnectivityManager的getActiveNetworkInfo()方法返回一個NetworkInfo實例,表示它可以找到的第一個連接的網絡接口,如果接口連接則返回null。檢查這個方法是否返回null應該足以說明互聯網連接是否可用。 – user370305

+0

這只是工作Thanx先生! – Navdroid

+0

這是否需要像ACCESS_WIFI_STATE這樣的特殊權限? –

1

試試這個....

if((connMgr.getNetworkInfo(0).getState() == NetworkInfo.State.CONNECTED) || (connMgr.getNetworkInfo(1).getState() == NetworkInfo.State.CONNECTED))     
{ 
    return true; 
}else 
{ 
    return false; 
} 
0

您可以同時檢查WIFI和互聯網如下:

private boolean haveNetworkConnection() { 
boolean haveConnectedWifi = false; 
boolean haveConnectedMobile = false; 

ConnectivityManager cm = (ConnectivityManager)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; 
} 

顯然,它可以很容易地進行修改,以檢查各個特定連接類型,例如,如果你的應用程序需要的Wi-Fi的潛在的更高的速度才能正常工作等

+1

改爲使用networkInfo.getType()== ConnectivityManager.TYPE_WIFI。 –

+0

它更好地使用android常量,而不是假設他們忽略OS /製造商 –

2

您可以使用下面:

public boolean isNetworkAvailable(Context contextValue) { 
    Context context = contextValue; 
    ConnectivityManager connectivity = (ConnectivityManager) 
         context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (connectivity != null) { 
     NetworkInfo[] info = connectivity.getAllNetworkInfo(); 
     if (info != null) { 
      for (int i = 0; i < info.length; i++) { 
       if (info[i].getState() == NetworkInfo.State.CONNECTED) { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
}