5

このコードは常にtrueを返します。これは、ログインボタンが押されたときに呼び出されます。私は最初にwifiを接続して(エミュレーターで)試しました。それはtrueに戻り、wifiを切断してから試しました。それでもtrueを返します。

public static boolean isNetworkAvailable( Context context) {

    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = cm.getActiveNetworkInfo();
            // if no network is available networkInfo will be null
            // otherwise check if we are connected
            if (networkInfo != null && networkInfo.isConnected()) {
                 State network = networkInfo.getState();
                 Log.d("here", "true");
                 return (network == NetworkInfo.State.CONNECTED || network == NetworkInfo.State.CONNECTING);

            }
            Log.d("here1", "false");
            return false;
}
4

1 に答える 1

14

私のアプリの1つで非常によく似たものを使用しているため、このコードはデバイス上で機能します。このコードは、接続しているネットワークにインターネット接続があるかどうかではなく、ネットワークに接続しているかどうかを示していることに注意してください。エミュレーターを使用している場合、エミュレーターは常に3Gシミュレーションを介して接続されているため、コンピューターのWi-Fiを切断してもそれは変わりません。エミュレータを機内モードにすることができます。これにより、探していた「false」が表示されます。

私が自分のアプリで行ったことは、ネットワーク変更ブロードキャストを受信するサービスを作成することです。ネットワークが接続されると、インターネット経由で既知の(小さな)ファイルをダウンロードしようとします。それが成功した場合にのみ、インターネットで利用可能なインテントをすべてのアクティビティにブロードキャストし、これに基づいて状態を変更できます。

于 2012-09-15T22:52:01.983 に答える