You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在Flutter项目中用flutter_reactive_ble指定UUID无法扫描iBeacon?

问题解决:flutter_reactive_ble指定UUID无法扫描iBeacon

核心原因

iBeacon的广播机制和普通BLE设备不同,它不会广播服务UUID,而是将标识信息封装在厂商自定义数据段(苹果厂商ID为0x004C)中。因此通过withServices参数指定UUID进行过滤,根本匹配不到iBeacon设备。

正确实现方式

保持withServices: []进行全量扫描,然后在onDeviceFound回调中手动解析设备的厂商数据,筛选出iBeacon设备:

_subscription = await FlutterReactiveBle().scanForDevices(
  withServices: [],
  scanMode: ScanMode.lowLatency,
  requireLocationServicesEnabled: true,
).listen((device) {
  // 解析厂商数据,判断是否为iBeacon
  final manufacturerData = device.manufacturerData;
  if (manufacturerData != null && manufacturerData.containsKey(0x004C)) {
    final data = manufacturerData[0x004C]!;
    // 验证iBeacon标准数据格式(至少23字节,前两位为0x02、0x15)
    if (data.length >= 23 && data[0] == 0x02 && data[1] == 0x15) {
      // 此处处理匹配到的iBeacon设备
      print("发现iBeacon设备: ${device.name}");
      onDeviceFound(device);
    }
  }
}, onError: onError);

补充说明

  • iBeacon标准数据结构:前2字节固定为0x02(帧类型)和0x15(数据长度),后续依次是16字节UUID、2字节主值、2字节次值、1字节信号校准值。
  • 若你的iBeacon使用了自定义厂商ID,需将代码中的0x004C替换为对应厂商ID。

内容的提问来源于stack exchange,提问作者Anirudh Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 23:25:19