0

因此,假设我有一个应用程序,它使用相同的方法来安排多个一次性警报,并在每个预定时间发出通知。我相当确定我为处理这个工作而创建的方法(虽然我还没有测试过),并将它与我发现的其他示例进行比较。无论如何,困扰我的一件事是文档中的内容

public void cancel(PendingIntent 操作)自:API 级别 1

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

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

4

1 回答 1

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 的警报,则最近的警报将取消上一个警报。

最后,您可以拥有多个具有唯一 PendingIntent 的警报,但不能具有相同的 PendingIntent。

于 2012-07-06T01:45:35.867 回答