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等顶层数据,特征属于服务的子属性,必须完成设备连接后才能获取,步骤如下:
- 使用
connectToDevice方法连接目标设备 - 连接成功后调用
discoverServices方法获取设备的服务列表 - 从目标服务中提取特征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
相关产品推荐
相关产品推荐

