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

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

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

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

Ответ 1

Об этой ошибке сообщается, но похоже, что она вообще не исследовалась. Чтобы обойти это здесь, что я сделал:

  • Отключить автоматическое отключение
  • Использовать широковещательную рассылку для контента и удалить намерения с различными действиями
  • Приемник широковещательной передачи проверяет действие
    • Действия с содержимым. Выполняйте операции щелчка и удаления и вручную отменяйте уведомление.
    • Удалить действие: только удалить операцию

Например:

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

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)

Ответ 2

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

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

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

Ответ 3

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