У меня есть такой метод:
private void createNotification(String sender) {
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setContentTitle(sender+" sent you a message")
.setAutoCancel(true)
.setSmallIcon(R.drawable.ribony_top_icon)
.setContentText("Touch for reply")
Intent resultIntent = new Intent(this, LoginActivity.class);
resultIntent.putExtra("gcm_username",sender);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(NotificationID.getID(sender), mBuilder.build());
}
Я создаю 3 трех таких уведомления:
createNotification("test1");
createNotification("test2");
createNotification("test3");
Уведомления создаются без проблем. Но когда я касаюсь уведомления test1
или test2
, оно вызывает test3
, я имею в виду, что все намерения уведомлений устанавливаются на последнее намерение. Как я могу это решить?
2 ответа
Если PendingIntent имеет ту же операцию, действие, данные, категории, компоненты и флаги, он будет заменен.
В зависимости от ситуации я обычно решаю эту проблему, предоставляя уникальный код запроса либо в виде статических значений (0,1,2), либо в виде идентификатора строки данных, которые я получаю из БД.
PendingIntent.getActivity(context, MY_UNIQUE_VALUE , notificationIntent, PendingIntent.FLAG_ONE_SHOT);
Затем я использую то же уникальное значение для notify (), что и
mNotificationManager.notify(MY_UNIQUE_VALUE, notification);
Ответ: Несколько уведомлений об одном и том же действии
Это происходит потому, что, когда вы создаете свой PendingIntent, последний аргумент указывает, есть ли какое-либо другое ожидающее намерение для того же действия, просто будет обновлено, вместо того, чтобы создать новое. Вам нужно только изменить последний аргумент на некоторые другие флаги или поставить только 0, чтобы указать, что специальный флаг не нужен.
PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, 0);
ИЗМЕНИТЬ
Добавьте сообщение как экстра в намерение.
resultIntent.putExtra("message_extra", sender);
А в Activity восстанавливайте только новую дополнительную информацию, чтобы показать сообщение.
Похожие вопросы
Связанные вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.