与 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}&type={type}" />
</fragment>
如果我删除 deeplinkList
,deeplinkDetails
将正常工作。我该如何解决这个问题?
你的 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&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)
我已经为我的应用程序实现了深层链接。我正在通过
处理我的深层链接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}&type={type}" />
</fragment>
如果我删除 deeplinkList
,deeplinkDetails
将正常工作。我该如何解决这个问题?
你的 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&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)