Android 深度链接。从历史记录打开应用程序时,意图不会重置
Posted
技术标签:
【中文标题】Android 深度链接。从历史记录打开应用程序时,意图不会重置【英文标题】:Android deep-linking. Intent doesn't reset when app is opened from history 【发布时间】:2014-08-08 16:33:43 【问题描述】:我对 android 任务和意图管理有疑问。
场景
-
用户通过应用程序的深层链接获得推送。
我们显示一个将 URI 放入 Intent 数据的通知。
用户单击通知并进入应用程序并重定向到深层链接描述的某个 Feature1Activity。
用户环顾四周,然后退出应用程序。
稍后,用户从历史记录中打开应用(长按主页或多任务按钮)。
现在使用通知中使用的相同意图(在意图数据中具有深层链接)用于启动应用程序。
因此,用户再次进入 Feature1Activity。
问题:
从历史记录启动应用(长按主页或多任务按钮)不会重置任务(从应用图标启动时会重置)。
我了解从历史记录启动应用程序不应重置任务,因为它旨在用作“获得正确的位置”。但是,就我而言,这是一个问题,因为从通知中启动应用程序是一次性的。
还有其他人遇到过这个问题吗?有谁知道解决办法吗?
更深入
PendingIntent 内部的意图是这样构建的:
Intent intent = new Intent (Intent.ActionView);
intent.addFlags (Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags (Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
intent.setData (Uri.Parse (DEEP_LINK_URL));
我就在今天发现了 FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET 并且真的认为它可以解决我的问题,但它没有任何区别。
有三个感兴趣的活动:
SplashActivity (main launcher & listener of the deep-linking schema -- this activity just redirects either to login or OverviewActivity)
OverviewActivity (authorized user's main activity)
Feature1Activity (any feature that the deep-link is pointing to)
当用户点击通知时,SplashActivity 充当架构的侦听器,并将深层链接 url 转换为两个意图,以使用 Activity.startActivities (Intent[]) 启动 OverviewActivity 和 Feature1Activity。
当我从 SplashActivity 内的通知中查看意图时,它始终包含数据中的深层链接。
一种解决方法
有一种解决方法,将一些 booleanExtra 字段设置为通知意图(例如“ignoreWhenLaunchedFromHistory”=true),然后在重定向之前检查 SplashActivity
boolean fromHistory = (getIntent().getFlags() & FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) == FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY;
if (fromHistory && getIntent().getBooleanExtra ("ignoreWhenLaunchedFromHistory", false))
// Don't follow deep-link even if it exists
else
// Follow deep-link
除了丑陋和丑陋之外,你能看出这个解决方法有什么问题吗?
编辑:只有当我负责发送带有深层链接的 Intent 时,解决方法才有效。因为没有外部来源可以知道“ignoreWhenLaunchedFromHistory”这个额外的信息。
【问题讨论】:
我也有这个问题,我正在使用与您相同的修复程序。您找到其他解决方案了吗? 这里也一样。我希望 android 团队提供一种简单的方法来解决这个问题。处理多个深层链接时会变得非常困难。 【参考方案1】:据我所知,也许在清单上使用android:excludeFromRecents="true"
(作为 Activity 声明的属性)可能会改善问题?
【讨论】:
以上是关于Android 深度链接。从历史记录打开应用程序时,意图不会重置的主要内容,如果未能解决你的问题,请参考以下文章
来自深度链接意图时如何仅打开 1 个 android 应用程序实例?