Android 蓝牙 Le 扫描仪在一段时间后停止

2024-03-18

我正在使用活动的蓝牙 LE 扫描仪运行应用程序或服务,并在日志控制台上显示扫描结果。如果我把手机锁在桌子上不再碰。一段时间后它停止了,并且没有给我更多的扫描结果。

如果我按下电源按钮并且屏幕唤醒,它会给我更多扫描结果。如果我再次锁定屏幕或等待自动锁定,它会停止并且不会给我更多扫描结果。

我使用服务和应用程序进行测试,该应用程序通过日志为我提供更多结果,并看到该应用程序正在运行,但扫描仪 LE 停止,并且在屏幕锁定时没有给我更多结果。

我的应用程序处于“没有优化电池”的打瞌睡模式。我通过命令引入手机打瞌睡模式来测试强制,并且工作正常,它给了我扫描结果。

在我的 Android 7.1.1 Nexus 5 中,运行 APP 时会通过并锁定屏幕,不再触摸手机。时间是30分钟。手机单独放在一个桌子上,只用microusb连接才能在android studio中看到日志。

在其他Android 7.1的Moto G2上完全通过,但时间在20分钟到40分钟之间,这是比较偶然的。手机单独放在一个桌子上,只用microusb连接才能在android studio中看到日志。

为了再次运行良好,我需要手动强制关闭应用程序并重新启动,否则仅在屏幕处于活动状态时有效,并且在屏幕锁定时不会给我更多结果。

这是用于信标结果的,首先我使用 Android Beacon 库来实现此目的,结果是相同的。

我认为这是 android 蓝牙组件的问题,因为我与 Android Beacon 库有相同的结果,或者如果我实现自己的 BLE 扫描仪,但我不知道如何解决这个问题。

当手机长时间处于锁定状态时,是否有任何形式使用蓝牙扫描仪 LE 始终在 Android 中运行?

提前致谢。

此致。


Android 7.0 引入了 BLE 扫描超时,任何运行 30 分钟或更长时间的扫描都会自动停止,并且只会“伺机”恢复,这本质上意味着如果另一个进程进行扫描,它也可以获得结果。

您可以通过设置代码来启动蓝牙 LE 扫描并使其无限期运行来看到这一点。正好 30 分钟后,扫描将停止,您将在 LogCat 中看到如下条目:

06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: clientIf set to scan opportunisticly: 6
06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: configureRegularScanParams() - queue=1
06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: configureRegularScanParams() - ScanSetting Scan mode=-1 mLastConfiguredScanSetting=2
06-11 19:00:22.848  5123  5147 D BtGatt.ScanManager: configureRegularScanParams() - queue emtpy, scan stopped
06-11 19:00:22.849  5123  5147 D BtGatt.ScanManager: stop scan

您可以在此处的 AOSP 源代码中查看执行此操作的代码:

https://android.googlesource.com/platform/packages/apps/Bluetooth/+/android-7.0.0_r1/src/com/android/bluetooth/gatt/ScanManager.java#72 https://android.googlesource.com/platform/packages/apps/Bluetooth/+/android-7.0.0_r1/src/com/android/bluetooth/gatt/ScanManager.java#72

解决此问题的方法是不要让扫描持续那么长时间。您可以简单地停止它们并定期重新启动它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 蓝牙 Le 扫描仪在一段时间后停止 的相关文章

随机推荐