2010-11-17 16 views
30

Este es el escenario:¿Cómo crear un zócalo RFCOMM de Android sin ninguna entrada del usuario?

Tengo que escribir una aplicación para Android para crear una toma de RFCOMM a un PC con un adaptador Bluetooth (Voy a escribir el servidor también).

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

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

Un pequeño escenario: Tengo una aplicación de Android que intercambia información con un cuadro de Linux con un socket RFCOMM abierto. Puedo configurar manualmente el PIN en los dispositivos (disco de codificación es una opción)

Busco diferentes caminos:

Escribe una envoltura de JNI

Como se ha hecho por Max here 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 bluetooth lib). Después de días de búsqueda en la web no he podido averiguarlo. ¿Alguien tiene o sabe dónde puedo encontrarlo?
  2. Compila libbluetooth para Android solo y úsalas para -lbluetooth. No hay suerte allí, no soy capaz de construirlos. ¿Alguna pista?

Con un objeto expuesto por las API

Cualquiera sabe cómo puedo usar createRfcommSocketToServiceRecord y que el usuario no emparejar manualmente el dispositivo? ¿Es posible? ¿Cómo debo escribir el servidor?

Algo que no sé

Tal vez (seguro!) Hay algo que no sé. Tal vez puedo usar algo más? ¿No es RFCOMM? ¿PARTIDO SOCIALDEMÓCRATA?

¿Puedo emparejar manualmente con la API de Android?

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

Gracias por todo el apoyo chicos!

+9

Especulando, pero no me sorprendería si se diseña intencionalmente para que la participación del usuario (aprobación) sea necesaria para el emparejamiento. Al menos eso sería coherente con otros lugares donde el diseño de Android requiere la interacción del usuario por razones de seguridad. –

+0

Sí, pero la API "oficial" no es la única. Para eso estoy preguntando sobre ndk 1.5, construye el libbluetooth u otras funciones @hide. –

+0

Si se eliminó libbluetooth, lo más probable es que la versión anterior no funcione en una versión de Android más reciente, incluso si la encontró. Esa es la advertencia constante contra el uso de API no públicas; los cambios futuros pueden romperlas. –

Respuesta

2

Al final, puedo decir que no se puede.

Incluso si encuentra una forma, usando wrappers, escribiendo C módulos, etc., la evolución de Android probablemente cambie la cosa que está usando.

Y entonces, no hay otra opción. Tristemente.

Veamos cómo cambiará Android Bluetooth API en el futuro.

-1

La API de Android Bluetooth no está finalizada, y cambiará a. Úselo bajo su propio riesgo. Esta clase implementa una API para la capa Bluetooth RFCOMM. Un socket RFCOMM es similar a un socket 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 métodos de enlace, escucha y aceptación, así como para la realización de conexiones salientes con connect, connectAsync y waitForAsyncConnect. Después de construir un socket, necesita crearlo y luego destruirlo cuando haya terminado de usarlo. Ambos crean y aceptan devolver un FileDescriptor para los datos reales. Alternativamente, puede llamar a getInputStream y getOutputStream para recuperar las respectivas transmisiones sin pasar por FileDescriptor.

+0

¿Has leído la pregunta? Porque no puedo entender la respuesta ... No se ajusta en absoluto. –

+0

Esto ha sido copiado y pegado de http://www.androidjavadoc.com/1.0_r1_src/android/bluetooth/RfcommSocket.html. Por favor agregue su propia entrada. –

Cuestiones relacionadas