Как разговаривать с клавиатурой Bluetooth?

Я написал приложение для Android, которое подключается к клавиатуре Bluetooth. Он подключается через сокет BT к клавиатуре и получает входной поток сокета.

InputStream inStrm = socket.getInputStream();

Затем я попытался прочитать входной поток, но он говорит, что нет доступных байтов.

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

Или

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

Исключение говорит: Программное обеспечение вызывало прерывание соединения

Если я пытаюсь выполнить запись в поток, я получаю другое исключение: конечная точка транспорта не подключена.

Может произойти одно из двух.

  1. Мое первое опасение заключается в том, что существует Протокол HID, который будет использоваться на клавиатуре, и он не раскроет свои секреты, пока я не произнесу правильное заклинание. Это правильно? Или стек сокетов BT должен позаботиться об этом автоматически? Поток сокета кажется стандартным последовательным потоком, и я не уверен, что это правильно.

  2. Мой второй страх заключается в том, что, поскольку это вкладка Galaxy, моя проблема может заключаться в том, что эта конкретная часть ОС была удалена от Samsung (но получу ли я действующий входной поток от сокета?). Широко известно, что американские версии Tab просто не будут подключаться ни к одному BT HID с помощью стандартных утилит Android BT, хотя передача файлов BT работает нормально.

Я полагаю, что третья возможность заключается в том, что мне просто не хватает нажатия клавиш, когда они происходят. Я не знаю, какой объем буферизации выполняет Java для данных BT, поступающих из HID, но если соединение с сокетом установлено, данные должны появиться во входном потоке, не так ли?

Я не хочу добавлять гораздо больше время на случай, если я пойду совершенно неверным путем (см. №1), или он обречен на провал (см. №2).

6
задан Charles 25 December 2013 в 07:01
поделиться