我编写了一个连接到蓝牙键盘的 Android 应用程序。它通过 BT 套接字连接到键盘并获取套接字的输入流。
InputStream inStrm = socket.getInputStream();
接下来我尝试读取输入流,但它说没有可用的字节。
int nBytesAvail = inStrm.available(); // always gives me 0
或者
int dataByte = inStrm.read(); // always generates IOException
异常说:软件导致连接中止
如果我尝试写入流,我会得到另一个异常:传输端点未连接。
可能会发生两件事之一。
我的第一个担心是键盘上有 HID 协议,在我说出正确的咒语之前,它不会泄露它的秘密。那是对的吗?还是应该由BT套接字堆栈自动处理?套接字流似乎是标准的串行流,我不确定这是否正确。
我的第二个担心是,由于这是 Galaxy Tab,我的问题可能只是操作系统的特定部分已被三星删除(但我仍会从套接字连接获得有效的输入流吗?)。据广泛报道,尽管 BT 文件传输工作正常,但美国版 Tab 根本不会使用标准的 Android BT 实用程序连接到任何 BT HID。
我想第三种可能性是我只是在击键发生时错过了它们。我不知道 Java 对来自 HID 的 BT 数据做了多少缓冲,但如果建立了套接字连接,数据应该出现在输入流中,不是吗?
我不愿意在这方面投入更多的时间,以防我完全错误地处理它(参见#1),或者它注定要失败(参见#2)。