Intereting Posts
Могу ли я сделать снимок экрана на домашнем экране программно, не укореня свое устройство Android? Текущая интеграция приложений Android в Firebase Запретить рисование за пределами холста с помощью SurfaceView Принудительно отключить флэш-память Vimeo или отключить Flash в WebView? Проверьте настройки уведомлений пользователя Android «когда устройство заблокировано» Как настроить пользовательский цвет в выбранном / выделенном элементе списка в активированном блоке Как получить плотность экрана? Разрезать видео в андроиде по исходной позиции до конечной позиции Cropping Shape of Square Image Android в приложении AdView замедляет работу всего приложения, возможную причину HttpURLConnection Сообщение: выходной поток не влияет? Как создать баннер admob программно? Неприятный крах с последними сервисами Google Play Phonegap – сборка для android -> Класс не найден: javac1.8 Почему «Кнопки в панелях кнопок должны быть без полей» в Android API Level 15?

Android сохраняет кеширование моих намерений. Дополнительно, как объявить ожидающее намерение, которое содержит свежие дополнения?

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

Я определяю PendingIntent таким образом:

 Intent intent = new Intent(this, viewContactQuick.class); intent.setAction("newmessage"+objContact.getId());//unique per contact intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK ).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP ); intent.putExtra("id", Long.parseLong(objContact.getId())); intent.putExtra("results", result.toArray()); PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0); 

То это используется менеджером уведомлений

 NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(ns); // first try to clear any active notification with this contact ID mNotificationManager.cancel(Integer.parseInt(objContact.getId())); // then raise a new notification for this contact ID mNotificationManager.notify(Integer.parseInt(objContact.getId()), notification); 

Это работает следующим образом:

  • Приложение создает сообщение для контакта
  • Намерение предоставляется идентификатором контакта и сведениями о сообщении
  • Уведомление возникает с сообщением
  • Пользовательские действия в уведомлении, и приложение отображает сообщение, переданное намерением

Проблема

Это может случиться более одного раза для контакта. И когда генерируется второе сообщение, уведомление повышается хорошо (сообщение там хорошо), но намерение, когда пользователь выполняет уведомление, использует старые данные, поэтому передается предыдущее сообщение, а не новое сообщение.

Так что каким-то образом намерение заключается в кешировании и повторном использовании предыдущих дополнений. Как я могу сделать его уникальным для каждого контакта и для каждого действия?

Если только один из ваших PendingIntents для этого контакта будет выдающимся в любой момент времени или если вы всегда хотите использовать последний набор дополнительных функций, используйте FLAG_UPDATE_CURRENT при создании PendingIntent .

Если PendingIntent будет PendingIntent с конкретным PendingIntent , и им необходимо иметь отдельные дополнительные функции, вам нужно будет добавить счетчик или временную метку или что-то другое, чтобы отличить их.

 intent.setAction("actionstring" + System.currentTimeMillis()); 

ОБНОВИТЬ

Кроме того, слегка документированный второй параметр getActivity() и kin на PendingIntent видимому, может быть использован для создания отдельных объектов PendingIntent для одного и того же базового Intent , хотя я никогда не пробовал это.

Обычно я указываю уникальный requestCode для предотвращения переопределения моих PendingIntents:

 PendingIntent pending = PendingIntent.getService(context, unique_id, intent, 0); 

И в вашем случае я согласен с CommonsWare, вам нужен только флаг FLAG_UPDATE_CURRENT. Новые дополнения изменят старые значения.