5

我在我的应用程序中创建了一个警报,它每天使用以下代码调用 BroadcastReceiver 来设置通知:

Intent intent = new Intent(Benachrichtigung.CUSTOM_INTENT);
PendingIntent pendingIntent  = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);

alram = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alram.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), (24 * 60 * 60 * 1000), pendingIntent);

现在我希望用户可以设置通知时间,所以我必须calendar.set使用新值调用。如何用新警报覆盖现有警报?

4

1 回答 1

11

使用 filterEquals 使用必须匹配来AlarmManager取消或更新警报。Intent因此,基本上,您重新创建与PendingIntent原始版本相同的内容,并且AlarmManager会发现它们是相同的。这包括REQUEST_CODE, INTENT_ACTIONINTENT_DATA( 我可能在那里遗漏了一些东西,但这些很重要。

笔记:

EXTRAS不用于比较两个Intents。

因此,如果两个Intents 相等,则第一个将被覆盖。当我有更多时间时,我可以尝试找到一个资源来更好地解释这一点。

根据Intent Docs filterEquals

出于意图解析(过滤)的目的,确定两个意图是否相同。也就是说,如果它们的动作、数据、类型、类和类别相同。这不会比较意图中包含的任何额外数据。

于 2013-06-19T20:47:12.020 回答