无法在 Workmanager 中使用 flutter_reactive_ble 插件

如何解决无法在 Workmanager 中使用 flutter_reactive_ble 插件

最近,我试图通过 BLE 将我的 Flutter 应用程序与 Arduino 设备连接起来。我使用 Flutter_reactive_ble 插件来处理 BLE 连接,并使用 workmanager 插件后台处理周期性任务。我将 BLE 扫描和连接放在回调调度程序中。在回调调度器中初始化 FlutterReactiveBle 后,我可以获得更新的 BLE 状态。状态未知。

然而,其余的 BLE 代码似乎不起作用,因为在块内没有执行任何打印语句。似乎工作经理在没有等待功能扫描和连接的情况下运行代码。我该如何解决这个问题?我已经被困了好几天了。

void callbackdispatcher() {
  Workmanager().executeTask((task,inputData) async {
    switch (task) {
      case simplePeriodicTask:

        Uuid serviceID = Uuid.parse('1101');
        Uuid characteristicsID = Uuid.parse('2101');

        final FlutterReactiveBle _ble = FlutterReactiveBle();
        StreamSubscription? _subscription;
        StreamSubscription<ConnectionStateUpdate>? _connection;

        void _disconnect() async {
          if (_subscription != null) {
            _subscription!.cancel();
          }
        }

        Future<void> _connectBLE() async {
          print(_ble.status);
          _subscription = _ble.scanForDevices(
              withServices: [serviceID],scanMode: ScanMode.lowLatency,requireLocationServicesEnabled: false).listen((device) {
            print(device.name);
            if (device.name == 'PersonDetection') {
              print('PersonDetection found!');
              _connection = _ble
                  .connectToDevice(
                id: device.id,connectionTimeout: const Duration(seconds: 5),)
                  .listen((connectionState) async {
                // Handle connection state updates
                print(device.name);
                print(device.id);
                print('connection state:');
                print(connectionState.connectionState);
                if (connectionState.connectionState ==
                    DeviceConnectionState.connected) {
                  final characteristic = QualifiedCharacteristic(
                      serviceId: serviceID,characteristicId: characteristicsID,deviceid: device.id);
                  final response = await _ble.readCharacteristic(characteristic);
                  print(response);
                  _disconnect();
                  print('disconnected');
                }
              },onError: (dynamic error) {
                // Handle a possible error
                print(error.toString());
              });
            }
          },onError: (error) {
            print('error!');
            print(error.toString());
          });
        }
        _connectBLE();
        break;
    }
    return Future.value(true);
  });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?