Web Bluetooth调用requestDevice报值无法转换为序列错误如何解决
问题根因
报错和你填写的UART Service UUID正确性无关,是参数类型不符合Web Bluetooth API的规范要求:optionalServices字段要求传入UUID组成的数组(序列类型),你的代码里直接把单个UUID字符串赋值给了这个字段,字符串无法被转换为API要求的序列结构,因此抛出类型错误。从你打印的options日志也能验证问题:"optionalServices":"6e400001-b5a3-f393-e0a9-e50e24dcca9e"对应值是字符串,不是数组。
修复方案
将需要声明的可选服务放在数组中再赋值给optionalServices即可,修改对应代码片段:
if (document.querySelector('#allDevices').checked) { options.acceptAllDevices = true; // 即使只需要声明1个服务,也必须用数组包裹 options.optionalServices = [UARTService]; } else { options.filters = filters; // 非全设备模式下如果也要访问UART服务,同样要注意services/optionalServices字段传数组格式的UUID列表 }
注意:Web Bluetooth API中所有声明服务、特征值列表的参数(包括筛选规则里的
services字段、optionalServices字段),都要求传入数组类型,哪怕只有1个UUID需要声明,也不能直接传字符串值。
内容的提问来源于stack exchange,提问作者ugmurthy
相关产品推荐
相关产品推荐

