我正在使用手机扫描 BLE 设备。 每当我收到 onScanResult 的回调时,我都会检查外围设备是否是具有特定 minorId 的 iBeacon,如果是,我会进行设备连接。问题是连接成功后 onScanResult 返回我周围的不同设备,但它们都不是我刚刚连接的设备。在 onScanResult 中找到连接的设备对我来说至关重要。这是正常行为吗?什么会导致这个?当我连接到设备时会发生这种情况 - 只有在那时。
最佳答案
根据蓝牙规范,这是默认行为。对于低功耗蓝牙设备,有 6 种预定义状态:-
- 待机状态
- 广告状态
- 扫描状态
- 发起国
- 连接状态
- 同步状态
规范中规定:“链路层状态机一次只允许一个状态处于 Activity 状态”。这在下面的状态机中得到了证明:-
这就是为什么一旦您连接到广告设备,它就会将状态切换为“连接”并保持该状态。如果您有权访问设备的代码,您可以强制它在连接后进行广告,但并非所有设备都支持此功能。
有关更多信息,请查看 Bluetooth Specification v5.1,第 6 卷,B 部分,第 1 节:链路层状态。
关于Android - 连接成功后无法在 onScanResult 回调中找到设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57969346/