Несколько дней назад я изо всех сил пытался найти способ использовать настраиваемые намерения для моих сигналов тревоги. Хотя я получил четкий ответ, что мне нужно настроить намерения на основе некоторого уникального идентификатора, например. 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);
Это работает следующим образом:
- приложение создает сообщение для контакта
- намерение предоставляется с идентификатором контакта и подробностями о сообщении
- уведомление поднимается вместе с сообщением
- действия пользователя над уведомлением, и приложение отображает сообщение, переданное намерением
Проблема
Это может произойти более одного раза для контакта. И когда генерируется второе сообщение, уведомление поднимается хорошо (с сообщением там все в порядке), но намерение, когда пользователь выполняет действие с уведомлением, использует старые данные, поэтому передается предыдущее сообщение, а не новое сообщение.
Так что каким-то образом цель заключается в кэшировании и повторном использовании предыдущих дополнений. Как я могу сделать его уникальным для каждого контакта и каждого действия?