提问者:小点点

深度链接意图不起作用


我遵循了https://developer.android.com/training/app-indexing/deep-linking.html上的insttructions,但当我想通过adb触发意图时:

adb shell am start
           -W -a android.intent.action.BROWSEABLE
           -d "http://example.com/gizmos" com.myapp.android

我只是得到

错误:activity未启动,无法解析意图{act=android.Intent.action.view dat=example:/gizmos flg=0x10000000 pkg=com.myapp.android}

<activity
        android:name=".activities.DeepLinkActivity"
        android:label="@string/title_activity_deep_link">
        <meta-data
            android:name="android.app.searchable"
            android:resource="@xml/searchable" />

        <intent-filter>
            <action android:name="android.intent.action.VIEW" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:scheme="http"
                android:host="example.com"
                android:pathPrefix="/gizmos" />
        </intent-filter>
    </activity>

我犯了什么明显的错误吗?


共1个答案

匿名用户

编辑:

Ok首先确保您的软件包可由ADB访问:

adb shell am start -n com.example.simon.test/.activities.MainActivity

然后,为了接受多个数据标记,您需要不同的意图过滤器(这是我的工作方式,不同于我在网上看到的所有其他示例)。例如:

<intent-filter>
    ...
    <data android:scheme="http"
          android:host="example.com"/>
</intent-filter>
<intent-filter>
    ...
    <data android:scheme="http"
          android:host="example.com"
          android:pathPrefix="/gizmos"/>
</intent-filter>

注意,在上面的示例中,pathPrefix以正斜杠开头!

我不知道为什么谷歌的文档会如此误导人,或者可能是针对不同版本的adb,但上面的更改对我来说是完美的。这有所帮助:来源

这就是我如何让Chrome浏览器将特定链接路由到我的应用程序:

<activity
    android:name=".activities.DeepLinkActivity"
    android:label="@string/app_name">
    <!-- Accept chrome links -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="http"
              android:host="example.com"
            android:pathPrefix="/"/>
    </intent-filter>
    <!-- Accept adb data flag -->
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="http"
              android:host="example.com"/>
    </intent-filter>
</activity>

注意,第一个过滤器在Google Chrome上工作,而第二个过滤器在ADB上工作。

注意2如果链接被输入到浏览器的地址栏中,应用程序选择菜单将不会显示。必须是某个页面的链接。

在我看来,这里的一切都相当模糊,真的不是我所期望的那样。但在我的设备上就是这样工作的。希望这对你也有帮助。