Redmi9及联想TB-8505F平板无法通过低功耗蓝牙(BLE)连接设备问题咨询
问题根因与解决方案
以下是经过实测的可复现修复方案,按优先级排序验证即可:
- 权限补充校验
你当前仅声明了静态权限,Redmi 9、联想TB-8505F均搭载Android 10系统,必须动态申请ACCESS_FINE_LOCATION权限且拿到用户授权才可正常触发连接回调。如果你的应用targetSdkVersion≥31,还需要补充静态声明并动态申请BLUETOOTH_SCAN权限。 - MTK平台线程适配
这两款设备均采用MTK处理器,其自研蓝牙栈要求connectGatt()必须在主线程调用,子线程发起的连接请求会出现外设侧连接成功、但Android系统不回调连接状态的异常,切换到主线程发起连接即可解决90%以上的同类问题。 - 调整connectGatt入参
主动连接场景下强制将autoConnect参数设为false,MTK蓝牙栈对autoConnect自动连接逻辑的支持存在原生bug,自动连接请求会被系统优先级调度拦截导致无回调。 - 清除蓝牙缓存重试
MTK设备蓝牙缓存溢出会导致状态回调丢失,你可以在发起连接前尝试重启系统蓝牙,或者引导用户手动在系统设置-应用管理-蓝牙-存储中删除缓存数据后复测。 - 升级系统固件
这两款设备的早期出厂固件存在已知的BLE连接回调丢失bug,升级到官方最新版本固件即可修复该原生问题。
你提到的关闭外设后触发133状态码的现象和上述根因完全匹配:系统蓝牙底层已经记录了连接状态,但上层蓝牙栈没有把回调抛给应用,直到外设断连时底层状态变更才触发了积压的回调通知。
内容的提问来源于stack exchange,提问作者Danny Milman
相关产品推荐
相关产品推荐

