我正在设置多个警报,这些警报将具有完全相同的PendingIntent
对象,但它们的起飞时间是不同的。如果我通过向Intent
提供相同的PendingIntent
对象来取消一个警报,并将其传递给AlarmManager.cancel()
,它是否会取消所有警报(即具有不同的启动时间)或是否会展示一些警报其他行为?
以下是代码:
while(size != 0)
{
timeToSet = getNewTime(); //gets calendar object
Intent intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("uniqueid", uuid);
intent.putExtra("vibrate", myalarm.getVibrate());
intent.putExtra("important", myalarm.getImportant());
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(),
0, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, timeToSet.getTimeInMillis(), 604800000, pendingIntent);
size--;
}
因此所有警报的Intent对象都相同,但时间不同。 现在当我取消这些警报时:
Intent intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("uniqueid", uuid);
intent.putExtra("vibrate", myalarm.getVibrate());
intent.putExtra("important", myalarm.getImportant());
PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
所有警报都会被取消吗?这就是我想要的。我可以在每个requestCode
中使用不同的PendingIntent
,但如果所有这些都被取消会更好,因为我不想维护并存储这些额外的requestCodes
。
谢谢!
答案 0 :(得分:3)
如果您有预定义的警报数量,则可以为每个警报设置唯一的requestCode
(getBroadcast
的第二个参数)。但我不确定这是否适合你。如果您未指定requestCode
,则所有警报将被filterEquals
视为相等,因此所有警报都将被取消。