我开发的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;
答案 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标签中劫持网址。到目前为止我自己都没有这样做过,所以我无法进一步研究这个问题。