Если приведенный выше ответ не работает для вас, тогда есть другой способ не получать любые обратные вызовы, когда AlarmManager
срабатывает с истекшим сроком тревоги. Вам просто нужно проверить это: , отправив неправильный Intent
при создании экземпляра PendingIntent
. Например, вы хотели получить вызов onReceive
на один из ваших получателей, но вы создали PendingIntent
через getActivity
или getService
, но на самом деле вы имели в виду getReceiver
.
При создании экземпляра PendingIntent
существует много способов его создания (getService
, getActivity
, getReceiver
, getForegroundService
:
если вы хотите Activity
получатель намерения, то вы:
PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_*);
если хотите BroadcastReceiver
получатель намерения:
PendingIntent.getReceiver(this, 0, intent, PendingIntent.FLAG_*);
если вы хотите передний план Service
получатель намерения:
PendingIntent.getForegroundService(this, 0, intent, PendingIntent.FLAG_*);
если вы хотите Service
получатель намерения:
PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_*);
Кроме того, убедитесь, что вы намерены указывать на правильный класс. (например, создание намерений для деятельности, обслуживания и т. д.). Вы будете не получать любые вызовы, если вы передадите ошибочно, как это:
Intent intent = new Intent(this, MyReceiver.class); // You wanted receiver
// PendingIntent was created in such a way
// you wanted this to be received by an activity.
// you will not receive any call if you set it up like this.
PendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_*);
Я также опубликовал аналогичный ответ здесь .
НТН