我有一个蓝牙手持式打印机,我能够使用Mac上的SPP连接进行通信(使用Coolterm).当我试图从Android(使用平台7)做同样的事情时,我遇到了多个问题:
打印机似乎不支持/需要PIN身份验证.当从OSX连接时,我刚刚选择了"不要使用引脚"并且它已配对的选项.在Android中,当我使用时device.createRfcommSocketToServiceRecord(),它总是最终要求我输入PIN /密钥(我没有/不需要).我用反射技巧解决了这个问题:
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class});
BluetoothSocket connection = (BluetoothSocket) m.invoke(device, 1);
Run Code Online (Sandbox Code Playgroud)
我不确定这是否真的有效,但打印机上闪烁的LED指示灯停止闪烁,这让我相信它确实如此.
一旦我有套接字,我尝试使用以下方法将字节数据写入流:
byte[] buffer = new byte[3];
buffer[0] = (byte) 0x8A;
buffer[1] = (byte) 0xC1;
buffer[2] = (byte) 0x04;
outStream.write(buffer);
int response = inStream.read();
mySocket.close();
Run Code Online (Sandbox Code Playgroud)
从OSX上的Coolterm发送相同的三字节序列从打印机打印了一个测试页.但是,这似乎使线程挂在Android上(读取).
我在这里错过了什么吗?
编辑:这似乎只有当我将通道设置为1时才有效.这意味着我在这里做点什么.