Приложения NFC из маркета переопределяют записи диалога «Выполнить действие с помощью» - PullRequest
4 голосов
/ 01 апреля 2011

Я установил 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>

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

Когда считывается тег 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>

Ответы [ 2 ]

13 голосов
/ 11 апреля 2011

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

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

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

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

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

0 голосов
/ 06 апреля 2011

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

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

...