当您有多个一次性警报时使用AlarmManager.cancel()

时间:2012-07-05 21:47:56

标签: android alarmmanager android-alarms

所以,假设我有一个应用程序使用相同的方法来安排多个一次性警报,并在每个预定时间发出通知。我非常肯定我为处理这个工作而创建的方法(虽然我还没有测试过它),comparing it to other examples I've found。无论如何,困扰我的一件事是something in the documentation

  

public void cancel(PendingIntent操作)从:API Level 1

     

删除具有匹配Intent的所有警报。任何类型的警报,   其Intent与此Intent匹配(由filterEquals(Intent)定义),   将被取消。

由于此应用程序设计为具有多个一次性警报,我想知道我是否假设由于这些都来自相同方法创建的相同基本意图,因此取消一个警报将取消所有警报。如果是这样,我将如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

您可以通过使用唯一ID创建警报来区分警报,例如:

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getActivity(this,UNIQUE_ID_GOES_HERE, intent, 0);
AlarmManager am = (AlarmManager)getSystemService(Activity.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(),pi);

现在,当您想要取消此警报时,您必须使用相同的唯一ID创建相同的PendingIntent。例如,以下内容仅取消您使用PendingIntent id 1234创建的警报。

Intent intent = new Intent(this, AlarmReceiverActivity.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 1234, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);

am.cancel(pi);

这个想法很简单。跟踪ID,然后使用它们取消各自的警报。如果您创建具有相同ID的多个警报,则最新的警报将取消之前的警报。

最后,您可以使用唯一的PendingIntents发出多个警报,但不能使用相同的PendingIntent。