¿Cómo hablar con un teclado Bluetooth?

He escrito una aplicación de Android que se conecta a un teclado Bluetooth. Se conecta a través de un zócalo BT al teclado y adquiere el flujo de entrada del zócalo.

InputStream inStrm = socket.getInputStream();

Luego intenté leer la secuencia de entrada, pero dice que no hay bytes disponibles.

int nBytesAvail = inStrm.available(); // always gives me 0

O

int  dataByte = inStrm.read(); // always generates IOException

La excepción dice: el software provocó la cancelación de la conexión

Si intento escribir en la secuencia, obtengo otra excepción: el punto final de transporte no está conectado.

Una de dos cosas puede estar sucediendo.

Mi primer temor es que haya un protocolo HID que se hable al teclado, y no divulgará sus secretos hasta que pronuncie el encantamiento adecuado. ¿Es eso correcto? ¿O eso debería ser atendido automáticamente por la pila de enchufes BT? El flujo de socket parece ser un flujo en serie estándar, y no estoy seguro de que sea correcto.

Mi segundo temor es que, dado que se trata de un Galaxy Tab, mi problema podría ser simplemente que Samsung ha eliminado esa parte particular del sistema operativo (pero ¿recibiría un flujo de entrada válido de la conexión del socket?). Se informa ampliamente que las versiones estadounidenses de la pestaña simplemente no se conectarán a ningún BT HID utilizando las utilidades BT Android estándar, aunque las transferencias de archivos BT funcionan bien.

Supongo que una tercera posibilidad es que simplemente me faltan las teclas mientras suceden. No sé cuánto buffering Java hace de los datos BT que ingresan desde un HID, pero si se realiza la conexión del socket, los datos deberían aparecer en la secuencia de entrada, ¿no?

Soy reacio a dedicar mucho más tiempo a esto en caso de que lo haga por el camino equivocado (ver # 1), o esté condenado al fracaso (ver # 2).

Respuestas a la pregunta(3)

Su respuesta a la pregunta