使用安全的rfcomm套接字拒绝蓝牙连接(与不安全一起使用)

时间:2013-12-02 04:36:57

标签: android sockets bluetooth

现在我正在创建一个通过蓝牙与某些医疗设备通信的Android应用程序,以便在智能手机上显示检查结果,我有这个奇怪的问题:

createRfcommSocketToServiceRecord(uuid)工作并将手机连接到Android 2.1 - 3.x(Galaxy SI,Galaxy SII和其他平板电脑)上的设备,但不会工作在android 4.x(Galaxy SIII,Galaxy Trend)上。我收到连接拒绝错误。 但是,不安全的连接 createInsecureRfcommSocketToServiceRecord(uuid)适用于所有这些版本,当然除了2.1之外,因为在API级别10中引入了不安全的连接。

任何人都知道为什么会这样发生?是硬件/驱动程序相关还是我只是做错了什么。是的,我必须支持android 2.1。

1 个答案:

答案 0 :(得分:2)

谷歌用Android 4.2中的不同版本取代了Android的蓝牙代码。这取消了对L2CAP套接字和其他功能的支持。这可能是你看到差异的原因。我在所有版本的Android(2.3及以上版本)上使用 createInsurecureRfcommSocket (),它似乎工作正常。我没有根据服务记录进行连接,而是在配对设备列表中搜索特定的蓝牙设备名称,然后在通道1上连接到该地址。

以下是代码的简化视图(未显示try / catches):

 BluetoothDevice btDevice = mBluetoothAdapter.getRemoteDevice(btTargetAddress);
 m = btDevice.getClass().getMethod("createInsecureRfcommSocket", new Class[] { int.class });
 mSocket = (BluetoothSocket)m.invoke(btDevice, 1);