安卓深度链接。从历史记录中打开应用时,Intent 不会重置



我有一个关于Android任务和意图管理的问题。

  1. 用户获得推送与应用程序的深度链接。
  2. 我们显示了一个将URI放入Intent Data的通知。
  3. 用户点击通知,进入应用程序,重定向到一些深链接描述的Feature1Activity。
  4. 用户环顾四周,退出应用程序。
  5. 之后,用户从历史记录打开应用程序(长按home键或多任务键)。
  6. 现在,从通知中使用的相同的意图(在意图数据中使用深链接)被用来启动应用程序。
  7. 因此,用户再次进入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"在您的清单(作为活动声明的属性)可能会改善这个问题?

相关内容

最新更新