Android: AlarmManager не может отменить сигналы тревоги

Я использую 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. Таким образом, все будильники работают нормально, но я не могу отменить будильник, потому что только один будильник фактически отменяется, когда я запускаю:

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();
    }
}

person ryandlf    schedule 16.08.2011    source источник


Ответы (1)


Почему бы вам не хранить объекты timerAlarmIntent в списке и не отменять их в цикле, когда это необходимо?

С уважением, Стефан

person Snicolas    schedule 16.08.2011
comment
Иногда вам просто нужно, чтобы кто-то разъяснил что-то очень очевидное. Спасибо, ваше предложение сработало. Я обновил свой вопрос кодом, который в итоге использовал. - person ryandlf; 16.08.2011