Connection via Bluetooth LE fail on Android when device is not in pairing mode, but succeeded using Linux(当设备未处于配对模式,但使用Linux成功时,Android上通过蓝牙LE连接失败)
问题描述
问题说明 我有一个BLE设备。我想和它交流。 我的Android应用代码:
device.connectGatt(context, false, ...)
如果设备处于配对模式,我可以连接到它。但是如果我想用相同的代码连接到已经配对的设备,我会收到一个错误。 完全相同的用例在我的Linux PC上运行良好,设备处于配对和非配对模式。(我已为此使用了Python gatt module)
我已转储蓝牙通信,并且在连接期间看到一些差异。
Linux/未配对
- 发送:LE创建连接
- rcvd:命令状态(LE创建连接)
- rcvd:LE Meta(LE连接完成)
- 发送:LE读取远程功能
- rcvd:LE Meta(LE频道选择算法)
- rcvd:命令状态(LE读取远程功能)
- rcvd:LE Meta(LE Read Remote Feature Complete)
- 发送:LE开始加密
Android/配对
- 发送:LE创建连接
- rcvd:命令状态(LE创建连接)
- rcvd:LE Meta(LE增强连接完成)
- 已发送:LE读取对等可解析地址
- rcvd:命令完成(LE Read Peer可解析地址)
- 发送:LE读取远程功能
- rcvd:命令状态(LE读取远程功能)
- rcvd:LE Meta(LE Read Remote Feature Complete)
- 发送:读取远程版本信息
- rcvd:命令状态(读取远程版本信息)
- rcvd:读取远程版本信息完成
- 发送:LE开始加密
Android/未配对
- 发送:LE创建连接
- rcvd:命令状态(LE创建连接)
- rcvd:LE Meta(LE增强连接完成)
- 已发送:LE读取对等可解析地址
- rcvd:命令完成(LE Read Peer可解析地址)
- 发送:LE读取远程功能
- rcvd:命令状态(LE读取远程功能)
- Rcvd:LE Meta(LE Read Remote Feature Complete)<;--FAILED,状态:无法建立连接(0x3e)
所以我决定将
LE Meta(LE Read Remote Feature Complete)
全部3次尝试的数据包:
Linux/非配对:支持的LE功能:0x0000000000004105、LE加密、扩展拒绝指示、LE 2M PHY、频道选择算法#2
Android/配对:支持的LE功能:0x000000000000000005,LE加密,扩展拒绝指示
android/非配对:支持的LE功能:0x00000000000000ef、LE加密、连接参数请求流程、扩展拒绝指示、从机发起功能交换、数据包长度扩展、LL隐私、扩展扫描仪过滤策略
有人知道如何解决此问题吗?
推荐答案
&连接无法建立&表示在主机发出CONNECT_IND响应ADV_IND后,从主机似乎没有响应主机发出的任何数据包。这可能是由于某些硬件或固件故障、信号质量不佳或外围设备使用白名单忽略来自不需要的设备的连接造成的。没有发生此错误的其他原因。
如果外围设备正在使用白名单,请确保它正确处理可解析的地址。
这篇关于当设备未处于配对模式,但使用Linux成功时,Android上通过蓝牙LE连接失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!