我写了一个连接蓝牙键盘的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,我的问题可能只是因为三星已经删除了操作系统的特定部分(但我仍然可以从套接字连接获得有效的输入流吗?).据广泛报道,美国版本的Tab根本不会使用标准的Android BT实用程序连接到任何BT HID,尽管BT文件传输确实可以正常工作.
我想第三种可能性就是当我发生按键时我只是错过了按键.我不知道Java对来自HID的BT数据做了多少缓冲,但是如果建立套接字连接,数据应该出现在输入流中,不是吗?
我不愿意花更多的时间来解决这个问题,以防我完全采用错误的方式(参见#1),或注定要失败(见#2).