通知onClick Intent向Activity发送错误数据

时间:2016-11-23 01:18:45

标签: android android-intent notifications broadcastreceiver

当我点击我的应用中的通知时,我正在使用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

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

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

为什么会这样?

谢谢!

1 个答案:

答案 0 :(得分:3)

创建Notification时,而不是:

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

这样做:

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

您的问题是您多次重复使用相同的PendingIntent。你需要确保"额外"每次使用时都会更新PendingIntent

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