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

时间:2017-05-07 16:30:50

标签: android bluetooth

我正在使用有源蓝牙LE扫描仪运行应用或服务,并在日志控制台上显示扫描结果。如果我将手机锁在桌子上而不再触摸。一段时间后停止,它不会给我更多的扫描结果。

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

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

我在打盹模式下使用“无优化电池”的应用程序。我通过命令测试强制引入手机打瞌睡模式并正常工作它给我扫描结果。

在运行APP时我的Nexus 5与Android 7.1.1通过并锁定屏幕而不再触摸手机。时间是30分钟。手机只在一张桌子上,只与microusb连接,以便在android studio中查看日志。

在其他具有android 7.1传输功能的Moto G2中,时间介于20分钟到40分钟之间,因此更为轻松。手机只在一张桌子上,只与microusb连接,以便在android studio中查看日志。

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

这用于信标结果,首先我为此目的使用Android Beacon Library,结果是相同的。

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

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

提前致谢。

最好的问候。

1 个答案:

答案 0 :(得分:14)

Android 7.0引入了BLE扫描超时,其中任何运行30分钟或更长时间的扫描都会自动停止并且仅“机会性地”恢复,这实际上意味着如果另一个进程执行扫描,它也可以获得结果。 / p>

您可以通过设置代码来启动蓝牙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

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