0

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

谢谢!

4

1 回答 1

3

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

于 2012-07-09T08:49:26.633 回答