【问题标题】:Loading closed app from pendingintent using a broadcast receiver使用广播接收器从pendingintent加载关闭的应用程序
【发布时间】:2015-02-10 20:30:21
【问题描述】:

我正在使用 GCM 创建一个聊天应用程序。

应用程序从 MainActivity 开始,用户在那里输入用户名,我注册用户,将 gcm 信息(名称和设备 ID)保存在 Web 服务器和 SharedPreferences 中,然后我在 MainActivity 中加载用户列表。我单击列表中的用户,打开带有附加信息的 ChatActivity(我的姓名、他的姓名、他的设备 ID)。我从他那里收到一条消息,我收到一条带有待处理意图的通知,并且广播接收器更新了聊天时间线,如果我单击通知,它会打开带有更新的聊天时间线的 ChatActivity,一切正常。

当应用程序关闭并且我收到通知时会出现问题。当我点击通知时,我的应用会为该特定用户打开 ChatActivity 并使用新消息填充聊天时间线。

发生的情况是 ChatActivity 已加载,但由于它已关闭,它没有通过注册,因此它不知道活动用户是谁,也没有加载新消息。

解决此问题的最佳方法是什么?

【问题讨论】:

    标签: android notifications broadcastreceiver google-cloud-messaging android-pendingintent


    【解决方案1】:

    在通知的 Intent(包装在 PendingIntent 中的那个)中,放置与在 MainActivity 中单击列表中的用户时放入 Intent 中的相同的 Extras。鉴于您在创建通知时可以获得此信息

    【讨论】:

    • 你说的有效,但是当我点击通知并且窗口时间线已经打开时,它堆叠在顶部,如何解决?如果我收到发送的信息并且新窗口打开,则附加信息会从后续消息中消失。
    • 重新打开在 manifest.xml 中为 ChatActivity 设置的相同活动窗口:android:launchMode="singleTask"。这样,任何现有的 Activity 实例都将被重用,并放在最上面。希望这也能解决临时演员消失的问题。
    • 这里不能使用singleTask启动模式,因为ChatActivity不是根Activity。一般来说,您无论如何都不想使用该启动模式,它适用于非常特殊的情况。启动模式“singleTop”应该可以解决问题。您可能需要将Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP 添加到Intent 以获得您需要的行为(取决于ChatActivity 是否可以在其自身之上启动其他活动)
    • 这部分修复了附加内容和重叠窗口。我在通知中添加了一个 id,因此每个通知都是不同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多