0

ネットワーク接続が変更されたときにインテントを受信するために、アプリケーションにカスタム BroadcastReceiver があります。ただし、何らかの理由で、接続が変更されるたびに 2 回実行されますが、その理由はわかりません。

ネットワークの変更時に一度だけトリガーされるようにするにはどうすればよいですか?

注: いいえ、マニフェストに 2 回含まれているわけではありません。

ありがとう!

編集: レシーバーコードは次のとおりです。

public class NetworkStateReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
        // Do stuff; This is running twice! 
    }
}

マニフェストのビットは次のとおりです。

<receiver android:name="NetworkStateReceiver">
    <intent-filter>
        <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
    </intent-filter>
</receiver>
4

1 に答える 1

0

複数のブロードキャストを受信することは、デバイス固有の問題です。ブロードキャストを 1 回送信するだけの電話もあれば、2 回または 3 回送信する電話もあります。ただし、回避策があります。

Wi-Fi が切断されたときに切断メッセージが表示されると仮定すると、最初の 1 つが正しいもので、他の 2 つが何らかの理由で単なるエコーであると推測できます。

メッセージが呼び出されたことを知るには、接続と切断を切り替える静的ブール値を設定し、接続を受信して​​ブール値が true の場合にのみサブルーチンを呼び出すことができます。次のようなもの: public class ConnectionChangeReceiver extends BroadcastReceiver { private static boolean firstConnect = true;

@Override
public void onReceive(Context context, Intent intent) {
    final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
    if (activeNetInfo != null) {
        if(firstConnect) { 
            // do subroutines here
            firstConnect = false;
        }
    }
    else {
        firstConnect= true;
    }
}

}

于 2015-08-05T14:59:15.710 に答える