首页 > 解决方案 > 当设备未处于配对模式时,通过蓝牙 LE 在 Android 上的连接失败,但使用 Linux 成功

问题描述

问题描述 我有一个 BLE 设备。我想和它交流。我的 Android 应用程序代码:

device.connectGatt(context, false, ...)

如果设备处于配对模式,我可以连接到它。但是,如果我想使用相同的代码连接到已经配对的设备,则会出现错误。完全相同的用例在我的 Linux PC 上运行良好,设备处于配对和非配对模式。(我已经使用了Python gatt 模块

我已经转储了蓝牙流量,并且在连接过程中发现了一些差异。

Linux/未配对

安卓/配对

Android/未配对

所以我决定比较一下内容

LE Meta(LE 读取远程功能完成)

所有 3 次尝试的数据包:

Linux/未配对:支持的 LE 功能:0x0000000000004105、LE 加密、扩展拒绝指示、LE 2M PHY、信道选择算法 #2

Android/配对:支持的 LE 功能:0x0000000000000005、LE 加密、扩展拒绝指示

Android/未配对:支持的 LE 功能:0x00000000000000ef、LE 加密、连接参数请求过程、扩展拒绝指示、从站发起的功能交换、数据包长度扩展、LL 隐私、扩展扫描仪过滤策略

有谁知道我该如何解决这个问题?

标签: androidbluetoothbluetooth-lowenergy

解决方案


“Connection failed to be established”是指master发出CONNECT_IND响应ADV_IND后,slave似乎没有响应master发出的任何数据包。这可能是由于某些硬件或固件故障、信号质量不佳或外围设备使用白名单来忽略来自不需要的设备的连接而发生的。发生此错误没有其他原因。

如果外围设备正在使用白名单,请确保它正确处理可解析地址。


推荐阅读