У меня есть такой метод:

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
Okan 3 Фев 2015 в 03:28

2 ответа

Лучший ответ

Если PendingIntent имеет ту же операцию, действие, данные, категории, компоненты и флаги, он будет заменен.

В зависимости от ситуации я обычно решаю эту проблему, предоставляя уникальный код запроса либо в виде статических значений (0,1,2), либо в виде идентификатора строки данных, которые я получаю из БД.

PendingIntent.getActivity(context, MY_UNIQUE_VALUE , notificationIntent, PendingIntent.FLAG_ONE_SHOT);

Затем я использую то же уникальное значение для notify (), что и

mNotificationManager.notify(MY_UNIQUE_VALUE, notification);

Ответ: Несколько уведомлений об одном и том же действии

2
Community 23 Май 2017 в 11:49

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

PendingIntent resultPendingIntent = PendingIntent.getActivity(this, 0, resultIntent, 0);

ИЗМЕНИТЬ

Добавьте сообщение как экстра в намерение.

resultIntent.putExtra("message_extra", sender);

А в Activity восстанавливайте только новую дополнительную информацию, чтобы показать сообщение.

0
f3rn4nd000 3 Фев 2015 в 00:55