Я использую AlarmManager для настройки повторяющихся намерений, но это вызвало некоторые небольшие проблемы, поэтому надеюсь, что кто-то может помочь.
Резюме
Есть два ожидающих намерения. Один работает на 1000, а другой работает в 2000 каждый день. Каждый из них содержит идентификатор строки из базы данных для целей идентификации. Код выглядит примерно так:
Intent i = new Intent(mContext, ScheduleReceiver.class);
i.putExtra(RuleDBAdapter.KEY_ROWID, (int)taskId);
PendingIntent pi =PendingIntent.getBroadcast(...);
mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
Удаление:
Проблема заключается в том, когда нам нужно удалить один из них. Правильный способ удаления ожидающего намерения - установить идентичный, а затем вызвать отменить из AlarmManager.
Документация для Android:
public void cancel (операция PendingIntent)
Удалите все аварийные сигналы с соответствующим намерением. Любой аварийный сигнал любого типа, чье намерение соответствует этому (как определено filterEquals (Intent)), будет отменено.public boolean filterEquals (Intent other)
Определите, совпадают ли два намерения для целей разрешения (фильтрации) намерений. То есть, если их действие, данные, тип, класс и категории одинаковы. Этот не сравнивает лишние данные, включенные в намерения.
Итак, в приведенном выше примере, если я делаю идентичный намерение, то отменю, оба из указанных намерений будут отменены, потому что они принадлежат к одному классу/тому же действию и т.д. (кроме "extra" данные rowId, но filterEquals
не заботятся о дополнительных данных).
Есть ли какое-либо обходное решение для этого?