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

时间:2019-09-17 07:29:47

标签: android bluetooth bluetooth-lowenergy

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

1 个答案:

答案 0 :(得分:2)

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

  • 待机状态
  • 广告状态
  • 扫描状态
  • 发起国
  • 连接状态
  • 同步状态

在规范中指出:“链路层状态机一次只允许一个状态处于活动状态”。下面的状态机对此进行了说明:-

enter image description here

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

有关更多信息,请检查Bluetooth Specification v5.1,第6卷,B部分,第1节:链路层状态。