问题描述
1.设备已烧录版本
2.设备已与苹果蓝牙耳机连接成功

【测试步骤】
1.进入蓝牙设置页面,在“已配对”列表中,点击苹果耳机后面的设置图标,点击“取消配对”

【预期结果】
1.苹果耳机蓝牙设备名称在“已配对”列表中消失,无异常提示弹窗

【实际结果】
1.设备弹出“配对失败”弹窗

问题分析

通过蓝牙hci 日志分析,

142508.850开始 首次创建蓝牙连接。

142518.474开始断开了所有的l2cap层连接。

142520.361,用户重新点击连接。

142522.966 用户点了取消配对。

142524.430蓝牙acl 重新连接,打开了avrcp连接

1425756 认证失败。弹出配对失败。

 

log异常

log看,存在多处异常。

1142518.474开始断开了所有的l2cap层连接,断开之后,应该马上断开acl链路。因为没有profile 业务的连接。

2142524.430蓝牙acl 重新连接,打开了avrcp连接,这个地方不应该自动发起连接。

 

js代码分析

弹出异常弹窗是由于下面接口

检测到

cancelPairFlag

变量发生改变。并且if 条件满足。

controlPairing

发生默认是1

赋值接口

通过bond状态。

第一个状态满足。

pairDialog =null

所以问题是下层,为啥传递绑定状态0

 

下层分析:

avrcp ct流程看,

142520.925  开启了avrcp 的连接。开启一个4s定时器。导致连接断开之后,又重新连接。

修改方案:

弹窗问题:

做取消配对之后,需要关闭avrcp 4s定时器。

风险:取消配对属于gap层,无法管理avrcp profile

acl无法断开问题

方案1

仿照安卓,打开sdp,查询一个sdp属性之后,没有其他request,直接断开sdp l2cap连接而不是延时4s

风险:存在时序问题。打开sdp查询完毕之后,在第一个profile 还没有连接上,可能会导致acl 断开,表现现象为连接不上。

方案2

沿袭原来blueh sdp的流程设计,每次断开一个profile 之后,断开已存在的sdp l2cap 连接。

 

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐