with tarjeta tag studio read how emular data card application android tags nfc ndef

android - tarjeta - Escribir una imagen usando NdefMessage



nfc android application (2)

Finalmente, después de buscar una aplicación, escribir y leer la tarjeta Business en la etiqueta NFC y no encontrar nada. Decidí crear mi propio tipo de tarjeta de presentación y leerla yo mismo. aquí está el código que utilicé para escribir la tarjeta usando el mensaje Ndef:

Bitmap mBitmap = mPhoto; ByteArrayOutputStream stream = new ByteArrayOutputStream(); mBitmap.compress(Bitmap.CompressFormat.JPEG, 80, stream); byte[] byteArray = stream.toByteArray(); NdefRecord picRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "image/jpeg".getBytes(), null, byteArray); String informations = "name: "+name + "/ntitle: " + title + "/naddress: "+ address + "/ncity: "+ city + "/nphone: "+ phone + "/nmail: "+mail + "/n"; NdefRecord textRecord = createTextRecord(informations); NdefMessage message = new NdefMessage(new NdefRecord[]{picRecord, textRecord});

y aquí está el código para la parte de lectura:

NdefRecord picRecord = records[0]; NdefRecord infoRecord = records[1]; byte[] picload = picRecord.getPayload(); byte[] infoload = infoRecord.getPayload(); Bitmap photo = BitmapFactory.decodeByteArray(picload, 0, picload.length); String textEncoding = ((infoload[0] & 0200) == 0) ? "UTF-8" : "UTF-16"; int languageCodeLength = infoload[0] & 0077; String text = null; try{ String languageCode = new String(infoload, 1, languageCodeLength, "US-ASCII"); text = new String(infoload, languageCodeLength + 1,infoload.length - languageCodeLength - 1, textEncoding); }catch(Exception e){ Alert("String decoding", e.toString()); return; }

El cifrado Jpeg ayuda mucho a comprimir la imagen sin perder demasiada calidad. La transferencia en la etiqueta toma 2-3 segundos pero la solución funciona bien.

Intento escribir una imagen en una etiqueta Ndef, actualmente, puedo escribirla, pero cuando intento leerla con cualquier aplicación de mercado, la tratan como un mensaje de texto. aquí está mi pedazo de código escribiendo la imagen:

Bitmap mBitmap = Bitmap.createScaledBitmap(mPhoto, 100, 100, true); ByteArrayOutputStream stream = new ByteArrayOutputStream(); mBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); NdefRecord picRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, "image/png".getBytes(), null, byteArray); String informations = "name: "+name + "/ntitle: " + title + "/naddress: "+ address + "/ncity: "+ city + "/nphone: "+ phone + "/nmail: "+mail; NdefRecord textRecord = createTextRecord(informations); NdefMessage message = new NdefMessage(new NdefRecord[]{picRecord, textRecord});

También intenté escribir la imagen de esta manera:

NdefMessage msg = new NdefMessage(new NdefRecord[] {createMimeRecord("image/png", byteArray), textRecord});

con el método createMimeRecord:

public NdefRecord createMimeRecord(String mimeType, byte[]payload) { byte[] mimeBytes = mimeType.getBytes(Charset.forName("USASCII")); NdefRecord mimeRecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload); return mimeRecord; }

Este es el resultado que obtengo al intentar leer mi imagen con aplicaciones como "TagInfo":

El mensaje de texto está bien escrito y puede leerse normalmente. Intenté usar el "createMime (String mime type, byte [] data) pero este método parece" indefinido ". Intenté comprimir la imagen de mapa de bits en formato JPEG con el mismo resultado. También he intentado encuentre ejemplos de enviar imágenes a través de NdefMessages, pero no encontró ninguno. ¿Alguna sugerencia?


Si su caso de uso almacena la tarjeta de visita en la etiqueta NFC, le sugiero que no almacene los datos de la imagen, sino un enlace a la imagen. De lo contrario, le resultará difícil almacenar la tarjeta de visita en una etiqueta normal (el tamaño habitual de las etiquetas es 1K o 4K) y también el tiempo para transferir los datos será demasiado largo. De acuerdo con la especificación vCard, puede hacer ambas cosas: almacenar datos de imágenes binarias en formato base64 y también enlace de URL (que recomiendo encarecidamente).

Para obtener más información sobre el formato de la vCard, consulte aquí:

http://en.wikipedia.org/wiki/VCard

o en más detalles aquí:

http://tools.ietf.org/html/rfc2426#section-3.1.4