2011-02-03 6 views
6

Estoy escribiendo una aplicación de Android para hablar con un dispositivo de hardware que está totalmente fuera de mi control.zócalo RFCOMM de Android en el canal fijo

Mi aplicación crea un socket de escucha utilizando listenUsingRfcommWithServiceRecord y el UUID 00001101-0000-1000-8000-00805F9B34FB. Luego llama a accept() en ese socket para esperar que se conecte el dispositivo remoto, pero nunca lo hace.

He hablado con los fabricantes del dispositivo de hardware, y dicen que su dispositivo "simplemente se conectará al canal 1" en el dispositivo remoto. es decir, no hace un descubrimiento de SDP para averiguar el número de canal correcto. Se niegan a cambiar esto (aunque es, por supuesto, incorrecto)

Mi pregunta es, ¿hay alguna forma de forzar a Android a usar un número de canal RFCOMM fijo? Tal vez usando el reflejo, como el truco de llamar directamente a createRfcommSocket cuando se conecta a un cliente.

Respuesta

1

Esas API existen, pero no son compatibles. Si aún está interesado, consulte el código fuente de la fuente para el Android 1.5 backport of android.bluetooth.

Tenga en cuenta, sin embargo, que como API no admitidas se pueden eliminar en futuras versiones.

+0

Gracias por la respuesta. – didster

1

Una forma muy hackey es consumir todos los canales y luego liberar el que desee. Tengo el mismo problema que tú y este truco está trabajando en el campo durante aproximadamente un año sin quejas. Hay lagunas en esto, por lo que el éxito dependerá de tu caso de uso.

Hay un máximo de 30 canales, por lo que abrirá 30 conexiones (o menos) con un UUID que defina. Ahora, usando spdtool, encuentre el UUID de la conexión de socket al canal que desea. Cierra esa conexión.

Ahora el canal, 1 en su caso, será el único canal disponible. Conéctese a él de la manera que desee. Una vez que se establece la conexión, cierre todas las demás conexiones.

Sé que es muy malo, pero funcionó para mi caso de uso.

Cuestiones relacionadas