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

Это работает как это:

  • приложение создает сообщение для контакта
  • намерению предоставляют идентификатор контакта и детали о сообщении
  • уведомление повышено с сообщением
  • пользовательские действия с уведомлением и отображениями приложения сообщение передаются намерением

Проблема

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

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

62
задан Pentium10 29 June 2010 в 11:12
поделиться

2 ответа

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

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

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

ОБНОВЛЕНИЕ

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

96
ответ дан 24 November 2019 в 16:43
поделиться

Я обычно указываю уникальный requestCode, чтобы мои PendingIntents не перекрывали друг друга:

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

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

34
ответ дан 24 November 2019 в 16:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: