Intereting Posts
Как загрузить другой файл xml в изменении ориентации в android Android MVP объяснение Как использовать facebook login для доступа к данным с сервера backend в приложении Android? Как начать различную работу с помощью футляра переключателя в пункте меню? Как приостановить android.speech.tts.TextToSpeech? Как передать (Android) контекст приложения на Java-класс? Воспроизведение звука при нажатии кнопки мыши Изменить фоновый альфа-код кнопки без изменения значения альфа-текста в Android? Окно в стиле AppCompat, содержащее фрагмент Фрагмент без прокрутки в ViewPager внутри CoordinatorLayout Фильтрация ListView по параметру 'selection' в CursorLoader Есть ли способ поймать ошибки веб-консоли? Шаблон значков уведомлений для Android? SSLHandshakeException: привязка привязки для пути сертификации не найдена. Только на Android API <19 Android Video не соответствует ширине в портрете видеообзора и не занимает весь экран в ландшафте

Приложения 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. Только если тег соответствует одному из технических списков в ваших ресурсах, ваше приложение будет обнаружено.