如何唯一地标识广播意图

时间:2012-12-18 08:42:51

标签: android android-intent broadcastreceiver

在我的应用程序中,我必须收到USER_PRESENT和AIRPLANE_MODE意图。但是每个意图都被广播了两次(有时是三次)我不想要。我试图使用SharedPreferences来解决这个问题,但我需要唯一地识别每个意图(如果它有任何'id'或时间戳等)。

以下是我试图只允许一次onReceive调用的代码。

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

final SharedPreferences instanceCount = context.getSharedPreferences("Instances",Context.MODE_WORLD_WRITEABLE); 
   SharedPreferences.Editor instance_editor = instanceCount.edit();
    if(instanceCount.getBoolean("instance",true))
    {
        instance_editor.putBoolean("instance",false);
        instance_editor.commit();
    }
    else
    {
        instance_editor.putBoolean("instance",true);
        instance_editor.commit();
        return;
    } 
                          .
                          .
                          .
                          .
}

任何人都可以帮忙解决这个问题。谢谢:)

1 个答案:

答案 0 :(得分:0)

这些是系统广播,您无法控制广播的次数。使您的接收器具有幂等性,例如,即使多次调用它也会保持相同的状态。不是计算广播,而是保存应用的当前状态,并在收到广播时进行检查。如果您已处于所需状态,请不要执行任何操作。否则,根据需要更改状态并保存。