检查android上的Internet连接

时间:2012-01-28 18:06:04

标签: java android

如果用户没有网络可用性,我想为用户显示一条消息。我正在使用以下代码片段,但即使在网络可用性的情况下也显示异常。

我做错了什么?

public boolean isInternetAvailable(){

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

}

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

您似乎忘记在清单文件中添加此代码段:

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

答案 2 :(得分:0)

在清单中添加权限

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

以下是一种方法,可以为您提供是否连接到任何网络或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;
    }

答案 3 :(得分: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;

答案 4 :(得分: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);
                    }