我在我的应用中创建了一个alaram,它使用此代码调用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
。如何用新的警报覆盖现有警报?
答案 0 :(得分:9)
要使用AlarmManager
取消或更新闹钟,Intent
必须使用filterEquals匹配。所以基本上,你重新创建PendingIntent
与原作相同,AlarmManager
会看到它们是相同的。这包括REQUEST_CODE
,INTENT_ACTION
和INTENT_DATA
(我可能会遗漏一些内容,但这些内容很重要。
注意:强>
EXTRAS
不用于比较两个Intent
。
因此,如果两个Intent
相等,那么第一个将被覆盖。当我有更多时间,我可以尝试找到一个资源来更好地解释这一点。
确定两个意图是否相同以进行意图解析(过滤)。也就是说,如果他们的行为,数据,类型,类别和类别是相同的。这不会比较意图中包含的任何额外数据。