1

ConnectivityManager.CONNECTIVITY_ACTION を取得するためにブロードキャストを登録しました。コードは次のとおりです。

registerReceiver(mNetwrokBroadcastReceiver, new IntentFilter(
            ConnectivityManager.CONNECTIVITY_ACTION));

受信者は次のとおりです。

private BroadcastReceiver mNetwrokBroadcastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        boolean isConnected = false;
        NetworkInfo mNetworkInfo = intent
                .getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
        NetworkInfo.State state = (mNetworkInfo == null ? NetworkInfo.State.UNKNOWN
                : mNetworkInfo.getState());

        switch (state) {
        case CONNECTED:
            isConnected = true;
            break;

        case DISCONNECTING:
            if (intent.getBooleanExtra(
                    ConnectivityManager.EXTRA_NO_CONNECTIVITY, false))
                isConnected = false;
            else {
                isConnected = true;
            }
            break;

        default:
            break;
        }


        if (isConnected) {
            mPopwin.onDismiss();
            init();

        }
    }
};

しかし、ネットが常に接続されていると、ブロードキャストも送信されることがわかりました。なぜですか??? 同じ質問がありますが、わかりません。

編集:つまり、アクティビティの初期化でフィルターが「ConnectivityManager.CONNECTIVITY_ACTION」であるというブロードキャストを登録します。ネットが常に接続されている場合、アクティビティを開始し、関数「onReceive」が実行されます。Google ドキュメントでは、「ネットワーク接続の変更が発生しました」と記載されていますが、ネットワークに変更はありません。なぜ onReceive を実行するのですか?

4

1 に答える 1

1

CONNECTIVITY_ACTION はスティック ブロードキャストであるため、onRecevie を呼び出して削除し続けます。removeStickyBroadcast (インテント インテント) DOCを使用できます。

于 2014-08-27T06:06:05.363 に答える