Глубокая ссылка в приложение (конкретная деятельность) по тегу NFC

Я разрабатываю приложение для 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

Но когда я кодирую URL в теге NFC, сканирование этого тега просто запускает веб-браузер моего телефона. Чего мне не хватает, чтобы начать работу с тегом NFC?

URL, закодированный в теге: " http://www.testdeeplink.com/schedule?stop_id=1"

1 ответ

Решение

Вам не хватает встроить фильтр намерений NFC в манифест. URL-адреса на тегах NFC не будут вызывать намеренное действие ПРОСМОТР. Вместо этого они будут отправлены в действия с целевым действием NDEF_DISCOVERED. Следовательно, вы можете получить такое намерение NFC, добавив дополнительный фильтр намерений для действия NDEF_DISCOVERED в свой манифест:

<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+, когда браузер, похоже, захватывает URL-адреса из тегов NFC, несмотря на правильные фильтры намерений NDEF. Я сам не испытывал этого до сих пор, поэтому я не мог продолжать исследовать это, хотя.

Другие вопросы по тегам