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.
- No se pueden enviar datos desde o hacia un Galaxy Nexus a través de LLCP
- Modo NFC Peer2Peer - Android Beam - ISO 18092
- El diálogo de progreso no se muestra en la pantalla
- Hacer NFC / Beam más automático
- Cómo permitir sólo la interacción NFC con dispositivos que tienen la misma aplicación / actividad en ejecución
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?
- Enviar URL desde Android a Windows Phone a través de NFC da enlace a Play Store
- ¿Cómo puede mi aplicación averiguar qué modo NFC está habilitado?
- Android NFC: protocolo SNEP y respuesta P2P
- Lector de tarjetas NFC ACR 122 incompatible con Android 4.1 Jelly Beans?
- ¿Cómo encuesta de Android para dispositivos NFC
- ACS ACR122 SDK Android Peer-to-Peer apoyo?
- Android responde a PN532 InListPassiveTarget
- ACR122U - Leer los datos NFC enviados desde el teléfono Android
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 }
- Cargar la barra de progreso en android?
- Cómo quitar comentarios en archivos XML sin procesar con Gradle cuando el archivo se empaqueta