0

私のアプリは、起動時にネットワーク接続をチェックします。Android バージョン 2.3 から 4.4 では、以下の方法がうまく機能します (エミュレーターでも実際のデバイスでも)。Android L Preview Emulator では、メソッドは 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このコードは私が作成したものではありません。継承したプロジェクトに含まれています。動作するので、何も変更する必要はありません。動作方法に API の変更があるかどうかは誰にもわかりませConnectivityManagerんか? 開発サイトでAPI の概要の変更を確認しましたが、これに関する関連情報はありませんでした。

4

1 に答える 1

1

L では Typename が変更されました。たとえば、「MOBILE」ではなく「Cellular」をチェックする必要があります。

于 2014-07-16T12:02:40.827 に答える