我正在使用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);
使用for循环将i设置为每个警报的唯一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();
}
}
答案 0 :(得分:1)
为什么不在列表中存储timerAlarmIntent对象并在需要时在循环中取消它们?
此致 斯特凡