1. 与安卓手机配对连接

设备名称:Honor 5C

安卓版本:Android 6.0

系统版本:EMUI 4.1.3

测试结果:配对完成后,开发者手机上该设备显示在'已配对的设备'列表中,没有'已连接'标识,如下图所示

 点击已配对的设备列表中的 'Honor 5C' 手动连接该设备,弹出连接失败的信息框。

在Honor 5C手机上开发者手机也显示在已配对的设备列表里面,没有'已连接'的标识。

 

 问题分析:通过snoop日志分析,开发者手机向Honor 5C发起SDP请求,查询 Audio Sink 和 HID 服务,Honor 5C回复的SDP响应包中数据域为0,即空数据。

可以看到回复的SDP响应包长度为19字节,展开协议解析 这个长度 就是说明数据域为空,Data Value: MISSING 。

 

没有有效的服务可用,没有建立任何的L2cap连接,因此发送了断开ACL链路的指令。

即使再点击 连接,SDP也同样查询不到任何服务,无法建立 L2cap连接,就提示连接失败。

 

2. 与苹果手机配对连接

设备名称:iPhone SE

系统版本:IOS 17.4.1

测试结果:配对完成后,开发者手机上该设备显示在'已配对的设备'列表中,且一直'正在连接'标识,如下图所示

 

大概持续1分钟左右,'正在连接'标识消失,弹出连接失败的信息框。

 之后 就一直在 '已配对的设备'列表中,而在IPhone手机上,开发者手机在'我的设备'列表栏里,显示'未连接'。

 

问题分析:通过snoop日志分析,开发者手机向iPhone发起SDP请求,查询 Audio Sink 和 HFP, HSP 服务,IPhone回复的SDP响应包中Audio Sink和Headset 的数据包长度为19字节,前面说过这个长度表就是说明数据域为空,Data Value: MISSING 。即空数据。

而HFP的响应包长度为68字节,说明有数据,而下面马上就建立了RFCOMM的连接,也证明了这一点,此时有一条RFCOMM的连接,所以开发者手机上一直显示 '正在连接'的标识 。

 可以看到RFCOMM连接建立的时间为 02:25:52 ,通过下面的日志可以看到断开RFCOMM的时间为 02:26:54 ,中间大约为1分钟,苹果手机会主动断开RFCOMM连接,此时开发者手机断开ACL链路后,开发者手机上的'正在连接'的标识就会消失,并提示'连接失败'的信息框。

 

3. 与PC配对连接

设备名称:DESKTOP-FP4T385

系统版本:windows 11 21H2

测试结果:配对完成后,开发者手机上该设备显示在'已配对的设备'列表中,且一直'正在连接'标识,如下图所示,

且等待了很久,'正在连接'的标识不会消失。

 而在PC端上显示的是'已连接',如下图所示:

 

 问题分析:通过snoop日志分析,开发者手机向PC发起SDP请求,查询 Audio Sink 和 HFP, HSP,HID 服务,PC回复的SDP响应包中Audio Sink和HFP 的数据包有数据 ,而Headset包里数据域为空,HID回应的Error Response。

 可以看到,由于Audio Sink的SDP响应包里有数据, 发起了创建AVDTP连接的请求,而PC端回复了Refused的响应包;所以avdtp的连接没有创建成功。

由于HFP的SDP响应包里有数据 ,发起了创建RFCOMM的连接请求,此连接也已经创建成功。

观察 两小时,此RFCOMM连接仍然存在,没有断开。PC端上一直显示已连接,开发者手机上也一直显示'正在连接',snoop日志里也没有断开RFCOMM连接的操作。

 

4.总结

根据与以上各种副设备配对并连接和现象来看,

1. 如果没有创建任何的L2cap连接,则两端都不显示'已连接', 只显示在各自的已配对设备列表中,且再点击连接时,会弹出 '连接失败'的信息框。(安卓)

2.如果只创建了一条RFCOMM连接,开发者手机上会一直显示'正在连接'的标识 ,除非对端能主动断开RFCOMM连接,(苹果大概1分钟后会主动断开RFCOMM连接),断开RFCOMM连接后,'正在连接'的标识消失并提示连接失败信息框。如果不会主动断开RFCOMM连接,则开发者手机一直显示'正在连接'的标识。(PC)

Logo

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

更多推荐