通过NFC标签深入链接到应用程序(特定活动)

时间:2016-12-28 10:55:40

标签: android nfc intentfilter deep-linking ndef

我开发的Android应用需要与NFC标签的深层链接。

在这里,您可以看到我对活动的意图过滤器:

<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中启动此命令时,应用程序将以正确的活动(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进行编码时,扫描该标签只会启动手机的网络浏览器。使用NFC标签开始活动我错过了什么?

在代码上编码的网址:&#34; http://www.testdeeplink.com/schedule?stop_id=1&#34;

1 个答案:

答案 0 :(得分:2)

您缺少在清单中放置NFC意图过滤器。 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标签中劫持网址。到目前为止我自己都没有这样做过,所以我无法进一步研究这个问题。