Android - 连接成功后在 onScanResult 回调中找不到设备

Android - Cannot find a device in onScanResult callback after successful connection

我正在用手机扫描 BLE 设备。 每当我收到 onScanResult 的回调时,我都会检查外围设备是否是具有特定 minorId 的 iBeacon,如果是,我会进行设备连接。问题是连接成功后 onScanResult returns 我周围的不同设备,但其中 none 是我刚刚连接的设备。在 onScanResult 中找到连接的设备对我来说至关重要。这是正常行为吗?什么会导致这个?当我连接到设备时会发生这种情况 - 只有在那时。

根据蓝牙规范,这是默认行为。对于低功耗蓝牙设备,有 6 种预定义状态:-

  • 待机状态
  • 广告状态
  • 扫描状态
  • 初始状态
  • 连接状态
  • 同步状态

规范中规定:"The Link Layer state machine allows only one state to be active at a time"。这在下面的状态机中得到了证明:-

这就是为什么一旦您连接到广告设备,它就会将状态切换到 "Connection" 并保持该状态。如果您有权访问设备的代码,您可以强制它在连接后进行广告,但并非所有设备都支持此功能。

有关详细信息,请查看 Bluetooth Specification v5.1,第 6 卷,B 部分,第 1 节:Link 图层状态。