Я использую AlarmManager для настройки повторяющихся намерений, но это вызвало небольшие проблемы, поэтому надеюсь, что кто-нибудь сможет помочь.
Основная информация
Есть 2 ожидающих намерения. Один работает на 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:
отмены публичного аннулирования (операция PendingIntent)
Удалите все тревоги с соответствующим Намерением. Любой сигнал тревоги любого типа, у которого Intent соответствует этому (как определено filterEquals (Intent)), будет отменен.
public boolean filterEquals (Intent other)
Определите, являются ли два намерения одинаковыми для целей разрешения намерений (фильтрации). То есть, если их действие, данные, тип, класс и категории совпадают. не сравнивает никакие дополнительные данные , включенные в намерения.
Таким образом, в приведенном выше примере, если я сделаю идентичное намерение, а затем отменим, оба вышеуказанных намерения будут отменены, поскольку они принадлежат к одному и тому же классу / тому же действию и т. Д. (За исключением «дополнительного») данные являются rowId, но filterEquals
не заботятся о дополнительных данных).
Есть ли обходной путь для этого?