安卓蓝牙 LE SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES

标签 android bluetooth-lowenergy android-ble

在我的 Android(API 版本 21 及更高版本)Bluetooth LE 应用程序中,该应用程序首先使用 BluetoothLeScannerScanCallback 对象扫描外围设备。

这在应用程序启动的前几次工作正常,但在从 Android Studio 启动和停止应用程序几次后,onScanFailed() 回调被调用并带有 errorCode of 5。这段代码甚至没有被 ScanCallback.java 公开,但消息来源显示它被声明为 public static final int SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES = 5

出现此错误时,恢复应用程序正常行为的唯一方法是关闭蓝牙然后重新打开。

这个错误代码似乎完全没有记录,而且很少见。让事情变得更有趣的是,在发现设备之后,应用程序开始使用另一个监听设备广播的回调进行扫描。此扫描 session 将始终可靠地启动,即使在初始发现扫描收到错误代码 5 之后也是如此。

两个不同的 ScanCallback 的设置在几个方面有所不同。

发现扫描器的设置如下:

ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER)
            .also {
                if(Build.VERSION.SDK_INT >= 23) 
                    it.setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH)
            }
            .build()

还有一个过滤器: ScanFilter.Builder().setServiceUuid(BluetoothUUID.service.parcelUuid).build()

同时,广播监听扫描仪设置如下:

ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .build()

广播扫描器的过滤器是空的。

我如何避免将 BLE 子系统置于这种状态,为什么会发生这种情况?

最佳答案

摆脱这种情况的解决方案是不使用 ScanSettings.CALLBACK_TYPE_FIRST_MATCH。这是 Android,拥有丰富的不同设备,您的里程可能会有所不同。

关于安卓蓝牙 LE SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51102089/

相关文章:

android - 将图像返回到 whatsapp

Android BluetoothGatt - 状态 133 - 注册回调

Android BLE Gatt 连接更改状态

android - 如何使用信号量进行正确的 android ble 通信?

android - onCharacteristicWrite()被调用,但并不总是写

android - 我的邮件 Intent 文本显示格式不对请指教

Android java.lang.exceptioninitializererror System.loadLibrary

iOS 低功耗蓝牙 (BLE) 未发现 TX 特性

Android 4.4.4 Moto G Bluetooth LE 重新连接问题

java - 如何将自定义 getView 绑定(bind)到 ListView 适配器?