Android nfc intent-filter para mostrar mi aplicación cuando nfc descubre una etiqueta
Estoy escribiendo una aplicación que funciona con NFC y MIFARE CARD.
Cuando mi dispositivo NFC detectar una tarjeta, me muestra la lista de aplicaciones que pueden utilizar NFC, pero mi aplicación no se menciona.
- Escribir en NTAG216 después de la autenticación?
- Comenzar con el nexus s NFC / RFID
- Modificar los bits de acceso del remolque sector Mifare Classic
- Leer bloque clásico NFC
- Lector de tarjetas NFC ACR 122 incompatible con Android 4.1 Jelly Beans?
¿Qué me falta en mi archivo de manifiesto android?
<uses-permission android:name="android.permission.NFC" /> <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" /> <uses-feature android:name="android.hardware.nfc" android:required="true" /> <application android:icon="@drawable/ic_launcher" android:allowBackup="true" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:uiOptions="splitActionBarWhenNarrow" android:name="it.namespace.app.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/tech_filter" /> </activity> </application>
Y este es mi archivo tech_filter xml:
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" > <tech-list> <tech> android.nfc.tech.MifareClassic </tech> </tech-list> </resources>
Aquí la imagen que muestra que mi aplicación no está en la lista:
- No se pueden enviar datos desde o hacia un Galaxy Nexus a través de LLCP
- Escribir datos en la etiqueta NFC en el tutorial de Android
- ¿Cómo leer las etiquetas de Nfc en android?
- Cómo escribir etiquetas RFID para Nexus S NFC para leer?
- ¿Es posible iniciar una aplicación cuando se escanea una etiqueta NFC?
- Android: Autenticación con NXP MiFare Ultralight C
- Activar / desactivar NFC con comando ADB
- Elemento seguro de control de acceso en ICS 4.0.4
Tuve el mismo problema, y lo fijo en base a esta frase en android doc http://developer.android.com/guide/topics/connectivity/nfc/nfc.html#tech-disc
"Si su actividad filtra para la intención ACTION_TECH_DISCOVERED, debe crear un archivo de recursos XML que especifique las tecnologías que su actividad soporta dentro de un conjunto de lista de tecnología.Su actividad se considera una coincidencia si un conjunto de lista técnica es un subconjunto de las tecnologías Que son compatibles con la etiqueta, que puede obtener llamando a getTechList ().
Por ejemplo, si la etiqueta que se escanea admite MifareClassic, NdefFormatable y NfcA, su conjunto de lista técnica debe especificar las tres, dos o una de las tecnologías (y nada más) para que su actividad pueda coincidir.
Su nfc_tech_list necesita definir un subconjunto de las tecnogías soportadas por la etiqueta actual.
– defina su manifiesto así:
<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_list" /> </activity>
– defina el xml nfc_check_list como esto:
<?xml version="1.0" encoding="utf-8"?> <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NdefFormatable</tech> <tech>android.nfc.tech.MifareUltralight</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcA</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> <tech>android.nfc.tech.Ndef</tech> </tech-list> </resources>
Esto funcionará perfectamente.
¿Ha creado un recurso de lista técnica?
De: http://developer.android.com/guide/topics/connectivity/nfc/nfc.html#tech-disc
<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>
Si filtra en android.nfc.action.NDEF_DISCOVERED en lugar de android.nfc.action.TECH_DISCOVERED, no necesita una lista técnica.
Lo que actualmente tiene debe estar pasando por el android.nfc.action.TAG_DISCOVERED (vea el diagrama de flujo en la página referenciada).
Es muy probable que la lista de aplicaciones esté siendo generada porque todas esas aplicaciones manejan NDEF_DISCOVERED. La intención general del despachador NFC es crear un intento y entregarlo a la primera aplicación que coincida. El selector de aplicaciones sólo se muestra cuando varias aplicaciones coinciden con el filtro. Pasando por el diagrama de flujo que parece parejo se detiene cuando una acción de concordancia podría ser enviado.
<intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <action android:name="android.nfc.action.TECH_DISCOVERED" /> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>