大家好我需要验证我的设备当前是否已连接到互联网,因此我写了这个使用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>
谢谢!
答案 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;
}
}