Несколько дней назад я изо всех сил пытался найти способ использовать индивидуальные намерения для своих сигналов тревоги. Хотя я получил ясный ответ, что мне нужно настроить намерения на основе некоторого уникального идентификатора, например. setAction()
все еще есть некоторые проблемы.Android сохраняет кеширование моих намерений. Дополнительно, как объявить ожидающее намерение, которое содержит свежие дополнения?
Я определяю 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);
Это работает так:
- приложение создает сообщение для контакт
- намерение предоставляется с контой кт идентификатор и сведения о сообщении
- уведомление поднятого с сообщением
- actiones пользователя на уведомление и приложение отображает сообщение, принятый умысел
Проблема
Это может случаются не раз для контакта. И когда генерируется второе сообщение, уведомление повышается хорошо (сообщение там хорошо), но намерение, когда пользователь выполняет уведомление, использует старые данные, поэтому передается предыдущее сообщение, а не новое сообщение.
Итак, в какой-то момент целью является кэширование и повторное использование предыдущих дополнений. Как я могу сделать его уникальным для каждого контакта и для каждого действия?
Есть ли способ очистить все кэшированные IntentExtras? Я предполагаю, что я исправил его сейчас, но старые кэшированные намерения по-прежнему остаются ... – OneWorld
Аналогичная проблема может возникнуть в зависимости от флагов Intent или режима запуска ActivityMode.В этом случае вам нужно будет проверить [Activity :: onNewIntent] (http://j.mp/ieXMCA), потому что Activity :: getIntent вернет ORIGINAL намерение Activity, а не новое намерение с обновленными действиями/дополнениями /и т.д. – brack