【发布时间】:2020-09-09 02:34:03
【问题描述】:
这次我需要你的帮助,了解如何使用带有深度链接的 android 导航组件。
我一直在关注这个documentation,片段和深度链接之间的连接工作正常。
问题在于接收深层链接的活动。就我而言,我设置了 android:launchMode="singleTask"
<activity android:name=".features.welcome.WelcomeActivity"
android:launchMode="singleTask">
<nav-graph android:value="@navigation/welcome_nav_graph" />
</activity>
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
Timber.d("onNewIntent: $intent with activity: $this")
navController.handleDeepLink(intent)
}
通过这种配置,我注意到了一些奇怪的行为:
WelcomeActivity 每次单击深度链接时都会收到两次 onNewIntent 调用。有时甚至会创建该活动的新实例......就像
1_object1-onNewIntent
2_object1-onNewIntent
3_object2-onCreate
这里有一些日志:
首次发布
onCreate: Intent { flg=0x10000000 cmp={applicationId}/{package}.WelcomeActivity } 与活动: {package}.WelcomeActivity@4adbef0
打开深层链接
onNewIntent: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://{depp_link}… flg=0x10010000 cmp={applicationId}/{package}.WelcomeActivity(有 extras) } 带有活动:{package}.WelcomeActivity@4adbef0
onNewIntent: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://{depp_link}... flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity(有 extras) } 带有活动:{package}.WelcomeActivity@4adbef0
onCreate: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://{depp_link}... flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity(有 extras) } 活动:{package}.WelcomeActivity@b77c6b
杀死应用并打开深层链接
onCreate: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://{depp_link}... flg=0x10018000 cmp={applicationId}/{package}.WelcomeActivity(有 extras) } 活动:{package}.WelcomeActivity@b78f4df
onNewIntent: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://{depp_link}... flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity(有 extras) } 活动:{package}.WelcomeActivity@b78f4df
onCreate: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=https://{depp_link}... flg=0x1001c000 cmp={applicationId}/{package}.WelcomeActivity(有 extras) } 与 {package}.WelcomeActivity@dfe87b2
更新:
1 - 启动模式似乎与此问题无关。我注意到默认启动模式也是如此。
2- navController.navigate(intent.dataString.toUri()) 似乎工作正常。所以我猜问题是navController.handleDeepLink(intent)。
【问题讨论】:
-
不错。就我而言,我必须在调用 super 之前设置 intent.data = null。谢谢。
-
您找到解决方案了吗?对我来说,当我点击链接时,onNewIntent() 也会多次调用
-
@Arj1411,好吧,我很久以前就在下面发布了解决方案:D。请记住,其他人后来也这样做了,因此请选择最适合您的解决方案。
-
对我来说,唯一的区别是使用混合。
标签: android android-jetpack android-architecture-navigation android-jetpack-navigation