从多个通知中启动 activity 会覆盖之前的意图

Launch activity from multiple notifications overrides the previous intent

public static void showNotification(Context ctx, int value1, String title, String message, int value2){

    NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent notificationIntent = new Intent(ctx, ActivityMain.class);
    int not_id = Utils.randInt(1111, 9999);
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    notificationIntent.putExtra("key_1", value1);
    notificationIntent.putExtra("key_2", value2);

    TaskStackBuilder stackBuilder = TaskStackBuilder.create(ctx.getApplicationContext());
    stackBuilder.addNextIntent(notificationIntent);
    PendingIntent notifPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);

    notificationManager.notify(not_id, createNotification(ctx, notifPendingIntent, title, message));
}

这是我发送和显示 notification 的代码。我从服务发送这个。如您所见,我发送了 2 个额外的值(key_1key_2);当我单击通知时,我应该打开 activity 并看到键的 value1value2

问题是:如果在我打开任何通知之前收到另一个通知,value1value2 将被覆盖。例如:

所以我将在栏中收到 3 个通知。现在,无论我点击什么通知,第一、第二、第三,我都会看到最后一个 fubarfobaz 发送的值。 我想要的是当我单击特定通知时,activity 显示该通知发送的值。

我们将不胜感激任何帮助。谢谢。

这是因为您正在使用 FLAG_UPDATE_CURRENT

Flag indicating that if the described PendingIntent already exists, then keep it but replace its extra data with what is in this new Intent.

这就是将您的 extra 数据替换为上次意图的数据。

而是在此处为 PendingIntent 的默认行为传递 0:

PendingIntent notifPendingIntent = stackBuilder.getPendingIntent(0, 0);