Leer varias etiquetas NFC simultáneamente en Android
El nuevo SDK 2.3.3 incluye soporte NFC mejorado, y me gustaría escribir una aplicación que dependa de esto. En última instancia, me gustaría ser capaz de leer los datos de varias etiquetas que entran en el campo al mismo tiempo, pero Android sólo parece activar en el primero que entra en el campo – los siguientes son ignorados.
De la lectura de la especificación NFC (ISO / IEC 14443-3) para las etiquetas que estoy usando (Mifare Classic), debería ser capaz de enviar un comando 'stop' a la etiqueta, lo que hará que deje de responder y permitir Para leer la siguiente etiqueta en el campo. Android no admite el comando de detención directamente en cualquiera de las subclases de TagTechnology
, así que intenté enviarlo directamente usando transceive(new byte[] {0x50, 0x00})
. Esto lanza una IOException
, con el mensaje 'transceive failed'.
- ¿Cómo puedo comprobar la versión de Open Mobile API en Android?
- Android NFC que pasa un solo parámetro al iniciar la aplicación
- Escribir datos en la etiqueta NFC en el tutorial de Android
- Velocidad de lectura de etiqueta NFC
- Activar / desactivar NFC con comando ADB
Es cierto que estoy haciendo todo esto desde el hilo principal, que entiendo es una mala idea, pero sólo quiero probar el concepto tan fácilmente como sea posible.
¿Es posible comunicarse con múltiples etiquetas en el campo al mismo tiempo? ¿Qué estoy haciendo mal?
- Cómo habilitar la configuración NFC
- "Nueva etiqueta recopilada" en lugar de leer etiquetas de aplicación - NFC android
- Escribir en NTAG216 después de la autenticación?
- ¿Cómo puedo asegurarme de que Android Beam no inicie una nueva instancia de mi actividad "singleTop"?
- NFC pilas en el sistema operativo Android
- Ocultar error "Tipo de etiqueta NFC no admitido" en los dispositivos Samsung Galaxy
- Modo NFC Peer2Peer - Android Beam - ISO 18092
- ¿Qué tan madura es la compatibilidad con Android NFC ISODep?
Lo que quieres no es posible, por desgracia, en este momento, a menos que hagas algo bastante avanzado hackery, que casi nunca es una buena idea 🙂
Probablemente usted podría detener la tarjeta si envía los bytes correctos en el transceive()
, como usted está tratando de hacer ahora. Pero desde la parada (o mejor dicho, el HLTA que está intentando enviar) es un comando ISO14443-3A, esto no funcionará a través de la interfaz MifareClassic, que utiliza un canal "encriptado". Transmitir directamente a través de la interfaz NfcA desgraciadamente no funciona con la pila actual.
Incluso si pudiera detener la tarjeta, esto no causará automáticamente que el chip NFC del teléfono reanude el sondeo de nuevas etiquetas, ya que está "dando vueltas" a la pila.
Dependiendo de mi corta experiencia, no puedes trabajar con varias etiquetas. Si dos etiquetas están en el campo no recibe un ID de la etiqueta, es cero binario. Así que mi conjetura es que, en este momento, sólo se puede acceder a una etiqueta y no más de uno puede estar en el campo.
¿Ha tenido éxito el envío de otros comandos utilizando transceptor como el bloque de lectura (0x30, 0x (bloque)) o autenticar los comandos del sector? Sólo pensando que es posible que desee estar seguro de que está utilizando transceive correctamente en el primer lugar.
- Ejemplo de MultiSelectListPreference
- Los bordes redondos de Android en la barra de progreso en forma de anillo