[英]Connected, no Internet in Android
我一直在试图弄清楚如何处理 Android:已连接,无论您是使用 Wifi 还是蜂窝数据连接,都没有互联网条件。
代码:
public boolean checkForInternetConnectivity() {
ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
if(manager != null) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Works when connected to the internet and when internet is available but the fails when no internet
NetworkCapabilities networkCapabilities = manager.getNetworkCapabilities(manager.getActiveNetwork());
return networkCapabilities != null && (networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR));
}else {
NetworkInfo netInfo = null;
netInfo = manager.getActiveNetworkInfo();
return netInfo!= null && netInfo.isConnected();
}
}
return false;
}
如果手机连接到互联网并且互联网可用,我只希望上述方法返回 true,如果没有互联网或连接,则返回 false。
所以我的问题是 - 我该如何处理“没有互联网”的情况? 是否有内置方法可用于执行此操作? 还是我在提到的代码本身中遗漏了一些东西?
替换此代码。
public final boolean checkForInternetConnectivity() {
ConnectivityManager cm = (ConnectivityManager) getSystemService("connectivity");
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) {
if (activeNetwork.getType() == 1) {
return true;
} else {
return activeNetwork.getType() == 0;
}
} else {
return false;
}
}
}
在清单文件中添加这个 android.permission.ACCESS_NETWORK_STATE 的权限。
确保在清单中添加此行:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
虽然您将在不同的活动中使用此方法,但我建议使用 static 方法更好。 添加此代码:
public static boolean isNetworkAvailable(Context context) {
boolean HaveConnectWIFI = false;
boolean HaveConnectMobile = false;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
assert connectivityManager != null;
NetworkInfo[] activeNetworkInfo = connectivityManager.getAllNetworkInfo();
for (NetworkInfo ni : activeNetworkInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
HaveConnectWIFI = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
HaveConnectMobile = true;
}
return HaveConnectMobile || HaveConnectWIFI;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.