Commit 0611ffc4 authored by 18600395998's avatar 18600395998

添加蓝牙读写功能

parent a7e09934
......@@ -12,6 +12,14 @@ import '../models/dict_entity.dart';
import '../models/user_model.dart';
class BleService extends GetxService {
// 添加一个 StreamController
final _readController = StreamController<List<int>>();
Stream<List<int>> get readStream => _readController.stream;
// 添加一个标志,用于控制读取循环是否应该继续
bool _shouldContinueReading = false;
static BleService get to => Get.find();
var isScanning = false.obs;
......@@ -104,18 +112,87 @@ class BleService extends GetxService {
connection.listen((update) async {
// 如果连接状态为 connected,则显示连接成功的提示
if (update.connectionState == DeviceConnectionState.connected) {
// 发现服务和特性
final services = await ble.discoverServices(device.id);
for (final service in services) {
print('Discovered service ${service.serviceId}');
for (final characteristic in service.characteristics) {
print('Discovered characteristic ${characteristic.characteristicId} of service ${service.serviceId}');
}
}
// 设置最大传输单元
await ble.requestMtu(deviceId: device.id, mtu: 512);
await Future.delayed(Duration(seconds: 1)); // 添加延迟
deviceStatus.value = 'Connected'; // 更新设备的连接状态
Get.snackbar('Connected', 'Connected to ${device.name}');
// Navigator.of(context).pop();
// 关闭对话框
DialogUtils.dismissDialog();
} else {
deviceStatus.value = 'Disconnected'; // 更新设备的连接状态
}
});
}
// 读取数据
Future<List<int>> readData(Uuid serviceUuid, Uuid characteristicUuid) async {
if (selectedDevice.value == null) {
throw Exception('No device connected');
}
final characteristic = QualifiedCharacteristic(
deviceId: selectedDevice.value!.id,
serviceId: serviceUuid,
characteristicId: characteristicUuid,
);
final result = await ble.readCharacteristic(characteristic);
return result;
}
// 写入数据
Future<void> writeData(Uuid serviceUuid, Uuid characteristicUuid, List<int> data) async {
if (selectedDevice.value == null) {
throw Exception('No device connected');
}
final characteristic = QualifiedCharacteristic(
deviceId: selectedDevice.value!.id,
serviceId: serviceUuid,
characteristicId: characteristicUuid,
);
await ble.writeCharacteristicWithResponse(characteristic, value: data);
}
// 启动循环读取数据
Future<void> startReading(Uuid serviceUuid,Uuid characteristicUuid) async {
_shouldContinueReading = true;
while (_shouldContinueReading) {
// 读取数据
final data = await readData(serviceUuid,characteristicUuid);
// 将数据添加到 Stream 中
_readController.add(data);
// 等待一段时间,然后再次读取数据
await Future.delayed(Duration(seconds: 1));
}
}
// 停止循环读取数据
void stopReading() {
_shouldContinueReading = false;
}
@override
void onClose() {
_readController.close();
super.onClose();
}
// 检查权限
Future<bool> requestBlePermissions() async {
var isLocationGranted = await Permission.locationWhenInUse.request();
......@@ -135,4 +212,7 @@ class BleService extends GetxService {
isBleConnectGranted == PermissionStatus.granted &&
isBleAdvertiseGranted == PermissionStatus.granted;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment