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

如何在flutter_reactive_ble中实现BLE连接丢失后自动重连?

在flutter_reactive_ble中实现BLE设备连接丢失自动重连

当然可行,以下是具体实现思路和代码示例:

核心思路

通过监听设备的连接状态流,当检测到连接丢失(DeviceConnectionState.disconnected)时,触发重连逻辑,同时处理重试间隔、次数限制等边界情况。

具体实现步骤

  • 监听连接状态:利用flutter_reactive_ble提供的connectionStateStream实时获取设备连接状态。当状态变为disconnected时,启动重连流程。
  • 实现重连逻辑:封装重连函数,使用延迟重试避免频繁消耗资源,可设置最大重试次数,超过后停止重试或提示用户。
  • 处理平台差异:注意iOS和Android的BLE连接机制差异,比如Android的扫描限制、iOS的后台蓝牙权限,确保重连逻辑在双平台正常工作。

代码示例

import 'dart:async';
import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';

final flutterReactiveBle = FlutterReactiveBle();
StreamSubscription<DeviceConnectionState>? _connectionSubscription;
String targetDeviceId = "你的设备ID";
int _retryCount = 0;
final int _maxRetries = 5;
final Duration _retryInterval = const Duration(seconds: 3);

// 初始化连接监听
void initConnectionListener() {
  _connectionSubscription = flutterReactiveBle
      .connectionStateStream(
        deviceId: targetDeviceId,
        connectionTimeout: const Duration(seconds: 10),
      )
      .listen((state) {
    switch (state.connectionState) {
      case DeviceConnectionState.connected:
        _retryCount = 0; // 连接成功,重置重试次数
        print("设备已连接");
        break;
      case DeviceConnectionState.disconnected:
        print("连接丢失,尝试重连");
        _attemptReconnect();
        break;
      default:
        break;
    }
  });
}

// 重连逻辑
void _attemptReconnect() {
  if (_retryCount >= _maxRetries) {
    print("已达到最大重试次数,停止重连");
    // 此处可添加用户提示逻辑
    return;
  }

  _retryCount++;
  Timer(_retryInterval, () async {
    try {
      await flutterReactiveBle.connectToDevice(
        id: targetDeviceId,
        connectionTimeout: const Duration(seconds: 10),
      );
    } catch (e) {
      print("第$_retryCount次重连失败: $e");
      _attemptReconnect(); // 失败后继续重试
    }
  });
}

// 页面销毁时取消订阅
void dispose() {
  _connectionSubscription?.cancel();
}

额外注意事项

  • 权限配置:确保在AndroidManifest.xml和Info.plist中配置必要蓝牙权限(Android的BLUETOOTH_CONNECT、BLUETOOTH_SCAN;iOS的NSBluetoothAlwaysUsageDescription)。
  • 后台重连:若需后台重连,需配置对应后台模式(iOS开启蓝牙后台模式,Android配置后台服务)。
  • 避免无限重试:设置最大重试次数,防止设备离线导致的无限重试,同时提供手动重连入口给用户。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 15:50:29