【问题标题】:Notification onClick Intent sends wrong data to Activity通知 onClick Intent 向 Activity 发送错误数据
【发布时间】:2016-11-23 01:18:45
【问题描述】:

当点击我的应用程序中的通知时,我正在使用 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() 方法返回的值与广播接收器的 onReceive() 中的值不同。

任何想法为什么会发生这种情况?

谢谢!

【问题讨论】:

  • 我建议你通过打印taskId的值来交叉检查int taskId = intent.getIntExtra("taskId", 0);这行代码。你从哪里得到这个值?
  • 该值来自于 onreceive() 参数中传递的意图。在此之前,我使用键“taskId”设置了一个警报管理器。我已经打印了这个值,这正是问题所在:当我将它传递给警报管理器时,它与广播接收器接收到的相同。然而,由通知的点击意图启动的活动接收到错误的值。

标签: android android-intent notifications broadcastreceiver


【解决方案1】:

当你创建 Notification 时,而不是这个:

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

这样做:

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

您的问题是您多次重复使用相同的PendingIntent。您需要确保每次使用时更新PendingIntent 中的“附加”。

注意:如果您同时有多个Notifications 可用,那么您需要确保为每个PendingIntents 创建唯一的PendingIntents。为此,请确保每个NotificationrequestCode 参数(PendingIntent.getActivity() 中的第二个参数)都不同(例如,您可以将taskId 用作唯一的requestCode)。

【讨论】:

  • 谢谢。 requestCode 抓住了我。为什么没有正确记录这一点超出了我的理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
  • 2019-05-09
  • 2014-03-27
  • 1970-01-01
  • 2019-09-25
相关资源
最近更新 更多