#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. Идеальный ответ, почему это не принятый ответ до сих пор?