Android:为什么 BluetoothLeScanner 有时没有发现任何 BLE 设备?

问题描述

我正在使用 BluetoothLeScanner 扫描我开始使用的 BLE 设备:

startScan(null,settings.getScanSettings(),scanCallback);

每隔一段时间,对 startScan()调用都不会发现任何 BLE 设备,即使某些设备实际上在做广告(它们是使用 nRF Connect 应用程序发现的)。

发生这种情况时,对 stopScan()startScan() 的下一次调用确实会发现设备。

我知道从 Android 7 开始,开始和停止扫描的次数被限制在 30 秒的窗口内 5 次。但是,我注意到如果超过 30 秒没有调用 stopScan()/startScan() 也会出现问题。

有人遇到过这样的问题吗? 可能是我的应用程序在启动扫描仪时正在做的其他事情导致扫描失败?

我在使用 Android 10 及更低版本时遇到此问题。

解决方法

Android 手机限制 BLE 扫描持续时间以节省能源。所以你不能长时间扫描BLE广告。是系统限制,APP层无法更改。

在旧手机(可能在 4.4 以下)中不要设置限制,但它会使手机变热。

如果您想长时间扫描 BLE 广告,更改您的设计是更好的方法。