Android:AlarmManager无法取消警报

时间:2011-08-16 02:06:21

标签: android alarmmanager android-pendingintent

我正在使用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();
    }
}

1 个答案:

答案 0 :(得分:1)

为什么不在列表中存储timerAlarmIntent对象并在需要时在循环中取消它们?

此致  斯特凡