我有一个关于Android任务和意图管理的问题。
- 用户获得推送与应用程序的深度链接。 我们显示了一个将URI放入Intent Data的通知。
- 用户点击通知,进入应用程序,重定向到一些深链接描述的Feature1Activity。
- 用户环顾四周,退出应用程序。
- 之后,用户从历史记录打开应用程序(长按home键或多任务键)。
- 现在,从通知中使用的相同的意图(在意图数据中使用深链接)被用来启动应用程序。
- 因此,用户再次进入Feature1Activity。
问题:
从历史记录(长按home键或多任务键)启动应用程序不会重置任务(从应用程序图标启动时会重置)。
我明白从历史中启动应用程序不应该重置任务,因为它的目的是用作"get-right back-where you were"。然而,在我的情况下,这是一个问题,因为从通知启动应用程序是一次性的事情。
还有人遇到过这个问题吗?有人知道解决办法吗?
更深入的
PendingIntent中的intent是这样构建的:
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转换为两个意图,以启动OverviewActivity和Feature1Activity。startActivities(意图[]).
当我从SplashActivity内部的通知中查看intent时,它总是包含Data中的deep-link。
绕过
有一个工作,设置一些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
除了粗俗和丑陋之外,你能看到这个工作有什么问题吗?
编辑:周围的工作只适用于当我负责发送与深链接的意图。由于没有外部源可以知道"ignoreWhenLaunchedFromHistory" extra.
从我得到的,也许使用android:excludeFromRecents="true"
在您的清单(作为活动声明的属性)可能会改善这个问题?