Android: AlarmManager не может отменить тревоги - PullRequest
2 голосов
/ 16 августа 2011

Я использую alarmManager для настройки нескольких будильников в приложении и столкнулся с проблемой.При настройке PendingIntent таким образом:

timerAlarmIntent = PendingIntent.getBroadcast(myContext, 0, alarmIntent, 0);
myAM.set(AlarmManager.RTC_WAKEUP, alarmTime, timerAlarmIntent);

Где requestCode установлен в 0 (кроме контекста в getBroadcast), я могу использовать:

myAM.cancel(timerAlarmIntent);

для отмены любого количества аварийных сигналов. Iустановить в приложении.Однако каждый установленный мной сигнал тревоги перезаписывает последний, поэтому в итоге срабатывает только один сигнал тревоги.Если я устанавливаю код запроса равным уникальному номеру, например:

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

1 Ответ

1 голос
/ 16 августа 2011

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

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

...