【发布时间】:2021-09-03 01:08:56
【问题描述】:
我正在使用导航组件,并尝试在用户点击通知时触发指向特定目的地的显式深层链接,由片段表示。
根据documentation,可以像这样创建待处理的意图:
val bundle = bundleOf("id" to "1234")
val pendingIntent = NavDeepLinkBuilder(context)
.setGraph(R.navigation.nav_graph)
.setDestination(R.id.myDestination)
.setArguments(args)
.createPendingIntent()
其中nav_graph定义如下:
<fragment
android:id="@+id/myDestination"
android:name="MyFragment">
<argument
android:name="id"
app:argType="string" />
<deepLink app:uri="myApp://myFragment?id={id}" /> // Removing this line it works fine
</fragment>
然后,我会使用 NotificationCompat.Builder 将 pendingIntent 用于通知:
.setContentIntent(pendingIntent)
当我点击通知时,实际打开了正确的目的地,但值 args.id 将是“null”(不是 null,而是一个具有“null”值的字符串。在我的片段中,我有
private val args by navArgs<MyFragmentArgs>()
...
override fun onCreate(saveInstanceState: Bundle?) {
args.id // The string value is "null".
}
但是,如果我从片段中删除<deepLink>,那么它将起作用。问题是我需要隐式和显式的深层链接。有没有一种方法可以同时支持导航组件?
【问题讨论】:
-
为了完整起见,请添加您正在使用的每个依赖项的版本,以防有人调查并发现 Android 代码中的相关错误。另外,您是否有重现此内容的示例项目?可以检查并练习同样问题的最小的东西? (又名:两个片段项目或类似项目)。这就是我要开始的地方(假设你在两天内没有找到回复)。如果您要报告错误,这也是 Google 会“问您”的内容。愚蠢的机器人会说:“请提供一个 AStudio 项目……”
-
换句话说,除非有人确切地知道这种情况,否则解决这个问题的唯一方法是创建一个新项目并开始试验;设置所有这些需要“几个小时”,而且没有人可能会在业余时间这样做。
-
bundleOf("id", "1234")不是bundleOf()Kotlin extension 的有效语法 - 您使用的是什么bundleOf方法?还是您的代码实际上使用了正确的bundleOf("id" to "1234")语法? -
是的,对不起,我的代码确实使用了正确的语法。我更新了问题
标签: android android-fragments android-architecture-navigation android-navigation android-navigation-graph