【问题标题】:Unable to retrieve new intent extras无法检索新的意图附加内容
【发布时间】:2015-07-04 10:57:35
【问题描述】:

我想向您寻求帮助,因为在尝试解决这个问题几个小时后仍然无法解决问题。 我有一个通知管理器,它处理传入的 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,而不是第二个用户。

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

提前致谢

【问题讨论】:

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


    【解决方案1】:

    在从PendingIntent 获取Activity 时,您需要传递唯一ID 来代替0:

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

    【讨论】:

      【解决方案2】:

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

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

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

      在此代码中,“id”对于每个待处理的 Intent 都是唯一的,“intent”是目标 Activity 的实际 Intent。

      干杯

      【讨论】:

      • 感谢阿敏的回复!
      猜你喜欢
      • 1970-01-01
      • 2014-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多