Я написал приложение для Android, которое подключается к клавиатуре Bluetooth. Он подключается через сокет BT к клавиатуре и получает входной поток сокета.
InputStream inStrm = socket.getInputStream();
Затем я попытался прочитать входной поток, но он говорит, что нет доступных байтов.
int nBytesAvail = inStrm.available(); // always gives me 0
Или
int dataByte = inStrm.read(); // always generates IOException
Исключение говорит: Программное обеспечение вызывало прерывание соединения
Если я пытаюсь выполнить запись в поток, я получаю другое исключение: конечная точка транспорта не подключена.
Может произойти одно из двух.
Мое первое опасение заключается в том, что существует Протокол HID, который будет использоваться на клавиатуре, и он не раскроет свои секреты, пока я не произнесу правильное заклинание. Это правильно? Или стек сокетов BT должен позаботиться об этом автоматически? Поток сокета кажется стандартным последовательным потоком, и я не уверен, что это правильно.
Мой второй страх заключается в том, что, поскольку это вкладка Galaxy, моя проблема может заключаться в том, что эта конкретная часть ОС была удалена от Samsung (но получу ли я действующий входной поток от сокета?). Широко известно, что американские версии Tab просто не будут подключаться ни к одному BT HID с помощью стандартных утилит Android BT, хотя передача файлов BT работает нормально.
Я полагаю, что третья возможность заключается в том, что мне просто не хватает нажатия клавиш, когда они происходят. Я не знаю, какой объем буферизации выполняет Java для данных BT, поступающих из HID, но если соединение с сокетом установлено, данные должны появиться во входном потоке, не так ли?
Я не хочу добавлять гораздо больше время на случай, если я пойду совершенно неверным путем (см. №1), или он обречен на провал (см. №2).