无法检索新的意图附加内容

时间:2015-07-04 10:57:36

标签: android android-intent android-activity notifications push-notification

我想请求你的帮助,因为在试图解决这个问题几个小时之后仍然无法让它发挥作用。 我有一个通知管理器来处理传入的GCM消息并创建通知,但是传递给待定意图的意图总是在活动中得到旧的额外(意图回收)。

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的同一活动。点击第一个通知后,通常会启动活动,而意图的附加功能包含第一个用户的用户ID。但是,如果我将保留在此活动中,并单击另一个推送通知,则会重新创建一个活动(调用onDestroy),但意图的附加内容包含第一个用户的用户ID,而不是第二个用户的用户ID。

这是我的问题。如何检索新的意图附加内容?我已经尝试过实现onNewIntent回调方法,但是它永远不会被调用,也试图改变标志但是没有成功,对我来说有点奇怪,即使在onDestroy回调被调用之后,下一个意图额外该活动的实例有旧数据......

提前致谢

2 个答案:

答案 0 :(得分:2)

Activity抓取PendingIntent时,您需要传递唯一ID代替0:

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

答案 1 :(得分:0)

我认为您使用相同的ID或不适当的意图标记来触发通知。正如提到的here,在创建待定意图时,您可以设置其标志。如果您不喜欢要更新或覆盖的先前待处理意图,则应将其标志设置为FLAG_ONE_SHOT。它表示虽然系统中有多个挂起的意图,但每个意图只能执行一次!

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

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

在此代码中,“id”对于每个待处理的意图是唯一的,“intent”是目标活动的实际意图。

干杯