ConnectivityManager验证互联网连接

时间:2011-08-15 22:32:32

标签: android package

大家好我需要验证我的设备当前是否已连接到互联网,因此我写了这个使用ConnectivityManager来检查的课程:

public boolean checkInternetConnection() {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

    if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
        return true;

    } else {
        return false;
    }
}

效果很好,因为现在该方法位于主包(com.App)的类中,但是如何更改代码以使其在com.App.Utility中定义的类中工作? / p>

谢谢!

4 个答案:

答案 0 :(得分:8)

package com.app.utility;

  public class Utilities {

    public static final boolean CheckInternetConnection(Context context) {
      ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

      if (cm.getActiveNetworkInfo() != null && cm.getActiveNetworkInfo().isAvailable() && cm.getActiveNetworkInfo().isConnected()) {
        return true;

      } else {
        return false;
      }
    }
  }

答案 1 :(得分:3)

使用getActiveNetworkInfo()的唯一问题是,在许多情况下,无法正确检测连接。例如,如果移动网络在电话上禁用但无线网络可用,则活动网络仍可能被视为移动网络,因此返回false。

另一种选择是:

public boolean isOnline() {
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfoMob = cm.getNetworkInfo(cm.TYPE_MOBILE);
    NetworkInfo netInfoWifi = cm.getNetworkInfo(cm.TYPE_WIFI);
    if ((netInfoMob != null || netInfoWifi != null) && (netInfoMob.isConnectedOrConnecting() || netInfoWifi.isConnectedOrConnecting())) {
        return true;
    }
    return false;
}

答案 2 :(得分:2)

Alan Alan H!

当netInfoMob和netInfoWifi中的一个为空但另一个不为时,if条件可能会导致NPE。

这个适用于我:

netInfoMobile != null && netInfoMobile.isConnectedOrConnecting() ||
netInfoWifi != null && netInfoWifi.isConnectedOrConnecting()

答案 3 :(得分:0)

试试这个,此代码有效。

public static boolean checkNetwork(Context context) {
   context = context;
    ConnectivityManager connManager = (ConnectivityManager) context
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if ((connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) != null && connManager
            .getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected())
            || (connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && connManager
            .getNetworkInfo(ConnectivityManager.TYPE_WIFI)
            .isConnected())) {
        return true;
    } else {
        return false;
    }
}