问题描述
我正在尝试检测是否有任何活动的互联网连接(WIFI 或移动互联网)。代码如下:
private boolean haveNetwork() {
ConnectivityManager connMgr =
(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
boolean flag=false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
for (Network network : connMgr.getAllNetworks()) {
NetworkInfo networkInfo = connMgr.getNetworkInfo(network);
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
flag=true;
break;
} else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {
flag=true;
break;
}
}
}
Log.d("flag",String.valueOf(flag)); //returns true even if there's no internet connection
return flag;
}
正如标题所说,即使没有互联网连接,我的连接状态也始终保持真实
解决方法
您当前拥有的信息只会告诉您是否有 ConnectivityManager 跟踪的移动或 Wi-Fi 网络,而不是您是否已连接到该网络。
由于您似乎是同步执行此操作,因此您想使用这两种方法:
如果您想通过替换您的 for
循环同步调用 ConnectivityManager,您可以使用它。
Network activeNetwork = connMgr.getActiveNetwork();
if (null == activeNetwork) {
return false;
}
NetworkCapabilities nc = connMgr.getNetworkCapabilities(activeNetwork);
return nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
&& nc.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);