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

flutter_reactive_ble:如何从扫描所得DiscoveredDevice获取三类ID

关于flutter_reactive_ble获取设备ID、服务ID和特征ID的方法

1. 获取DeviceId(设备ID)

直接读取DiscoveredDevice对象的id属性即可,对应你扫描结果里的F0EC76B3-7C7D-2460-5AFA-8F1B586E1849。示例代码:

DiscoveredDevice scannedDevice = // 你的扫描返回对象
String deviceId = scannedDevice.id;

2. 获取ServiceId(服务ID)

扫描结果的serviceUuids字段存储了设备广播的服务UUID列表,你这里的结果是[feb9],直接读取即可:

List<String> broadcastedServiceUuids = scannedDevice.serviceUuids;
// 取列表中的第一个服务ID
String targetServiceId = broadcastedServiceUuids.first; // 结果为"feb9"

注意:这里的是短格式UUID,实际BLE通信中可能需要补全为标准128位UUID(比如按照BLE规范补全为0000feb9-0000-1000-8000-00805f9b34fb)。

3. 获取CharacteristicId(特征ID)

扫描阶段无法直接获取特征ID,因为BLE扫描仅广播设备基础信息、服务UUID等顶层数据,特征属于服务的子属性,必须完成设备连接后才能获取,步骤如下:

  1. 使用connectToDevice方法连接目标设备
  2. 连接成功后调用discoverServices方法获取设备的服务列表
  3. 从目标服务中提取特征ID

示例代码:

// 初始化连接
final connection = flutterReactiveBle.connectToDevice(id: deviceId);

// 监听连接状态,连接成功后发现服务
connection.listen((connectionState) async {
  if (connectionState == DeviceConnectionState.connected) {
    // 获取设备所有服务
    List<DiscoveredService> deviceServices = await flutterReactiveBle.discoverServices(deviceId);
    for (var service in deviceServices) {
      // 匹配目标服务(以feb9为例)
      if (service.serviceId.toString().contains('feb9')) {
        // 提取该服务下的所有特征ID
        List<Uuid> characteristicIds = service.characteristics.map((c) => c.characteristicId).toList();
        // 按需处理特征ID,比如取第一个
        Uuid targetCharId = characteristicIds.first;
      }
    }
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 03:42:14