Pregunta

Quiero que mi aplicación intercepte todas las etiquetas descubiertas por el teléfono.De esa manera, quiero verificar la UID de la etiqueta y pasar la intención después (mostrar un selector de aplicaciones, etc.).

<action android:name="android.nfc.action.NDEF_DISCOVERED"/>
<action android:name="android.nfc.action.TAG_DISCOVERED"/>
<action android:name="android.nfc.action.TECH_DISCOVERED"/>

eso es lo que tengo actualmente en mi manifiesto, junto con un filtro de intención para tag_discubered:

<tech-list>
     <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.IsoDep</tech>
     <tech>android.nfc.tech.MifareClassic</tech>
     <tech>android.nfc.tech.Ultralight</tech>
     <tech>android.nfc.tech.Ndef</tech>
     <tech>android.nfc.tech.NdefFormatable</tech>
 </tech-list>

Cuando escaneo una tarjeta inteligente MIFARE, mi aplicación se llama, cuando uso etiquetas diferentes con NXP ICODE ICS, se inicia la aplicación estándar de la etiqueta Android.

¿Alguna pista de cómo puedo asegurarme de ver todas las etiquetas?

¿Fue útil?

Solución

En primer lugar, la forma en que funciona una lista de tecnología es que todos los listados de Tech se encuentran juntos, lo que significa que la intención se pasa a la aplicación si la etiqueta tiene todos los diferentes técnicos enumerados. No sé de nada que lo haga. Lo que quiere hacer es más:

<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.NfcF</tech>
</tech-list>

y así sucesivamente. Esto o los diferentes etiquetas que deseas. (NFCA o NFCB, etc.) Ahora, algunos de estos techs van juntos, como NFCA y Ultralight o NDEF. Así que si desea tomar una tarjeta que sea NFCA y NDEF, usaría

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

Ahora, la aplicación que más se coincide estrechamente con la tecnología en la etiqueta se iniciaría, o se mostrará en un menú de selección. Pero NDEF_DISCOVERED tiene prioridad sobre TechSovered. Ahora, el lanzador de intenciones NDEF_DISCOCURADO puede ser muy específico en lo que se transmiten las etiquetas. Si bien algunos formatos de NDEF (al igual que el tipo MIME) permiten "capturar todos los" filtros (ejemplo "," / "para MIME), algunos no. (Como para un registro NDEF formateado por URI). Para aquellos, si hay una aplicación específica dirigiéndola, a menos que la sepa y la cree, no podrá garantizar que su aplicación se lanzará. También nunca he podido tener más de un filtro de intención para las etiquetas NDEF (MIME o URI, pero no ambas). Pero eso podría ser que no he intentado lo suficiente.

y si otra aplicación intenta hacer lo mismo (captura tantas etiquetas como sea posible), siempre se le llamará. Por lo tanto, no hay una forma posible de capturar cada etiqueta, a menos que tenga la única aplicación en el teléfono. Pero el formato de su código de lista de tecnología como lo que vea arriba te acercará mucho.

Otros consejos

Puede hacer estoicamente esto con el despacho de primer plano:

http://developer.android.com/Guía / Temas / NFC / Advanced-NFC.HTML # FIRANTE-DESPACK

Debe manejar todos los tipos MIME NDEF_DISCOBED ( / ), luego todas las tecnologías Tech_Discubered Tag, así como la intención de TAG_Discubered.Su aplicación debe estar en primer plano.No puede garantizar la garantía de que se inicie su aplicación, de lo contrario, porque cualquier otra aplicación siempre puede manejar la misma intención que su aplicación y, por lo tanto, aparecerá el selector de actividad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top