通过 NFC 标签深入 link 应用程序(特定 activity)

Deep link into app (specific activity) by NFC tag

我正在开发一个 Android 应用程序,它需要带有 NFC 标签的深度 link。

在这里您可以看到我针对 activity:

的意图过滤器
<activity
    android:name=".ui.schedule.ScheduleActivity"
    android:parentActivityName=".ui.home.HomeActivity">

    <intent-filter android:label="testDeepLink">
        <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="www.testdeeplink.com"
            android:pathPrefix="/schedule"/>

    </intent-filter>

</activity>

现在,当我在 adb 中启动此命令时,应用程序以正确的 activity (ScheduleActivity):

启动
adb shell am start -W -a android.intent.action.VIEW -d "http://www.testdeeplink.com/schedule?stop_id=1" com.exmemple.android

但是当我在 NFC 标签上编码 URL 时,扫描该标签只会启动我的 phone 的网络浏览器。使用 NFC 标签启动 activity 我缺少什么?

URL 在标签上编码:“http://www.testdeeplink.com/schedule?stop_id=1

您没有在清单中放置 NFC intent 过滤器。 NFC 标签上的 URL 不会触发意图操作 VIEW。相反,它们将被发送到具有意图操作 NDEF_DISCOVERED 的活动。因此,您可以通过在清单中为操作 NDEF_DISCOVERED 添加一个额外的意图过滤器来接收这样的 NFC 意图:

<activity
    android:name=".ui.schedule.ScheduleActivity"
    android:parentActivityName=".ui.home.HomeActivity">

    <intent-filter android:label="testDeepLink">
        <action android:name="android.intent.action.VIEW" />
        ...
    </intent-filter>
    <intent-filter android:label="testDeepLinkNFC">
        <action android:name="android.nfc.action.NDEF_DISCOVERED" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="http"
              android:host="www.testdeeplink.com"
              android:pathPrefix="/schedule" />
    </intent-filter>

请注意,某些设备 运行 Android 6.0+ 似乎存在一些(未经证实?)问题,尽管 NDEF 意图过滤器正确,但浏览器似乎从 NFC 标签劫持了 URL。到目前为止,我自己还没有经历过,所以我无法进一步调查。