0

在我的应用程序中,我必须接收 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;
    } 
                          .
                          .
                          .
                          .
}

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

4

1 回答 1

0

这些是系统广播,您无法控制它们被广播的次数。使您的接收器具有幂等性,例如,即使它被多次调用,它也保持相同的状态。不要计算广播,而是保存应用的当前状态并在收到广播时检查它。如果你已经处于想要的状态,什么也不做。否则,根据需要更改状态并保存。

于 2012-12-18T08:45:45.500 回答