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