【发布时间】:2011-12-13 22:43:13
【问题描述】:
(跳过简短摘要)我的应用程序中的活动序列有问题。该应用程序有 3 个 Activity,它们从 A 流向 B 流向 C(如果连续按下返回,则从 C 流向 B 流向 A)。在正常操作中,该应用程序运行良好,我遇到的问题是收到 C2DM 通知时。
收到通知后,我希望将 PendingIntent 发送到当前活动的活动,或者在应用未运行的情况下启动应用。
在通知接收器中,无论当前活动是什么(保存在 Application 类中)都会创建一个 PendingIntent,这也可以正常工作。
但是,当 Activity 与创建 PendingIntent 的那个不同时,就会出现问题。
即在 Activity C 中收到通知,并使用指向 Activity C 的 Intent 创建 PendingIntent。用户导航回 Activity A 并单击通知,该通知触发 Intent 并启动 Activity C,我希望将其发送到A.
我想要的是将意图发送到当前活动的任何内容。我尝试创建一个 Activity X,它是 PendingIntent 的目标,然后在创建 Activity X 时检查哪个 Activity 当前处于活动状态,它存储在 Application 类中。
但是我在这里也遇到了 Intent 标志的问题。我想将 SINGLE_TOP 标志用于我将使用的 Intent,以确保为当前 Activity 调用 onNewIntent,这样我在 onCreate 和 onResume 中的代码就不会出现问题。
我在这里遇到的问题是 Activity X 现在位于 Activity 堆栈的顶部,而单顶不是因为这个。我已尝试将 NO_HISTORY 和 EXCLUDE_FROM_RECENTS 标志用于未决意图,以便不将活动 X 添加到堆栈中,然后使用 SINGLE_TOP 启动活动 A、B 或 C,但它会创建它们的新实例,而不是使用存在。
总结:
4 activities: A,B,C,X and a receiver for notifications.
on receipt of a notification:
//not sure which is better to use or even if they're right for my purpose
start X with a PendingIntent with FLAG_ACTIVITY_NO_HISTORY or FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
Acivity X then gets the currently running activity from Application (A,B or C)
create an intent for the current activity (A,B or C) with FLAG_ACTIVITY_SINGLE_TOP
But onNewIntent is never called a new instance of A,B or C is created.
有没有更明智的方法来解决这个问题,我使用的标志是错误的吗?我是否误解了有关意图工作方式的基本知识,任何帮助将不胜感激。很抱歉这个冗长的问题。此外,如果需要代码,我可以在明天离开工作站时发布它。
【问题讨论】:
标签: android notifications android-intent android-pendingintent