我正在使用 alarmManager 在我的应用程序中设置多个警报并遇到了问题。以这种方式设置 PendingIntent 时:
timerAlarmIntent = PendingIntent.getBroadcast(myContext, 0, alarmIntent, 0);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);
如果 requestCode 设置为 0(在 getBroadcast 中的上下文旁边),我可以使用:
myAM.cancel(timerAlarmIntent);
取消我在应用程序中设置的任何数量的警报。但是,我设置的每个警报都会覆盖最后一个警报,因此只有一个警报最终会响起。如果我将 requestCode 设置为唯一编号,例如:
timerAlarmIntent = PendingIntent.getBroadcast(myContext, i, alarmIntent, 0);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);
其中 i 使用 for 循环设置为每个警报的唯一 ID 号。这样所有警报都可以正常运行,但我无法取消警报,因为在我运行时实际上只有一个警报会取消:
myAM.cancel(timerAlarmIntent);
如何将 requestCode 设置为唯一编号并且还可以选择取消它?
我最终用来解决问题的代码是:
timerAlarmIntent = PendingIntent.getBroadcast(myContext, i, alarmIntent, 0);
ArrayList<PendingIntent> intentArray = new ArrayList<PendingIntent>();
intentArray.add(timerAlarmIntent);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);
要取消 PendingIntents,我设置了以下方法:
private void cancelAlarms(){
if(intentArray.size()>0){
for(int i=0; i<intentArray.size(); i++){
myAM.cancel(intentArray.get(i));
}
intentArray.clear();
}
}