Несмотря на то, что почти все здесь дали правильный ответ, никто не объяснил, на чем основано срабатывание сигнализации
Вы можете узнать больше о AlarmManager
и его работе здесь . Но вот быстрый ответ
Вы видите, AlarmManager
в основном планирует PendingIntent
в будущем. Поэтому для отмены запланированного будильника необходимо отменить PendingIntent
.
Всегда помните о двух вещах при создании PendingIntent
PendingIntent.getBroadcast(context,REQUEST_CODE,intent, PendingIntent.FLAG_UPDATE_CURRENT);
- Код запроса - действует как уникальный идентификатор
- Флаг - определяет поведение
PendingIntent
Теперь, чтобы проверить, запланирован ли будильник или отменить будильник, вам просто нужно получить доступ к тому же PendingIntent
. Это можно сделать, если вы используете тот же код запроса и используете FLAG_NO_CREATE
, как показано ниже
PendingIntent pendingIntent=PendingIntent.getBroadcast(this,REQUEST_CODE,intent,PendingIntent.FLAG_NO_CREATE);
if (pendingIntent!=null)
alarmManager.cancel(pendingIntent);
При FLAG_NO_CREATE
он вернет null
, если PendingIntent
еще не существует. Если он уже существует, он возвращает ссылку на существующий PendingIntent