频繁点击蓝牙开关按钮有时已配对设备信息会丢失问题分析
·
1. 问题描述
问题现象
进入鸿蒙系统,设置-->蓝牙,用户频繁点击开、关蓝牙按钮时,已配对的设备信息会被删除。
问题特征
• 问题概率: 2/10
• 触发条件:频繁点击开、关蓝牙按钮
2. 分析过程
2.1 问题根因分析
1)问题仅在关闭蓝牙时正好有加密操作在进行的情况下触发。并且hilog日志有:"Ble encryption failed!"的输出。日志如下(hilog.001.20251219-140303):
2)事件时序为:用户关闭蓝牙 → 本地连接断开 → 正在进行的加密操作被中断 → 上报 EncryptionChangeEvent,status=0x3e → GapEncryptionComplete 删除配对信息。
3)根本原因在于 GapEncryptionComplete 函数逻辑缺陷,将所有非成功(status==0)的加密状态都视为加密失败,未区分其他状态。
2.2 关键错误码(status)分析
0x16:本地主机终止连接(不应删除配对)
0x3e:连接建立失败(不应删除配对)
3. 解决方案
3.1 代码修复方案
通过修改 BleSecurity::GapEncryptionComplete 函数,细化状态码判断逻辑.
3.2 修改代码
foundation\communication\bluetooth_service\services\bluetooth\service\src\ble\ble_security.cpp

3.3 应用层修改
蓝牙开、关动作不能过于频繁,需要等待上一个操作完成,才可以继续下一个操作。
更多推荐
所有评论(0)