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