Уведомление 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, чтобы обнаружить отмену, выполняемую явным нажатием кнопки.