¿Es posible iniciar una aplicación cuando se escanea una etiqueta NFC?
Tengo una etiqueta NFC. Quiero escribir una aplicación de Android que se inicie automáticamente y obtenga datos de NFC cuando se escanea la etiqueta NFC con el teléfono.
Esto debería funcionar asumiendo que el dispositivo tiene NFC activado y que no hay otras aplicaciones en ejecución en el teléfono. He encontrado algunas aplicaciones que pueden iniciar otra aplicación, pero mi aplicación debe funcionar sin una aplicación adicional que se ejecuta en segundo plano.
- Android NFC que pasa un solo parámetro al iniciar la aplicación
- Error de suma de comprobación al aprovisionar Android Lollipop
- No se pueden enviar datos desde o hacia un Galaxy Nexus a través de LLCP
- Los intentos de NFC de Android no están iniciando mi actividad
- Introducción al emulador Open NFC
¿Hay alguna manera de resolver esta tarea?
- Tutorial NFC para Android que no sea API demo
- Determinación de los requisitos de alimentación para una tarjeta inteligente sin contacto en Java.
- Las etiquetas NFC pueden ser leídas por lector RFID?
- Actualizaciones de OTA para la aplicación Android del propietario del dispositivo (modo quiosco)
- Comando APDU para leer los datos de la tarjeta de crédito de Visa Paywave tarjeta NFC habilitado con Samsung Galaxy S4
- ¿Qué etiquetas NFC hace la compatibilidad con Nexus 7? (2012)
- Utilizar JRuby para llamar directamente a Android Java Methods
- Tarjeta Emulate Mifare con Android 4.4
Para que su aplicación ( actividad en realidad) se inicie al escanear una etiqueta, debe agregar un filtro de intenciones adecuado al manifiesto de la aplicación.
Si desea iniciar su aplicación para cualquier etiqueta, el filtro de intenciones TECH_DISCOVERED
es lo que desea utilizar:
<activity ...> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> </activity>
Este filtro de intenciones requiere un archivo de recursos XML adicional que defina las tecnologías de etiquetas que su aplicación debe escuchar (observe la etiqueta <meta-data ... />
fuera del filtro de intenciones). Las tecnologías disponibles son las del espacio de nombres android.nfc.tech.*
, Actualmente:
-
android.nfc.tech.IsoDep
-
android.nfc.tech.MifareClassic
-
android.nfc.tech.MifareUltralight
-
android.nfc.tech.Ndef
-
android.nfc.tech.NdefFormatable
-
android.nfc.tech.NfcA
-
android.nfc.tech.NfcB
-
android.nfc.tech.NfcBarcode
-
android.nfc.tech.NfcF
-
android.nfc.tech.NfcV
Para descubrir cualquier etiqueta, crearía un archivo XML como este (cree el archivo como xml/nfc_tech_filter.xml
):
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <tech-list> <tech>android.nfc.tech.NfcA</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcB</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcBarcode</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcF</tech> </tech-list> <tech-list> <tech>android.nfc.tech.NfcV</tech> </tech-list> </resources>
Tenga en cuenta que usted no necesita necesariamente incluir las otras tecnologías como
-
IsoDep
implicaNfcA
oNfcB
, -
MifareClassic
implicaNfcA
, -
MifareUltralight
implicaNfcA
, y -
Ndef
/NdefFormatable
implicaNfcA
,NfcB
,NfcF
oNfcV
.
El filtro de intenciones anterior se activará si no hay otra aplicación que tenga un filtro de intenciones de coincidencia mejor. Una mejor coincidencia sería una coincidencia para el tipo de datos utilizado en la etiqueta. Por ejemplo, si su etiqueta contiene una URL (encapsulada en un mensaje NDEF), una aplicación que se activa en las URL obtendrá precedencia sobre su aplicación. Si conoce los tipos de datos utilizados en las etiquetas, también puede agregar un filtro para esos tipos de datos. Por ejemplo, para hacer coincidir cualquier URL "http: //" y "https: //", puede utilizar:
<activity ...> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> </activity>
De forma similar, si su etiqueta contiene el tipo MIME "application / vnd.com.example", podría utilizar:
<activity ...> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.com.example" /> </intent-filter> </activity>
Incluso podría combinar filtros de intenciones múltiples para una actividad:
<activity ...> <intent-filter> <action android:name="android.nfc.action.TECH_DISCOVERED" /> </intent-filter> <meta-data android:name="android.nfc.action.TECH_DISCOVERED" android:resource="@xml/nfc_tech_filter" /> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="http" /> <data android:scheme="https" /> </intent-filter> <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.com.example" /> </intent-filter> </activity>
Finalmente, hay un filtro de intenciones más relacionado con NFC:
<intent-filter> <action android:name="android.nfc.action.TAG_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter>
Sin embargo, normalmente no utilizaría este filtro de intenciones en el manifiesto. Se entiende como un fall-back solamente y se disparará siempre si no hay ninguna otra aplicación que dispara en la tecnología o los datos de la etiqueta escaneada. Por lo tanto, no hay necesidad de agregar este filtro de intenciones de usted ya disparador para el filtro de intención TECH_DISCOVERED
antes mencionado.
Agregue el siguiente intent-filter
a su etiqueta de activity
principal en el archivo AndroidManifest.xml
.
<!-- main activity --> <activity ...> ... <intent-filter> <action android-name="android.nfc.action.TAG_DISCOVERED" /> <category android-name="android.nfc.category.DEFAULT" /> </intent-filter> ... </activity>
Ahora, cuando toque su etiqueta NFC en su teléfono, su aplicación será llamada y ejecutada.
- Error de sintaxis en tokens, variableDeclarator esperado en su lugar
- Android cámara de pantalla completa – manteniendo la cámara seleccionada ratio