flutterblueplus.onscanresults.listen如何解决扫描到断电设备的问题

在使用flutterblueplus.onscanresults.listen时,发现会扫描到已经断电的蓝牙设备,导致列表中出现无效设备。请问如何过滤这些断电设备?扫描结果中是否有字段可以判断设备是否在线?或者有没有其他方法可以避免显示已断电的设备?

2 回复

使用scanResults时,在listen回调中过滤设备。检查设备是否包含服务数据或制造商数据,避免连接已断电的设备。可设置超时机制,若设备长时间无广播则视为断开。

更多关于flutterblueplus.onscanresults.listen如何解决扫描到断电设备的问题的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 FlutterBluePlus 中,当扫描到蓝牙设备断开连接时,可以通过以下方法处理:

解决方案

1. 监听扫描结果并过滤设备

FlutterBluePlus.scanResults.listen((results) {
  for (ScanResult result in results) {
    // 检查设备是否连接或可连接
    if (result.device.connectionState == DeviceConnectionState.disconnected) {
      // 处理断开连接的设备
      print('发现断开设备: ${result.device.localName}');
      
      // 可选:重新连接逻辑
      // await result.device.connect();
    }
  }
});

2. 使用设备状态监听器

// 监听特定设备连接状态变化
result.device.connectionState.listen((state) {
  if (state == DeviceConnectionState.disconnected) {
    print('设备已断开: ${result.device.localName}');
    // 执行重连或其他处理逻辑
  }
});

3. 完整的扫描处理示例

void startScanning() {
  FlutterBluePlus.scanResults.listen((results) {
    for (ScanResult result in results) {
      // 过滤断开连接的设备
      if (result.device.connectionState == DeviceConnectionState.disconnected) {
        handleDisconnectedDevice(result.device);
      }
    }
  });
  
  FlutterBluePlus.startScan(timeout: Duration(seconds: 10));
}

void handleDisconnectedDevice(BluetoothDevice device) {
  print('处理断开设备: ${device.localName}');
  
  // 根据需求选择:
  // 1. 忽略断开设备
  // 2. 尝试自动重连
  // 3. 更新UI显示断开状态
}

4. 重连策略(可选)

Future<void> reconnectDevice(BluetoothDevice device) async {
  try {
    await device.connect();
    print('设备重连成功');
  } catch (e) {
    print('重连失败: $e');
  }
}

关键点

  • 使用 connectionState 检查设备连接状态
  • 根据业务需求决定是否自动重连
  • 建议添加重连次数限制和延迟,避免频繁重连

这样可以有效处理扫描过程中发现的断开连接设备。

回到顶部