You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

react-native-ble-plx在Android 9以下版本无法读取特征值问题求助

React Native BLE低版本安卓断连问题解决思路

运行错误:Disconnected from {deviceId} with status 22 (UNKNOWN)
调试报错:Error: Unknown error occurred. This is probably a bug! Check reason property

该报错为安卓8及以下系统原生蓝牙栈与react-native-ble-plx2.x版本默认配置不兼容导致,可按以下步骤排查解决:

  • 调整连接参数
    连接设备时关闭autoConnect配置,同时设置MTU为安卓低版本默认值23,示例代码:
    device.connect({
      autoConnect: false,
      requestMTU: 23
    })
    
    安卓8及以下系统蓝牙栈对autoConnect的唤醒逻辑存在缺陷,主动请求超过23的MTU也会直接触发断连。
  • 增加操作延迟
    连接成功、服务发现完成后,不要立刻读取特征值,增加200~500ms的延迟再执行读写操作,适配低版本蓝牙栈的响应缓冲时间,示例代码:
    device.discoverAllServicesAndCharacteristics()
    .then(() => {
      setTimeout(() => {
        // 执行特征值读取逻辑
      }, 300)
    })
    
  • 补充权限兼容配置
    在android/app/src/main/AndroidManifest.xml中添加低版本适配权限:
    <!-- 安卓8及以下蓝牙管理权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="27" />
    <!-- 低版本蓝牙连接必需的位置权限 -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    
    注意位置权限需要在应用运行时动态申请,仅在清单文件声明无效。
  • 降级依赖版本
    如以上操作无效,可将react-native-ble-plx降级到1.1.1版本,2.x版本底层依赖的安卓BLE库对低版本系统适配优化不足,1.1.1版本对RN 0.63.x的适配稳定性更高,低版本安卓兼容性更好。
  • 校验特征值属性
    读取特征值前确认目标特征值已开启READ属性,不要使用缓存的服务/特征值列表,每次连接后主动调用discoverAllServicesAndCharacteristics()获取最新的特征值列表再执行读取操作。

内容的提问来源于stack exchange,提问作者Aarthi Govardhanan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 11:27:03