From 18daaf557a43d1d85aa9b6e8f0dbd3fefbafafca Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Wed, 16 Jul 2025 14:52:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0ble=E8=93=9D=E7=89=99?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/data/services/ble_manager.dart | 9 +++++ .../controllers/pairing_controller.dart | 40 ++++++++++++++----- .../Sources/ble_service/BleService.swift | 11 ++++- .../ble_service/SwiftBleServicePlugin.swift | 5 ++- 4 files changed, 53 insertions(+), 12 deletions(-) diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index 329604300..96bea2fc6 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -782,6 +782,15 @@ class BleManager extends GetxService { } } + /// 验证设备是否可以配对 + Future stopScan() async { + try { + await _bleService.stopScan(); + } catch (e) { + Logger.error('停止扫描设备: ${e.toString()}'); + } + } + Future?> getDeviceInfo(String deviceName) async { try { final result = _bleService.getDeviceInfo(deviceName); diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index 406100f5b..5bc7667b6 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -487,7 +487,7 @@ class PairingController extends GetxController { //连接ble Future connectble(BluetoothDevice device) async { Logger.i(_tag, '设备验证通过'); - _verifiedDeviceAddress = device.address; + // _verifiedDeviceAddress = device.address; // 检查是否已有BLE关联 final pairedMacAddress = await _bleManager.getPairedMacAddress(); Logger.i(_tag, '已关联的MAC地址: $pairedMacAddress'); @@ -588,8 +588,8 @@ class PairingController extends GetxController { //自动绑定设备 0 未合作商 1 合作商 2,已绑定 Future authbindingDevice(BluetoothDevice device) async { - // 检查是否已经绑定 - if (User.instance.earphonemac == device.address) { + if (User.instance.earphoneauthcode != "" && + User.instance.earphonemac == device.address) { // 已经绑定 return 9; } @@ -625,17 +625,39 @@ class PairingController extends GetxController { code = extractAndReverseBytes(hexData, 13, 22); print('找到匹配设备,获取到 code: $code'); if (code != "") { + _bleManager.stopScan(); deviceCode.value = code; - return 1; + String? uuids = deviceInfo["id"]; + _verifiedDeviceAddress = uuids; + print('找到匹配设备,获取到 uuids: $uuids'); + // 检查是否已经绑定 + if (User.instance.earphonelicense != "" && + User.instance.earphonemac == device.address) { + // 已经绑定 + return 10; + } else { + return 1; + } } } else if (Platform.isAndroid) { // Android设备,提取15-24字节的授权码 code = extractAndReverseBytes(hexData, 15, 24); - } - print('找到匹配设备,获取到 code: $code'); - if (code != "") { - deviceCode.value = code; - return 1; + print('找到匹配设备,获取到 code: $code'); + if (code != "") { + _bleManager.stopScan(); + deviceCode.value = code; + _verifiedDeviceAddress = device.address; + // 检查是否已经绑定 + if (User.instance.earphonelicense != "" && + User.instance.earphonemac == device.address) { + // 已经绑定 + return 10; + } else { + return 1; + } + } + } else { + break; } } } diff --git a/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift b/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift index 8a0199956..e27a14f95 100644 --- a/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift +++ b/local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift @@ -175,6 +175,14 @@ public class BleService: NSObject { os_log("未找到已配对设备UUID", log: logger, type: .info) return nil } + /// 保存配对设备的UUID + /// - Parameter uuid: 要保存的设备UUID + func savePairedMacAddress(_ uuid: UUID) { + let uuidString = uuid.uuidString + UserDefaults.standard.set(uuidString, forKey: pairedDeviceUUIDKey) + UserDefaults.standard.synchronize() + os_log("已保存配对设备UUID: %{public}@", log: logger, type: .info, uuidString) + } /// 清除已保存的配对设备UUID private func clearPairedMacAddress() { UserDefaults.standard.removeObject(forKey: pairedDeviceUUIDKey) @@ -245,11 +253,12 @@ public class BleService: NSObject { os_log("❌ CBCentralManager未初始化", log: logger, type: .error) return false } - + os_log("连接设备UUID: %@", log: logger, type: .error, uuid) // 先尝试从已知外设中获取 let knownPeripherals = manager.retrievePeripherals(withIdentifiers: [deviceUUID]) if let peripheral = knownPeripherals.first { connectPeripheral(peripheral) + savePairedMacAddress(deviceUUID) return true } diff --git a/local_plugins/ble_service/ios/ble_service/Sources/ble_service/SwiftBleServicePlugin.swift b/local_plugins/ble_service/ios/ble_service/Sources/ble_service/SwiftBleServicePlugin.swift index 135da4a4b..c9d6b2609 100644 --- a/local_plugins/ble_service/ios/ble_service/Sources/ble_service/SwiftBleServicePlugin.swift +++ b/local_plugins/ble_service/ios/ble_service/Sources/ble_service/SwiftBleServicePlugin.swift @@ -145,8 +145,9 @@ public class SwiftBleServicePlugin: NSObject, FlutterPlugin { let arguments = call.arguments as? [String: Any] let deviceNamePattern = (arguments?["deviceNamePattern"] as? String) ?? "" let serviceUuid = (arguments?["serviceUuid"] as? String) ?? "" - let macAddress = (arguments?["macAddress"] as? String) ?? "" - + let uuids = (arguments?["macAddress"] as? String) ?? "" + let success = BleService.shared.connectToDevice(uuid: uuids) + result(success) case "connectToDevice": let arguments = call.arguments as? [String: Any]