android - 蓝牙连接被安全 rfcomm 套接字拒绝(适用于不安全)

标签 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。

最佳答案

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

这是代码的简化 View (未显示 try/catches):

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

关于android - 蓝牙连接被安全 rfcomm 套接字拒绝(适用于不安全),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20320951/

相关文章:

java - 更改语言环境就是修改我的应用程序的文本尺寸

android - 操作栏上的图标优先级

android - 将 Android 连接到具有未知 UUID 的设备

android - 蓝牙 SDP - sdpd 在哪里?

c - 如何在 C 中设置 Don't Fragment (IP_DF) 标志

ios - iOS 设备可以与 BT 设备通信吗?

android - 菲律宾的 Cloud Firestore 位置推荐

Android使用服务,新手的好奇心

java - 客户端重新连接java套接字

python 错误的数字 ssl