Я создаю повторяющуюся тревогу. Это прекрасно работает, используя следующий код:
Intent intent = new Intent(this.ctx, AlarmReceiver.class);
intent.setAction("" + notificationId);
intent.putExtra(AlarmReceiver.TITLE, alarmTitle);
intent.putExtra(AlarmReceiver.SUBTITLE, alarmSubTitle);
intent.putExtra(AlarmReceiver.TICKER_TEXT, alarmTicker);
intent.putExtra(AlarmReceiver.NOTIFICATION_ID, notificationId);
PendingIntent sender = PendingIntent.getBroadcast(this.ctx, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = getAlarmManager();
am.setRepeating(AlarmManager.RTC_WAKEUP, triggerTime, 60000, sender);
Теперь я хочу отменить существующее уведомляющее сообщение (которое появляется каждую минуту для целей тестирования), я вызываю следующий код, передавая ему тот же идентификатор уведомления:
Intent intent = new Intent(this.ctx, AlarmReceiver.class);
intent.setAction("" + notificationId);
PendingIntent pi = PendingIntent.getService(this.ctx, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = getAlarmManager();
try {
am.cancel(pi);
} catch (Exception e) {
Log.e(PLUGIN_NAME, "AlarmManager update was not canceled. " + e.toString());
}
Я вижу, что pi != null
, однако уведомление продолжает поступать и не отменяется. Оба фрагмента кода находятся в одном классе.
В основном у меня есть два вопроса:
- Как я могу отменить один сигнал тревоги, используя его уникальный идентификатор?
- Как я могу отменить все тревоги, независимо от ID?
ОБНОВЛЕНИЕ: я обнаружил, что размещение моей проблемы здесь помогает мне понять. Изменение кода отмены с:
PendingIntent sender = PendingIntent.getService( ... )
Кому:
PendingIntent sender = PendingIntent.getBroadcast( ... )
Помогает решить вопрос 1. Однако код для отмены всех событий все равно не работает:
Intent intent = new Intent(this.ctx, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this.ctx, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager am = getAlarmManager();
am.cancel(pi);