Уведомление Auto-Cancel не вызывает DeleteIntent

Я реализую GCM в своем приложении и сохраняю хэш уведомлений, чтобы отслеживать, что находится в тени уведомлений (я должен изменить намерения на основе того, находится ли пользователь в приложении или нет).

Я устанавливаю deleteIntent PendingIntent для всех моих уведомлений. Все это делает удаление уведомления из моего локального хеша, поэтому он больше не будет обновляться. Цель увольняется, если я удаляю все или удаляю, чтобы удалить уведомление. Тем не менее, я также установил, что мои уведомления автоматически отменены. Нажатие на уведомление не вызывает deleteIntent для моего уведомления.

Мой вопрос в том, есть ли способ получить уведомление, когда мои Уведомления будут автоматически отменены?

Solutions Collecting From Web of "Уведомление Auto-Cancel не вызывает DeleteIntent"

Сообщается об этой ошибке, но она не выглядит так, как она была исследована вообще. Чтобы обойти это, вот что я сделал:

  • Отключить автоотключение
  • Использовать трансляцию как для контента, так и для удаления намерений с различными действиями
  • Трансляционный приемник проверяет действие
    • Действие по содержанию: выполнять операции «щелчок» и «удаление», а также отменять уведомление вручную
    • Удалить действие: только удаление операции

Например:

Отправить уведомление

Notification.Builder builder = new Notification.Builder(context) // Set other properties (not auto-cancel) .setContentIntent(PendingIntent.getBroadcast(context, 0, new Intent(NOTIFICATION_CLICKED_ACTION), 0)) .setDeleteIntent(PendingIntent.getBroadcast(context, 0, new Intent(NOTIFICATION_DELETED_ACTION), 0)); notificationManager.notify(NOTIFICATION_ID, builder.build()); 

Получать трансляцию

 if (intent.getAction().equals(NOTIFICATION_CLICKED_ACTION)) { startActivity(new Intent(context, MyActivity.class)); notificationManager.cancel(NOTIFICATION_ID); } // Do deletion behaviour here (for both click and delete actions) 

Документация говорит здесь и здесь , что нажатие на уведомление с FLAG_AUTO_CANCEL отменяет его автоматически. Такое поведение означает также, что регулярный contentIntent (если установлен) будет срабатывать вместе с автоматической отменой, поскольку он запускается в ответ на действие щелчка пользователя. Используйте поле contentIntent вместе с deleteIntent, чтобы обнаружить отмену, выполняемую явным нажатием на пользователя.

Это правильное поведение в DeleteIntent, как описано здесь в документации Android SDK:

Предоставлять PendingIntent для отправки, когда уведомление очищается явно пользователем .

DeleteIntent будет вызываться только тогда, когда уведомление будет явно очищено пользователем, отбросив его или используя функцию «очистить все» в меню уведомлений. Нажатие на уведомление будет ТОЛЬКО запускать ContentIntent EVEN, если для AutoCancel установлено значение True.