一段时间后,牛轧糖中的蓝牙扫描停止

时间:2018-04-22 21:44:27

标签: bluetooth-lowenergy ibeacon-android

我有扫描信标的应用程序。我在Lollipop和Oreo没有遇到任何问题,但是在Marshmellow和Nougat,一段时间后(大约90分钟)没有发现任何信标。我在网上看到Nougat在30分钟后停止扫描,因此我每5分钟停止/开始扫描一次。我观察到的事情 -

1)所有设备都在同一时间进行测试,因此我确信信标传输没有问题。

2)当wifi关闭时,我观察到连续扫描。

3)一旦停止扫描,设备就不会在“设置”选项卡上显示任何附近的蓝牙设备(可能蓝牙已损坏?)

4)电池历史记录显示ble_scanning始终开启

5)重新启动蓝牙解决了问题并开始扫描。我不想每次在应用程序中引入关闭/开启蓝牙。

我遇到过这篇文章https://github.com/AltBeacon/android-beacon-library/issues/289,但这篇文章是针对Lollipop的,我没有遇到任何问题。它讨论了设置beaconManager.setAndroidLScanningDisabled(true)。目前,我没有使用该库。有什么办法可以解决这个问题吗? 我正在使用XCody Y19设备Android 7.0

1 个答案:

答案 0 :(得分:3)

除非您在使用Android 6.x和7.x的不同制造商的多个设备型号上重现此问题,否则我认为此问题更可能是设备特定的。它可以由蓝牙芯片或ROM中的设备专用固件引入,该固件将蓝牙硬件桥接到Android蓝牙堆栈。

虽然这只是基于您问题中有限数据样本的推测,但我在运行Android 6.x和7.x的华为,三星J3,Moto E3和Moto G5设备上看到了类似的问题。但是我没有在运行Android 6.x和7.x的Nexus设备上看到过这样的问题。出于这个原因,我认为类似的问题可能不是特定于操作系统的。

虽然它并不理想,但是将电源循环到蓝牙是Android应用程序在蓝牙堆栈上控制的少数控制之一。它有时(但不总是)清除低级蓝牙堆栈问题,其中没有其他API存在。出于这个原因,Android Beacon Library中添加了一个可选的BluetoothMedic,用于查找蓝牙堆栈崩溃和(可选)在发现此类问题时为蓝牙循环供电。这允许您忽略此类问题并专注于您的应用程序逻辑。

虽然我了解您没有使用该库,但如果您有兴趣,可以从拉取请求中复制BluetoothMedic类的源代码:https://github.com/AltBeacon/android-beacon-library/pull/644