与 android 中带有导航组件的查询参数的深层链接

Deeplinks with Query Params with nav component in android

我已经为我的应用程序实现了深层链接。我正在通过

处理我的深层链接
navController.handleDeepLink(intent)

正常情况下没问题

问题是当我有这样的深层链接时:

https://example.com/list

它应该带我到列表页面

https://example.com/list?id=SOMEID&type=SOMETYPE

这会将用户重定向到项目的详细信息页面。

但这并没有发生。它总是带我到列表屏幕。我该如何解决这个问题?

这就是我在导航文件中定义深层链接的方式:

 <deepLink
     android:id="@+id/deeplinkList"
     android:autoVerify="true"
     app:uri="https://example.com/list" />

以及这样的详细信息:

<fragment>
    <argument
        android:name="id"
        app:argType="string" />
    <argument
        android:name="type"
        app:argType="string" />
    <deepLink
        android:id="@+id/deeplinkDetails"
        android:autoVerify="true"
        app:uri="https://example.com/list?id={id}&amp;type={type}" />
</fragment>

如果我删除 deeplinkListdeeplinkDetails 将正常工作。我该如何解决这个问题?

你的 Fragment 是什么 Activity class?

将此行添加到清单文件中的 class 定义。

 <nav-graph android:value="@navigation/navigation" />

查看以下代码以获得更多帮助:

<activity

    android:name=".ui.main.MainActivity"
    android:alwaysRetainTaskState="true"
    android:configChanges="orientation|screenSize|keyboardHidden"
    android:screenOrientation="portrait"
    android:windowSoftInputMode="adjustPan">
    
    <nav-graph android:value="@navigation/navigation"/>
    
</activity>

嗯,因为我得不到满意的答案,所以我找到了一个 hack

我将导航文件中的深层链接更改为没有查询参数。 像这样:

https://example.com/list/{SOMEID}/{SOMETYPE}

而不是这个:

https://example.com/list?id=SOMEID&amp;type=SOMETYPE

并且我在调用

之前按照我想要的方式操作深层链接
navController.handleDeepLink(intent)

像这样

val uri = intent.data
intent.data = Uri.parse(
                    "https://example.com/list/${uri?.getQueryParameter("id")}/${uri?.getQueryParameter("id")}")
navController.handleDeepLink(intent)