android - 保持 Android 蓝牙扫描但它自行停止

标签 android bluetooth android-bluetooth

对于特定应用程序,我需要保持 Android 蓝牙扫描 LE 设备,但我发现它会自行停止,而无需登录某些设备。我的示例代码如下:

mBluetoothLeScanner.startScan(null, mScanSettings, leScanCallback);

我确信我从来没有打电话

mBluetoothLeScanner.stopScan(leScanCallback)

所以我尝试查看“btsnoop_hci.log ”。我发现 Controller 在一段时间内没有向主机发送广播消息,可能是5分钟或10分钟以上。在此示例中,它在 864.833537 秒处停止。有人帮我解决这个问题吗?

最佳答案

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 源代码中查看执行此操作的代码:

Source code

解决这个问题的方法是不要让扫描持续那么长时间。您只需停止它们并定期重新启动它们即可。

编辑:

Check on this link

关于android - 保持 Android 蓝牙扫描但它自行停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47523245/

相关文章:

android - 指南针 - 完整 360 度旋转的轨道数

android - 在 Ice Cream Sandwich 上启动浏览器

android - 如何读取 build.gradle 中 local.properties 中定义的属性

java - ArrayIndexOutofBoundException - Java - Android - 接收流数据并存储在多维数组中 Java

java - 从android中动态创建的EditBox中检索数据

Android保存BLE设备以在应用关闭后重新连接

java - ReadObject 返回 OptionalDataException

Flutter Bluetooth Serial Discovery - 取消发现(流关闭)

android - 如何通过蓝牙访问相机?

安卓蓝牙 : get Device Specific AT commands