Приложения NFC от переопределения рынка «Завершить действие, используя» диалоговые записи

Я установил NXP TagWriter и NFC TagInfo на Nexus S, это же устройство, используемое для разработки моего приложения NFC. Проблема заключается в том, что мое приложение не отображается в диалоговом окне «Полное действие с использованием» после чтения тега, только те, которые установлены с рынка. После некоторой отладки я попытался использовать демонстрационное приложение, и результат был таким же. Что мне здесь не хватает? Должны ли приложения устанавливаться с рынка, чтобы правильно настроить фильтры намерений?

Обновить

Мой фильтр-замысел был просто

<intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

Я попытался добавить других, как указано в руководстве , один за другим, а также все вместе без успеха. Может ли это иметь какое-то отношение к типу mime?

Когда считывается тег NFC, только эти две строки связаны с действием и ничего больше.

 INFO/ActivityManager(111): Starting: Intent { act=android.nfc.action.TECH_DISCOVERED flg=0x10000000 cmp=com.nxp.nfc.tagwriter/.activities.DashboardActivity (has extras) } from pid 197 INFO/ActivityManager(111): Starting: Intent { cmp=com.nxp.nfc.tagwriter/.activities.ConfirmLicenseActivity } from pid 6250 

Увидев android.nfc.action.TECH_DISCOVERED , я добавил следующий фильтр-замысел:

 <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> 

И res/xml/nfc_tech_filter.xml содержит

 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.IsoDep</tech> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.NfcF</tech> <tech>android.nfc.tech.NfcV</tech> <tech>android.nfc.tech.Ndef</tech> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.MifareClassic</tech> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> </resources> 

Причина TAG_DISCOVERED не появляется в вашем приложении, потому что это опция возврата: только если не найдено совпадений для NDEF_DISCOVERED и TECH_DISCOVERED, TAG_DISCOVERED будет отправлен.

Поскольку приложения NXP регистрируются для TECH_DISCOVERED, они будут предпочтительнее вашего приложения. Ваше решение включить фильтр TECH_DISCOVERED является правильным, но то, как вы это делаете, неверно. Технологии в блоке «tech-list» AND-ed вместе; Поэтому в вашем примере это означает, что фильтр будет соответствовать только тегам, которые имеют NfcA и NfcB и MifareClassic. Поскольку NfcA и NfcB – это очень разные технологии, которые не объединяются, этот фильтр никогда не будет соответствовать.

То, что вы действительно хотите, является OR всех разных технологий. Для этого просто напишите несколько блоков, содержащих только одну технологию:

 <tech-list> <tech>android.nfc.tech.NfcA</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> </tech-list> 

Это будет соответствовать NfcA ИЛИ NfcB. Разумеется, вы должны сделать свой фильтр максимально точным, чтобы предотвратить переполнение списка приложений. Если вас интересуют только теги NfcA, не требуйте других.

Ваш технический список должен состоять из комбинации технологий, которые, по вашему мнению, поддерживаются вашей картой. Например, если карта, которую вы хотите прочитать, имеет NfcA, NfcB и MifareClassic, тогда ваш технический список должен иметь:

 <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.MifareClassic</tech> </tech-list> 

В ваших ресурсах может быть более одного тега tech-list. Только если тег соответствует одному из технических списков в ваших ресурсах, ваше приложение будет обнаружено.

Intereting Posts
Как реализовать приложения Android-приложения с подстановочными доменами? Получить отметку времени для начала дня Как предотвратить открытие клавиатуры при открытии активности в Android? Как проверить, установлен ли Android Market на устройстве пользователя? Как AndroidManifest.xml проверяется в студии Android? Дублируемая запись: org / appcelerator / titanium / gen / bindings.json в пользовательском модуле Android Создать файл PDF из android Курсор финализирован без предварительного закрытия () Android Странная ошибка при попытке использовать библиотеку appcompat android v7 Установка google_app_id без google_play_services.json или gradle Как отключить кнопку Android Back на одной странице и перейти на кнопку выхода на каждой другой странице Класс применения SingleTon класса Kotlin Как проверить, подключены ли Bluetooth-гарнитуры на Android? Действительно ли модели Realm требуют геттеров и сеттеров? Как мы можем получить доступ к сообщениям архива в приложение android с сервера xmpp