3

我正在尝试以编程方式将 Android 手机连接到蓝牙设备(已配对)。我在线程中使用createRfcommSocketToServiceRecord(UUID)方法。

我知道蓝牙键盘是 HID 设备,所以我使用 UUID 作为

00001124-0000-1000-8000-00805f9b34fb

上述方法返回一个 BluetoothSocket 对象,但在调用 bluetoothSocket.connect() 时无法连接到 HID 设备。它给出IOException:发现失败

我对此进行了很多搜索,但不知道如何解决此问题。

是否只能在 Android 中使用这种方法连接 Rfcomm 而不是 HID 设备?如果是这样,那么我应该使用什么替代方法呢?我在此应用程序中使用带有 Android 4.1 的三星 Galaxy S3,配对后(从设置)我可以在一些内置应用程序(如短信、电子邮件等)中使用蓝牙键盘打字。在我看来,连接到它应该是可能的,但我不确定我是否使用了正确的方法。我想在我的应用程序中读取按键串行数据。

这是我正在使用的代码:

private class ConnectThread extends Thread {
    private final BluetoothSocket mmSocket;

    public ConnectThread(BluetoothDevice device) {
        BluetoothSocket tmp = null;
        try {
            tmp = device.createRfcommSocketToServiceRecord(mUUID);
        } catch (IOException e) {
            e.printStackTrace();
        }
        mmSocket = tmp;
    }

    public void run() {
        try {
            mmSocket.connect();
        } catch (IOException connectException) {
            try {
                mmSocket.close();
            } catch (IOException closeException) { }
            return;
        }

        Log.d(TAG, "ConnectThread connection successful");
    }

    public void cancel() {
        try {
            mmSocket.close();
        } catch (IOException e) { }
    }
}
4

1 回答 1

2

是否只能在 Android 中使用这种方法连接 Rfcomm 而不是 HID 设备?

是的,很不幸的。java 方法的命名清楚地表明只支持 rfcomm。HID 很可能在原始 l2cap 上运行。

尝试使用InputDevicetakeKeyEvents在您的应用中获取按键数据。

于 2013-03-01T18:58:46.623 回答