Cómo obtener el ID de hardware de NFC en Android
Quiero hacer algo bastante sencillo, pero no puedo resolver si el método en el Gingerbread API es para el ID del token que se está escaneando o el hardware a bordo del Nexus S. Lo que quiero ser capaz de hacer es obtener el identificador único del chip NFC del dispositivo, por lo que puedo registrarlo (por ejemplo, cuando el dispositivo se renuncia a un lector RFID, puedo asociar el dispositivo que se renuncia a una cuenta). ¿Es esto posible con los métodos API actuales disponibles?
El pedazo de código que parece más prometedor (pero no puedo probar porque no tengo un dispositivo) es
- ¿Qué etiquetas NFC hace la compatibilidad con Nexus 7? (2012)
- Cómo evitar la clonación de etiquetas NFC?
- Posibilidad de lanzamiento de falsos NFC (Near Field Communication)
- Desarrollo de Android NFC con Fragment
- Lectura de un mensaje NDEF desde una etiqueta NFC desde una aplicación de Android
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
- ¿Cómo puedo comprobar la versión de Open Mobile API en Android?
- Escribir etiquetas NFC para que funcione con Android y Windows Phone8
- ¿Cómo comprobar si NFC está habilitado o no en android?
- ¿Cómo puedo habilitar el lector NFC vía API?
- ¿Puedo leer una tarjeta HID iClass con un dispositivo Android?
- HF-RFID vs. NFC - ¿Puede un teléfono móvil con capacidad NFC leer etiquetas RFID de alta frecuencia?
- Android NFC en Embarcadero XE5
- Etiqueta NFC y formato de datos NFC: Android
tagId se establece en una matriz de bytes. Necesita analizar esa matriz en una cadena hexadecimal. Hay muchas formas de hacerlo, pero este código lo hará sin recurrir a bibliotecas externas y es fácil ver lo que está pasando:
String ByteArrayToHexString(byte [] inarray) { int i, j, in; String [] hex = {"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"}; String out= ""; for(j = 0 ; j < inarray.length ; ++j) { in = (int) inarray[j] & 0xff; i = (in >> 4) & 0x0f; out += hex[i]; i = in & 0x0f; out += hex[i]; } return out; }
En la versión 2.3.3 usted tiene Tag de la clase y si usted consigue ese objeto con la intención usted puede utilizar el método getId (),
Tag myTag = (Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
y si necesitas id de etiqueta de byte [] como "String" tienes que analizarlo de byte a hexadecimal;).
La intención NfcAdapter.ACTION_TAG_DISCOVERED
será despachada automáticamente por el controlador NFC cuando se descubre una etiqueta.
-
Para manejar tal intención, debe agregar un filtro de intenciones para esta acción
android.nfc.action.TAG_DISCOVERED
:< action android:name="android.nfc.action.TAG_DISCOVERED"/> < category android:name="android.intent.category.DEFAULT"/>
-
Agregue el permiso apropiado:
< uses-permission android:name="android.permission.NFC" />
-
Restringir la aplicación sólo a los dispositivos compatibles:
< uses-sdk android:minSdkVersion="9" /> < uses-feature android:name="android.hardware.nfc" />
-
Cuando maneja la intención, puede llamar al código que sugirió:
byte[] tagId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID); NdefMessage[] msgs = (NdefMessage[]) intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
Para más información visite:
-
OpenIntents
-
Libro en línea de O'Reilly – Capítulo 18