Web蓝牙应用扫描获取设备manufacturer data功能实现咨询
Web蓝牙扫描获取厂商自定义广播数据实现方案
结论
完全可以实现扫描指定蓝牙设备并获取其manufacturer data(厂商自定义广播数据)的功能,你使用官方示例无法拿到对应数据的核心原因是示例的扫描配置未声明厂商数据过滤规则,受Web蓝牙的权限限制,浏览器默认不会返回未明确申请的厂商数据。
实现要求与步骤
- 首先确认运行环境符合要求:仅Chrome 89及以上版本支持蓝牙广播扫描API,且页面必须运行在HTTPS协议下,本地调试可使用localhost豁免HTTPS要求
- 扫描配置必须明确声明你需要监听的目标设备厂商ID,示例代码如下:
// 以Ruuvi标签为例,其官方厂商ID为0x0499,替换为你目标设备的对应ID即可 const scanConfig = { filters: [ { namePrefix: "Ruuvi", // 必须添加该配置,声明要获取的厂商ID,才能拿到对应广播数据 manufacturerData: [ { companyIdentifier: 0x0499 } ] } ] } // 发起扫描请求,会触发用户授权弹窗 const bleScanner = await navigator.bluetooth.requestLEScan(scanConfig); // 监听广播接收事件,解析厂商数据 navigator.bluetooth.addEventListener("advertisementreceived", (event) => { // 读取对应厂商ID的广播数据,返回为DataView类型 const targetManufacturerData = event.manufacturerData.get(0x0499); if (targetManufacturerData) { // 可根据目标设备的厂商数据协议自行解析二进制内容 const dataBytes = new Uint8Array(targetManufacturerData.buffer); console.log("获取到的厂商广播数据:", dataBytes); } })
- 若需要扫描多个不同厂商的设备,可在
manufacturerData数组中添加多个厂商ID配置项即可 - 扫描过程中如果需要停止扫描,调用
bleScanner.stop()即可
注意事项
- 目标设备的厂商ID为16位数值,需要提前从设备官方文档获取,填错会导致无法过滤到对应设备,也无法拿到厂商数据
- 不需要连接设备即可获取广播数据,无需额外配置连接相关参数
内容的提问来源于stack exchange,提问作者TLS.4ever
相关产品推荐
相关产品推荐

