如何解决无法在 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 举报,一经查实,本站将立刻删除。