onReceive在android的网络侦听器的BroadcastReceiver中调用了两次

时间:2015-01-02 11:09:14

标签: android broadcastreceiver android-wifi

为什么在接收时调用两次,当网络状态发生变化时。

清单:

    <receiver android:name="tv.meterreading.network.NetworkChangeReceiver" >
        <intent-filter>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" >
            </action>
        </intent-filter>
    </receiver>

1 个答案:

答案 0 :(得分:-1)

接收多个广播是设备特定的问题。有些手机只发送一个广播而另一个发送2或3.但是有一个解决方法:

假设你在wifi断开连接时收到断开连接的消息,我猜第一个是正确的,另外两个只是由于某种原因的回声。

要知道消息已被调用,你可以有一个静态布尔值,它在connect和disconnect之间切换,只在你收到一个连接并且boolean为true时调用你的子例程。类似的东西:

公共类ConnectionChangeReceiver扩展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;
    }
}

}