我正在为一个小型且非常简单的蓝牙遥控器编写蓝牙 HID 服务器。我正在关注这里的文档。
我的申请许可包括:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
这是我的BluetoothServerSocket
阅读连接接受线程:
private class AcceptThread extends Thread {
public void run() {
BluetoothSocket socket = null;
while(true) {
try {
socket = MyBluetoothServerSocket.accept(); // problematic line
} catch(IOException e) {
Log.i(BLUETOOTH_SERVICE, e.toString());
break;
}
if(socket != null) {
readInput(socket);
try {
MyBluetoothServerSocket.close();
} catch (IOException e) {
Log.i(BLUETOOTH_SERVICE, e.toString());
}
} else {
Log.i(BLUETOOTH_SERVICE, "Could not accept a connection from the socket.\n");
}
break;
}
}
}
MyBluetoothServerSocket
是这样构造的套接字:
MyBluetoothAdapter.listenUsingRfcommWithServiceRecord("MyService", UUID.fromString("00001124-0000-1000-8000-00805f9b34fb"));
我上面使用的 UUID 是我的遥控设备通过以下方法报告的唯一一个:
MyBluetoothDevice.getUuids();
并且MyBluetoothAdapter
只是默认适配器:
BluetoothAdapter.getDefaultAdapter();
所涉及的其余代码很少(确保蓝牙已打开,选择正确的设备)并正常工作。遥控器与手机绑定。
上面代码中标记为有问题的行 ( accept()
) 永远不会返回,即它永远阻塞。我究竟做错了什么?
编辑:我试过MyBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord
没有成功。