无法检索新的 intent extra

Unable to retrieve new intent extras

我想向您寻求帮助,因为在尝试解决这个问题几个小时后仍然无法正常工作。 我有一个通知管理器,它处理传入的 GCM 消息并创建通知,但是传递给未决意图的意图总是在 activity.

内得到旧的附加信息(意图回收)
intent.putExtra("user_id", id);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP
                | Intent.FLAG_ACTIVITY_NEW_TASK
                | Intent.FLAG_ACTIVITY_CLEAR_TASK);

builder.setContentIntent(PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));

假设我将收到来自两个不同用户的两个通知,并且意图启动显示该用户 ID 的相同 activity。单击第一个通知后,activity 像往常一样启动,并且 intent 的 extras 包含第一个用户的用户 ID。但是,如果我将留在这个 activity 中并单击另一个推送通知,则会重新创建一个 activity(调用 onDestroy)但是,intent 的附加内容包含第一个用户的用户 ID,而不是第二个用户的用户 ID。

这是我的问题。如何检索新的 intent extras?我已经尝试实现 onNewIntent 回调方法,但它从未被调用,也尝试更改标志但未成功,对我来说有点奇怪的是,即使在调用 onDestroy 回调之后,在下一个实例中的意图额外 activity 有旧数据...

提前致谢

我认为您使用相同的 ID 或使用不适当的 intent 标志触发通知。如前所述 here,在创建待定意图时,您可以设置其标志。如果您不希望更新或覆盖之前的待定意图,则应将其标志设置为 FLAG_ONE_SHOT。这表明尽管您在系统中有多个未决意图,但每个都只能执行一次!

结论:你的代码应该是这样的:

PendingIntent pIntent = PendingIntent.getActivity(context, id,intent,PendingIntent.FLAG_ONE_SHOT);

在此代码中,"id" 每个待定意图都是唯一的,"intent" 是目标 activity 的实际意图。

干杯

PendingIntent 获取 Activity 时,您需要传递唯一 ID 而不是 0:

int iUniqueId = (int) (System.currentTimeMillis() & 0xfffffff);
builder.setContentIntent(PendingIntent.getActivity(context, iUniqueId, intent, PendingIntent.FLAG_UPDATE_CURRENT));