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:
- 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?
- 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!
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. –
Sí, pero la API "oficial" no es la única. Para eso estoy preguntando sobre ndk 1.5, construye el libbluetooth u otras funciones @hide. –
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. –