0

我的应用程序中有一个自定义广播接收器,用于在网络连接发生更改时接收意图。但是,出于某种原因,每当连接发生变化时,它就会运行两次,我不知道为什么。

如何解决此问题,使其仅在网络更改时触发一次?

注意:不,它不在清单中两次。

谢谢!

编辑: 这是接收器代码:

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

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

假设您在 wifi 断开连接时收到断开消息,我猜第一个是正确的,而其他 2 个只是出于某种原因的回声。

要知道消息已被调用,您可以有一个静态布尔值,在连接和断开之间切换,并且仅在您收到连接并且布尔值为真时才调用您的子例程。类似于: 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 回答