4

我一直在使用适用于 Android 2.2(API 级别 8,HTC Desire)的蓝牙 API,并且有一个应用程序使用以下方式连接到嵌入式蓝牙设备:

device.createRfcommSocketToServiceRecord(DEV_UUID);

这按预期生成了一个配对请求,但是为了简化连接过程,我想在配对时避免用户交互,因此移至 API 级别 10(带有 CyanogenMod 7 的 HTC Desire),因此我可以使用:

 device.createInsecureRfcommSocketToServiceRecord(DEV_UUID);

在测试时,这也可以按预期工作(在不提示用户配对的情况下进行连接),但是当我尝试在 API 级别 10 下创建安全 RfcommSocket 时,就像以前使用 2.2 一样,我得到一个连接被拒绝的异常......

 java.io.IOException: Connection refused
    at android.bluetooth.BluetoothSocket.connectNative(Native Method)
    at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204)

据我所知,这应该仍然以相同的方式工作,提示用户配对?

编辑:

刚刚使用以下代码再次尝试,结果是相同的(为不安全工作但不为安全工作),我将尝试使用库存 2.3 设备进行测试。

        try {
            Method m = dev.getClass().getMethod("createInsecureRfcommSocketToServiceRecord", new Class[] { UUID.class } );
            BluetoothSocket bs = (BluetoothSocket)m.invoke(dev, devUUID);
            Log.d("TEST", "Method Invoked");
            bs.connect();
            Log.d("TEST", "Connected to socket");
            bs.close();
            Log.d("TEST", "Closed Socket");
        }
4

1 回答 1

4

在我的应用程序中寻找类似问题的解决方案时,我从 code.google.com 找到了这个博客

它将帮助所有仍在寻找此问题解决方案的人

http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/(链接不再工作)

解决方案现在变得非常简单。只需在您的项目中包含 InsecureBluetooth.java 并在 BluetoothChatService.java 中更改 2 行。

tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true);

tmp   = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true);

就是这样 !

于 2011-12-28T07:57:36.747 回答