Я использую 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();
}
}