到目前为止我用来检查互联网连接的代码是
private boolean isOnline() {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
我的代码工作正常,直到Android 5.0但在Android 6.0的应用程序崩溃可以任何人帮助我解决这个问题,并提供一个更好的代码,可以测试互联网连接 谢谢 此致
答案 0 :(得分:2)
您需要使用:getActiveNetworkInfo()
代码:
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
// connected to wifi
Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show();
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
//connected to Data
Toast.makeText(context, activeNetwork.getTypeName(), Toast.LENGTH_SHORT).show();
}
} else {
// not connected to the internet
}
答案 1 :(得分:1)
来自ConnectivityManager
documentation:
NetworkInfo[] getAllNetworkInfo ()
此方法已在API级别23中弃用。
此方法不支持同一类型的多个连接网络。请改用
getAllNetworks()
和getNetworkInfo(android.net.Network)
。
请注意,API级别21中引入了getAllNetworks()
,因此您可能需要运行两种不同的方法based on the user's OS version。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){
// Use getAllNetworks()
} else{
// Use getAllNetworkInfo()
}