通过 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。到目前为止,我自己还没有经历过,所以我无法进一步调查。
我正在开发一个 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。到目前为止,我自己还没有经历过,所以我无法进一步调查。