导航组件隐式深层链接后按退出应用

Posted

技术标签:

【中文标题】导航组件隐式深层链接后按退出应用【英文标题】:Navigation Component implicit deep link back press exits the app 【发布时间】:2021-11-27 15:14:56 【问题描述】:

我创建了一个隐式深层链接,就像文档中提到的那样。

https://developer.android.com/guide/navigation/navigation-deep-link#implicit

隐式 - domain.com/ 当我点击它时,你会打开一个新的活动实例,在文档中提到????

如果我按下它会退出应用程序。

文档说它应该回到以前的应用程序并重新加载该片段,我在这里做错了什么?

If the flag is not set, you remain on the task stack of the previous app where the implicit deep link was triggered. In this case, the Back button takes you back to the previous app, while the Up button starts your app's task on the hierarchical parent destination within your navigation graph.

返回按钮和向上按钮有什么区别?

【问题讨论】:

你是如何启动你的深层链接的?您的活动是通过Intent.FLAG_ACTIVITY_NEW_TASK 发起的吗?您是使用系统后退按钮还是向上按钮进行测试? @ianhanniballake 点击URL后直接启动,activity没有flag。向上按钮将我带到我的应用程序顶部,系统返回关闭应用程序,我已经使用 onbackpress 回调覆盖了 navigateUp() 这不应该执行向上操作吗? “关闭应用程序”是指它会将您返回到您点击 URL 的应用程序? 是的,它确实把我带回来了,例如在 discord 上点击它,去那里 【参考方案1】:

文档说它应该回到以前的应用程序并重新加载该片段,我在这里做错了什么?

您特别引用的文档说系统返回将带您回到与您的应用深度链接的应用,因此您看到的行为是预期的。

例如,如果您单击 Discord 应用中的一个链接并且该应用不使用 FLAG_ACTIVITY_NEW_TASK,那么您的应用存在于 Discord 的 task stack 上,并且是其后台堆栈的一部分。这意味着系统返回按钮有望将您带回 Discord。

根据Principles of Navigation,当您的活动被放置在另一个应用程序的任务堆栈上时,向上按钮的功能会有所不同:

向上按钮永远不会存在于您的应用中

当您的应用在另一个应用的任务上使用 deep link 启动时,Up 会将用户转换回您应用的任务并通过 simulated back stack 而不是触发深层链接的应用。但是,“后退”按钮确实会将您带回另一个应用程序。

因此,预计向上按钮始终将用户留在您的应用中,而向上按钮永远不会将用户返回到 Discord 应用。

【讨论】:

好的好的明白谢谢!

以上是关于导航组件隐式深层链接后按退出应用的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 导航组件中检索目的地的深层链接

带有导航组件的 Android 深层链接无法按预期工作

使用导航从一个片段导航到另一个片段后,防止后按工作

导航组件 NavDeepLinkBuilder 回栈

使用深层链接导航 | MAD Skills

如何在构建时使用占位符和导航组件创建 Deeplink