Android Deep link 以 "Launch URL" 打开,但不输入精确的 url

Android Deep link opens with "Launch URL" but not with typing exact url

我一直在使用 Android 的隐式深度 links 并且我直接在我的导航图中定义了我的深度 link。

问题是,当我在如下配置中使用“启动选项”时,我的深度 link 会很好地打开片段,但是当我输入准确的 URL 时,它将不起作用(顺便说一句,我尝试在笔记应用程序和浏览器中直接输入 http、https,没有它)。

猜猜为什么会这样?

我的部分代码相关: navigation_graph :

    <fragment
        android:id="@+id/usedPriceFragment"
        android:name="UsedPriceFragment"
        android:label="UsedPriceFragment">
        <argument
            android:name="clearCache"
            android:defaultValue="false"
            app:argType="boolean"
            app:nullable="false" />
        <deepLink
            android:id="@+id/deepLink"
            app:action="ACTION_VIEW"
            app:mimeType="type/subtype"
            app:uri="example.com/example/prices/used" />
    </fragment>

清单:

<activity
            android:name="activity.MainActivity"
            android:launchMode="singleTask"
            android:windowSoftInputMode="adjustResize">

            <intent-filter android:autoVerify="true">
                <action android:name="android.intent.action.VIEW" />
                <data android:pathPrefix="/example/prices" />
            </intent-filter>
            <nav-graph android:value="@navigation/navigation_graph_main" />

编辑: 详细版:系统问我要不要用我的app打开URL。我单击“是”,然后启动主页而不是我想打开的片段。

通过在浏览器中键入深层链接来测试深层链接通常不是一个好主意。浏览器通常会尝试自己处理 URL,而不会将其传递给 OS.

您应该改为通过 ADB 本身发送意图,如下所示:

adb shell am start -a android.intent.action.VIEW \
    -c android.intent.category.BROWSABLE \
    -d "http://domain.name:optional_port"

更多信息可用 in the documentation 应用程序链接。

作为旁注,我假设您代码中的 example.com 是占位符文本。如果不是,当您使用 autoVerify="true" 时,它必须指向您控制的域,并且具有 set up verification for.

原来在 singleTask 模式下打开 activity 时您需要手动处理接收到的意图。所以添加这行代码解决了问题。

if (mainActivity.tabManager.findActiveNavController()?.handleDeepLink(intent) == true) {
            return
        }