0

我正在为一个小型且非常简单的蓝牙遥控器编写蓝牙 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没有成功。

4

1 回答 1

0

HID 基于 L2CAP 蓝牙配置文件(协议?),截至 2013 年 10 月,该配置文件尚未在 Android 中实现(第 107 行)。

这使得目前无法连接到 HID 设备。

于 2013-10-01T22:16:50.407 回答