小编idr*_*gge的帖子

Android 蓝牙 LE SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES

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

这在应用程序启动的前几次工作正常,但是在从 Android Studio 启动和停止应用程序几次后,回调函数onScanFailed()将被调用为errorCode5。此代码甚至没有被 ScanCallback.java 公开,但来源表明它被声明为public static final int SCAN_FAILED_OUT_OF_HARDWARE_RESOURCES = 5.

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

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

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

发现扫描仪的设置如下:

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

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

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

ScanSettings.Builder()
            .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
            .build()
Run Code Online (Sandbox Code Playgroud)

广播扫描仪的过滤器为空。

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

android bluetooth-lowenergy android-ble

5
推荐指数
1
解决办法
920
查看次数

标签 统计

android ×1

android-ble ×1

bluetooth-lowenergy ×1