Несколько уведомлений об одном и том же действии

#android #android-intent #android-pendingintent #notificationmanager

#Android #android-намерение #android-pendingintent #notificationmanager

Вопрос:

У меня есть действие, которое открывается из панели уведомлений, но когда я это делаю NotificationManager.notify(...) , я передаю намерению другой пакет, так что каждое уведомление открывает одно и то же действие, но получает из базы данных другую информацию друг о друге.

Но когда я пытаюсь перейти к любому из уведомлений (например, есть 3 уведомления), все они отправляют меня на действие с тем же пакетом, что и последнее. После попытки с некоторыми флагами я действительно не знаю, в чем проблема (некоторые флаги приводят к тому, что уведомление вводится в действие с первым пакетом).

Я следую тому, как они использовали это в руководстве.

Комментарии:

1. Можете ли вы поделиться частью кода, в котором вы создаете отложенные намерения? У меня была похожая проблема, и это было потому, что они были отложенными намерениями, которые повторно использовались платформой.

Ответ №1:

Если у PendingIntent одинаковые операция, действие, данные, категории, компоненты и флаги, он будет заменен.

В зависимости от ситуации я обычно решаю эту проблему, предоставляя уникальный код запроса либо в виде статических значений (0,1,2), либо идентификатора строки данных, которые я получаю из базы данных.

 PendingIntent.getActivity(context, MY_UNIQUE_VALUE , notificationIntent, PendingIntent.FLAG_ONE_SHOT);
  

Затем я использую то же уникальное значение для notify (), что и

 mNotificationManager.notify(MY_UNIQUE_VALUE, notification);
  

Комментарии:

1. У меня была такая же проблема, и это решение работает отлично. Я думаю, что проблема начинается с документации , в которой утверждается, что код запроса в настоящее время не используется, но, похоже, это так. Спасибо за ответ.

2. Это сделало это за меня. Большое спасибо. В документах разработчика действительно упоминается уникальный идентификатор только для метода notify, а не для метода getActivity.

3. PendingIntent. FLAG_UPDATE_CURRENT также не работает. Спасибо за ответ.

4. Спасибо, у меня это сработало. Но помните, что значение MY_UNIQUE_VALUE не должно быть больше 65535 (2 ^ 16), потому что разрешено использовать только первые 16 бит кода запроса (2 ^ 8 для фрагментов). Простым решением является использование (MY_UNIQUE_VALUE % 65535) в качестве кода запроса. Так что это не выйдет за рамки 2 ^ 16 😉

5. Идеальный ответ, почему это не принятый ответ до сих пор?