Como falar com um teclado Bluetooth?
Eu escrevi um aplicativo Android que se conecta a um teclado Bluetooth. Ele se conecta através de um soquete BT ao teclado e adquire o fluxo de entrada do soquete.
InputStream inStrm = socket.getInputStream();
Em seguida, tentei ler o fluxo de entrada, mas ele diz que não há bytes disponíveis.
int nBytesAvail = inStrm.available(); // always gives me 0
Ou
int dataByte = inStrm.read(); // always generates IOException
A exceção diz: O software causou a interrupção da conexão
Se eu tentar gravar no fluxo, recebo outra exceção: o terminal de transporte não está conectado.
Uma de duas coisas pode estar acontecendo.
Meu primeiro medo é que exista o protocolo HID para ser falado com o teclado, e ele não divulgará seus segredos até que eu pronuncie o encantamento adequado. Isso está correto? Ou isso deve ser resolvido automaticamente pela pilha de soquetes BT? O fluxo de soquete parece ser um fluxo serial padrão e não tenho certeza se isso está correto.
Meu segundo medo é que, como se trata do Galaxy Tab, meu problema pode ser simplesmente que essa parte específica do sistema operacional tenha sido removida pela Samsung (mas ainda assim eu receberia um fluxo de entrada válido da conexão do soquete?). É amplamente relatado que as versões da guia nos EUA simplesmente não se conectam a nenhum BT HID usando os utilitários padrão do Android BT, embora as transferências de arquivos BT funcionem bem.
Suponho que uma terceira possibilidade é que estou simplesmente perdendo as teclas conforme elas acontecem. Não sei quanto Java faz o buffer dos dados BT provenientes de um HID, mas se a conexão do soquete for feita, os dados deverão aparecer no fluxo de entrada, não?
Estou relutante em dedicar muito mais tempo a isso, no caso de agir completamente da maneira errada (consulte o item 1) ou se estiver fadado ao fracasso (consulte o item 2).