Android Beam: inicia la aplicación con registro de tipo MIME

Estoy trabajando en un proyecto, en el que estoy usando un smartphone Android y un chip USB PN532 (elechouse) que tiene el modo peer to peer como una de sus características. Traté de enviar mensajes NDEF desde módulo PN532 a teléfono inteligente y por el contrario y funciona bien.

Lo que quiero es que cuando el módulo PN532 encuentre el smartphone, mi aplicación se lance automáticamente.

Sé que una solución está utilizando un registro de tipo MIME.

Tengo esto en mi manifiesto:

<data android:mimeType="application/vnd.test.com.openapp"/> 

En el lado del módulo puedo transmitir MIME pero no sé en qué forma este MIME debe ser. Traté de transmitir cadenas, pero no pasa nada.

Entonces, ¿cómo puedo hacer un registro de tipo MIME en mi módulo? ¿Hay otra manera de lanzar mi aplicación a través de la comunicación entre pares?

En primer lugar, tiene que implementar la pila de protocolo peer-to-peer:

 +--------------------------------------+ | NDEF (NFC Data Exchange Format) | +--------------------------------------+ | SNEP (Simple NDEF Exchange Protocol) | +--------------------------------------+ | LLCP (Logical Link Control Protocol) | +--------------------------------------+ | NFCIP-1 | +--------------------------------------+ 

Usted ya parece tener esto en marcha, ya que indica que " trató de enviar mensajes NDEF desde el módulo PN532 a teléfono inteligente y por el contrario y funciona bien " .

Por lo tanto, a continuación necesitaría crear un mensaje NDEF con un registro de tipo MIME (o incluso mejor un registro de tipo externo de foro NFC) como su primer registro. Para poder usar la función AAR (Android Application Record) de Android para vincular el mensaje NDEF únicamente a tu aplicación (la aplicación se inicia o, si no se instala, se abre la página Play Store de tu aplicación), también puedes agregar un AAR al final De su mensaje NDEF.

Un mensaje NDEF consistente en sólo un registro de tipo MIME:

 +------+------+------+------+------+--------------------------+ | MB=1 | ME=1 | CF=0 | SR=1 | IL=0 | TNF=2 (MIME type record) | +------+------+------+------+------+--------------------------+ | TYPE LENGTH=32 (0x20) | +-------------------------------------------------------------+ | PAYLOAD LENGTH=5 (0x05) | +-------------------------------------------------------------+ | TYPE="application/vnd.test.com.openapp" | +-------------------------------------------------------------+ | PAYLOAD="Hello" | +-------------------------------------------------------------+ 

Como una matriz de bytes se vería como

 { /* Header byte */ 0xD2, /* TYPE LENGTH */ 0x20, /* PAYLOAD LENGTH */ 0x05, /* TYPE */ 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x76, 0x6E, 0x64, 0x2E, 0x74, 0x65, 0x73, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2E, 0x6F, 0x70, 0x65, 0x6E, 0x61, 0x70, 0x70, /* PAYLOAD */ 0x48, 0x65, 0x6C, 0x6C, 0x6F } 

A continuación, puede registrar su aplicación para que se inicie con un filtro de intenciones como éste en su manifiesto:

 <intent-filter> <action android:name="android.nfc.action.NDEF_DISCOVERED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="application/vnd.test.com.openapp" /> </intent-filter> 

Para la variante AAR, agregaría un AAR para su aplicación a ese mensaje. Por ejemplo, si su aplicación tiene el nombre del paquete "com.your.app.package":

 +------+------+------+------+------+--------------------------+ | MB=1 | ME=0 | CF=0 | SR=1 | IL=0 | TNF=2 (MIME type record) | +------+------+------+------+------+--------------------------+ | TYPE LENGTH=32 (0x20) | +-------------------------------------------------------------+ | PAYLOAD LENGTH=5 (0x05) | +-------------------------------------------------------------+ | TYPE="application/vnd.test.com.openapp" | +-------------------------------------------------------------+ | PAYLOAD="Hello" | +-------------------------------------------------------------+ +------+------+------+------+------+--------------------------+ | MB=0 | ME=1 | CF=0 | SR=1 | IL=0 | TNF=4 (External type) | +------+------+------+------+------+--------------------------+ | TYPE LENGTH=15 (0x0F) | +-------------------------------------------------------------+ | PAYLOAD LENGTH=20 (0x14) | +-------------------------------------------------------------+ | TYPE="android.com:pkg" | +-------------------------------------------------------------+ | PAYLOAD="com.your.app.package" | +-------------------------------------------------------------+ 

Como una matriz de bytes se vería como

 { /* MIME type record */ /* Header byte */ 0x92, /* TYPE LENGTH */ 0x20, /* PAYLOAD LENGTH */ 0x05, /* TYPE */ 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x76, 0x6E, 0x64, 0x2E, 0x74, 0x65, 0x73, 0x74, 0x2E, 0x63, 0x6F, 0x6D, 0x2E, 0x6F, 0x70, 0x65, 0x6E, 0x61, 0x70, 0x70, /* PAYLOAD */ 0x48, 0x65, 0x6C, 0x6C, 0x6F, /* Android Application Record */ /* Header byte */ 0x54, /* TYPE LENGTH */ 0x0F, /* PAYLOAD LENGTH */ 0x14, /* TYPE */ 0x61, 0x6E, 0x64, 0x72, 0x6F, 0x69, 0x64, 0x2E, 0x63, 0x6F, 0x6D, 0x3A, 0x70, 0x6B, 0x67 /* PAYLOAD */ 0x63, 0x6F, 0x6D, 0x2E, 0x79, 0x6F, 0x75, 0x72, 0x2E, 0x61, 0x70, 0x70, 0x2E, 0x70, 0x61, 0x63, 0x6B, 0x61, 0x67, 0x65 } 
  • ¿Cómo podría comprobar si un dispositivo Android es compatible con SNEP o Android Ndef Push Protocol?
  • ¿Cómo instalar Open NFC Simulator para Android?
  • NFC: ¿Cuál es la diferencia entre S-beam y Android beam?
  • ¿Cómo puedo enviar una cadena a través de NFC mientras Screen-Pinning?
  • Escribir etiquetas NFC para que funcione con Android y Windows Phone8
  • La detección de etiquetas NFC no llama aNewIntent y está iniciando desde la actividad principal
  • Cómo recibir un archivo usando NFC (Android Beam) en Android
  • Comunicación P2P NFC entre Galaxy S3 y ACR122
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.