0

最近,我正在尝试通过 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);
  });
}
4

0 回答 0