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 图层状态。
我正在用手机扫描 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 图层状态。