Android L预览中的ConnectivityManager

时间:2014-07-14 22:32:32

标签: android android-5.0-lollipop network-connection

我的应用在启动时检查网络连接。在Android版本2.3到4.4中,以下方法效果很好(无论是模拟器还是实际设备)。在Android L预览模拟器上,该方法返回false。

这是我的代码:

// ===============================================================
public static boolean haveNetworkConnection(Context ctx) {

    boolean haveConnectedWifi = false;
    boolean haveConnectedMobile = false;
    boolean haveConnectedEthernet = false;

    ConnectivityManager cm = (ConnectivityManager) ctx
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo[] netInfo = cm.getAllNetworkInfo();

    for (NetworkInfo ni : netInfo) {

        // String con = ni.isConnected() ? "Connected" : "Not Connected";

        if (!haveConnectedWifi) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    haveConnectedWifi = true;
        }

        if (!haveConnectedMobile) {
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    haveConnectedMobile = true;
        }

        if (!haveConnectedEthernet) {
            if (ni.getTypeName().equalsIgnoreCase("ETHERNET"))
                if (ni.isConnected())
                    haveConnectedEthernet = true;
        }

        StringBuilder sb = new StringBuilder();
        sb.append(ni.getTypeName()).append(" ").append(ni);


    }
    return haveConnectedWifi || haveConnectedMobile
            || haveConnectedEthernet;
}

有一些奇怪的StringBuilder东西,我没有创建这个代码 - 它是在我继承的项目中。因为它有效,我不需要改变任何东西。有谁知道ConnectivityManager的工作方式是否有任何API更改?我检查了API overview上的dev site更改,但没有看到任何相关信息。

1 个答案:

答案 0 :(得分:1)

在L中更改了Typename,例如应选中“Cellular”而不是“MOBILE”。