Notification onClick Intent 将错误数据发送到 Activity

Notification onClick Intent sends wrong data to Activity

当我的应用程序中的通知被点击时,我正在使用 newIntent 传递正确的 taskId。这是我的广播接收器的 onReceive() 中的代码:

 Intent newIntent = new Intent(context, TaskActivity.class);
    int taskId = intent.getIntExtra("taskId", 0);
    newIntent.putExtra("taskId", intent.getIntExtra("taskId", 0));

      Notification notification = new NotificationCompat.Builder(context)
                    .setContentTitle(intent.getStringExtra("NotificationTitle"))
                    .setContentText(intent.getStringExtra("NotificationText"))
                    .setSmallIcon(intent.getIntExtra("NotificationIcon", 0))
                    .setContentIntent(PendingIntent.getActivity(context, 0, newIntent, 0))
                    .build();

这是接收 Intent

的 activity 的代码
if (getIntent().hasExtra("taskId")) {
        currentTask = dataSource.fetchTask(getIntent().getIntExtra("taskId", 0));
    }

当我调试时,方法 getIntExtra() returns 与广播接收器的 onReceive() 中的值不同。

知道为什么会这样吗?

谢谢!

当您创建 Notification 时,而不是这样:

.setContentIntent(PendingIntent.getActivity(context, 0, newIntent, 0))

这样做:

.setContentIntent(PendingIntent.getActivity(context, 0, newIntent, PendingIntent.FLAG_UPDATE_CURRENT))

您的问题是您多次重复使用同一个 PendingIntent。您需要确保每次使用 PendingIntent 中的 "extras" 都会更新。

注意:如果您同时有多个可用的 Notification,则需要确保为每个创建唯一的 PendingIntent。为此,请确保 requestCode 参数(PendingIntent.getActivity() 中的第二个参数)对于每个 Notification 都是不同的(例如,您可以使用 taskId 作为唯一的requestCode).