我一直在研究 Android 2.2 的蓝牙 API(API 级别 8,HTC Desire),并且有一个应用程序使用以下方式连接到嵌入式蓝牙设备:
device.createRfcommSocketToServiceRecord(DEV_UUID);
这按预期生成了一个配对请求,但是为了简化连接过程,我想避免配对时的用户交互,因此移至 API 级别 10(带有 CyanogenMod 7 的 HTC Desire),以便我可以使用:
device.createInsecureRfcommSocketToServiceRecord(DEV_UUID);
测试时这也按预期工作(连接时不提示用户配对),但是当我尝试像以前那样在 2.2 中创建 API 级别 10 下的安全 RfcommSocket 时,出现连接拒绝异常...
java.io.IOException: Connection refused
at android.bluetooth.BluetoothSocket.connectNative(Native Method)
at android.bluetooth.BluetoothSocket.connect(BluetoothSocket.java:204)
据我所知,这应该仍然以相同的方式工作,提示用户配对?
EDIT:
只是使用以下代码再次尝试,结果是相同的(适用于不安全但不适用于安全),我将尝试使用库存 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");
}