2012-01-28 126 views
0

我想为用户显示一条消息,如果他不在Internet可用性范围内。我正在使用下面的代码片段,但即使在网络可用的情况下它也显示异常。在Android上检查互联网连接

我做错了什么?

public boolean isInternetAvailable(){ 

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

} 
+0

你为什么不发送数据包,并处理异常? – Mob 2012-01-28 18:09:50

+0

您是否在清单中添加了此项:'<使用权限android:name =“android.permission.ACCESS_NETWORK_STATE”/>' – Zakaria 2012-01-28 18:15:33

+0

可能的重复项:http://stackoverflow.com/q/2753412/1048330 – tenorsax 2012-01-28 18:15:41

回答

1

你会得到哪些例外?也许你忘了在清单文件中添加android.permission.ACCESS_NETWORK_STATE

1

看来你忘了你的清单文件中添加此片段:在清单

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

下面

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

添加权限是会给你你是否连接到任何一个方法网络或wifi

public static boolean isNetworkAvailable(Context context) { 
     boolean available = false; 
     try { 

      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) { 
          available = true; 
         } 
        } 
       } 
      } 
      if (available == false) { 
       NetworkInfo wiMax = connectivity.getNetworkInfo(6); 

       if (wiMax != null && wiMax.isConnected()) { 
        available = true; 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return available; 
    } 
0

如果您在Manifest和您拥有所需的权限仍然有问题,我会稍微修改代码:

ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
if(cm != null) { 
    NetworkInfo netInfo = cm.getActiveNetworkInfo(); 
    if (netInfo != null && netInfo.isConnected()) { 
    return true; 
    } 
} 
return false; 
0

我只想补充一点,如果有网络连接张贴OP代码将只检查。 如果使用wifi连接,它只会检查手机是否连接到各自的Wifi。

但它不会给你任何错误的情况下,WiFi实际上有一个工作的互联网连接。

您可能需要使用除另一个检查上面,像这样:

try { 
         HttpURLConnection httpConnection = (HttpURLConnection) (new URL("http://clients3.google.com/generate_204").openConnection()); 
         httpConnection.setRequestProperty("User-Agent", "Test"); 
         httpConnection.setRequestProperty("Connection", "close"); 
         httpConnection.setConnectTimeout(15000); 
         httpConnection.connect(); 
         if (httpConnection.getResponseCode() == 204){ 
          //internet is avialable  
          return; 
         }else{ 
          Log.e(TAG, "Internet connection error: " + httpConnection.getResponseCode() 
            + ": " + httpConnection.getResponseMessage()); 
         } 
        } catch (IOException e) { 
         Log.e(TAG, "Internet connection error: " + e); 
        }