Intereting Posts
Установка подписанного APK не устанавливает приложение на Android Wear SoundCloud, как форма поиска сигналов? Что такое Dalvik и dalvik-cache? Начальный экран Android Виджет: метод RemoteViews setRemoteAdapter (…) не работает с API 11+ Загрузчик не может быть перезапущен после изменения ориентации Как проверить доступность пространства на внешнем хранилище? Уведомление о таймере обратного отсчета Как сделать Android-телефон Bluetooth-гарнитурой? XMPP "stream: error (conflict)" при попытке повторно подключиться или войти в систему «Растровое изображение слишком велико, чтобы быть загруженным в текстуру» Сделайте снимок экрана целиком Пользовательский API-интерфейс точного выравнивания по значению <21 с поддержкой библиотеки 22.1.1 Бинарная строка XML-файла # 9: ошибка раздувания фрагмента класса StartActivityForResult () из фрагмента и заканчивая дочерним действием, не вызывает onActivityResult () в фрагменте Как загрузить строку html в webview?

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); 

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

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

Проблема

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

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

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

Если только один из ваших 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. Новые дополнения изменят старые значения.