Android深层链接。从历史记录打开应用程序时,Intent不会重置

时间:2014-06-18 11:38:42

标签: android android-intent

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

方案

  1. 用户通过深入链接进入应用程序。
  2. 我们显示将URI放入Intent Data的通知。
  3. 用户点击通知并进入应用并重定向到深层链接描述的某些Feature1Activity。
  4. 用户环顾四周,退出应用程序。
  5. 稍后,用户从历史记录中打开应用程序(长按主页或多任务按钮)。
  6. 现在使用通知中使用的相同意图(使用Intent Data中的深层链接)来启动应用程序。
  7. 因此,用户再次进入Feature1Activity。
  8. 问题:

    从历史记录启动应用程序(长按主页或多任务按钮)不会重置任务(从应用程序图标启动时会执行此操作)。

    我知道从历史记录中启动应用程序不应该重置任务,因为它旨在用作“get-right-back-where-you-are”。但是,在我的情况下,这是一个问题,因为从通知中启动应用程序是一次性的事情。

    其他人遇到过这个问题?有人知道任何解决方案吗?

    更深入

    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充当架构的监听器,并使用Activity.startActivities(Intent [])将深层链接网址转换为两个意图以启动OverviewActivity和Feature1Activity。 p>

    当我从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
    

    除了它是hackish和丑陋之外,你能看到这项工作有什么问题吗?

    编辑:当我负责使用深层链接发送Intent时,解决方法才有效。由于没有外部资源可以了解“ignoreWhenLaunchedFromHistory”的额外信息。

1 个答案:

答案 0 :(得分:2)

从我得到的,可能在你的清单上使用android:excludeFromRecents="true"(作为活动声明的属性)可能会改善这个问题?