Android 上的蓝牙扫描似乎有很多“隐藏功能”。
对于初学者来说,有一个“30 秒的限制”(Android 7.0 ble扫描没有结果 https://stackoverflow.com/questions/43114913/android-7-0-ble-scan-no-result)。然后,您必须在后台模式下设置 ScanFilter,否则您不会得到任何结果(找不到此参考)。
最近我发现,当我在 Android 10 上使用以下扫描模式启用扫描并关闭屏幕(30 秒左右)时,我没有得到任何扫描结果(我在 Google Pixel 3 和 Google Pixel 4 上观察到了这种行为) ,它在旧版 Android 上运行良好):
/**
* Perform Bluetooth LE scan in balanced power mode. Scan results are returned at a rate that
* provides a good trade-off between scan frequency and power consumption.
*/
public static final int SCAN_MODE_BALANCED = 1;
还有另一种扫描模式(我还没有尝试过):
/**
* Perform Bluetooth LE scan in low power mode. This is the default scan mode as it consumes the
* least power. This mode is enforced if the scanning application is not in foreground.
*/
public static final int SCAN_MODE_LOW_POWER = 0;
问题:我是否应该将此评论“强制执行”解释为启用除SCAN_MODE_LOW_POWER
不会给我扫描结果吗?有人可以证实这一点吗?
我会自己进一步调查,但这需要时间......
Note:我有一个前台服务,我可以在 ADB 日志中看到扫描仪定期启用/禁用。但我没有得到任何扫描结果...
Update:我现在已经确定使用SCAN_MODE_LOW_POWER
在后台模式下但我仍然没有得到结果。我不知道发生了什么事。
更新2:我尝试运行旧版本的应用程序(不是为 Android 10 编译的),效果很好
更新3:为了以防万一,我禁用了应用程序的电池优化。这没有帮助:
- 转到“设置”>“应用程序”>“您的应用程序”>“高级”>“电池”>“电池优化”
- 将视图更改为所有应用程序
- 搜索您的应用程序
- 选择未优化