ConnectivityManager在android 6.0中不可用

时间:2017-05-16 16:38:53

标签: android

到目前为止我用来检查互联网连接的代码是

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的应用程序崩溃可以任何人帮助我解决这个问题,并提供一个更好的代码,可以测试互联网连接 谢谢 此致

2 个答案:

答案 0 :(得分:2)

不推荐使用

getAllNetworkInfo

您需要使用: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()
}