如何同时取消多个PendingIntent的多个警报?

时间:2012-07-09 08:31:16

标签: android duplicates alarmmanager android-pendingintent

我正在设置多个警报,这些警报将具有完全相同的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

谢谢!

1 个答案:

答案 0 :(得分:3)

如果您有预定义的警报数量,则可以为每个警报设置唯一的requestCodegetBroadcast的第二个参数)。但我不确定这是否适合你。如果您未指定requestCode,则所有警报将被filterEquals视为相等,因此所有警报都将被取消。