¿Cómo crear un zócalo de RFCOMM de Android sin ninguna entrada del usuario?


Este es el escenario:

Necesito escribir una aplicación para Android para crear un socket RFCOMM en un PC con un dongle Bluetooth (también voy a escribir el servidor).

Mi requisito es que el usuario no tenga que emparejar el dispositivo manualmente.

En realidad, con un gran truco, estoy usando el createInsecureRfcommSocket.

Un poco escenario: Tengo una aplicación Android que intercambia información con una caja Linux con un zócalo RFCOMM abierto. Me puede configurar manualmente el PIN en los dispositivos (codificación dura es una opción)

Estoy buscando caminos diferentes:

Escribir un envoltorio JNI

Como ha hecho aquí Max Kellermann, puedo escribir una capa JNI para hacer toda la fase de emparejamiento. Esta debería ser una buena opción, pero hay un problema:

El NDK 4b no proporciona bibliotecas libbluetooth, por lo que-lbluetooth falla, así como el NDK v.3.

Opciones:

  1. Encontrar el NDK 1.5 (que incluye lib bluetooth). Después de días de búsqueda en la web no he sido capaz de averiguarlo. ¿Alguien sabe dónde puedo encontrarlo?
  2. Compilar libbluetooth para Android por mí mismo y usarlos para-lbluetooth. No hay suerte allí, no soy capaz de construirlos. ¿Alguna pista?

Usar algo expuesto por las API

¿Alguien sabe cómo puedo usar createRfcommSocketToServiceRecord y hacer que el usuario no empareje manualmente el dispositivo? Es posible? Cuan debo escribir el servidor?

Algo que no sé

Tal vez (¡claro! hay algo que no sé. ¿Tal vez pueda usar otra cosa? No RFCOMM? ¿SDP?

Tal vez puedo emparejar manualmente con la API de Android?

Espero haber sido lo suficientemente claro, si no simplemente preguntar. Y de nuevo, como no es la primera vez, estoy en tus manos:)

Gracias por todo el apoyo chicos!

Author: bitek, 2010-11-17

2 answers

Al final, puedo decir que no puedes.

Incluso si encuentras una manera, usando envoltorios, escribiendo módulos C y así sucesivamente, Android evolution probablemente cambiará lo que estás usando.

Y así, no hay opción. Tristemente.

Vamos a ver cómo Android Bluetooth API va a cambiar en el futuro.

 2
Author: Enrico Carlesso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-02-20 13:22:41

La API de Android Bluetooth no está finalizada y cambiará. Utilizar bajo su propio riesgo. Esta clase implementa una API en la capa Bluetooth RFCOMM. Un zócalo RFCOMM es similar a un zócalo normal en que toma una dirección y un número de puerto. La diferencia es, por supuesto, que la dirección es una dirección de dispositivo Bluetooth, y el número de puerto es un canal RFCOMM. La API permite el establecimiento de sockets de escucha a través de los métodos bind, listen y accept, así como para la realización de conexiones salientes con connect, ConnectAsync y waitForAsyncConnect. Después de construir un zócalo, necesita crearlo y luego destruirlo cuando haya terminado de usarlo. Tanto create como accept devuelven un FileDescriptor para los datos reales. Alternativamente, puede llamar a getInputStream y getOutputStream para recuperar las transmisiones respectivas sin pasar por el FileDescriptor.

 -1
Author: Shahid Karimi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-21 05:52:02