From 773b2e2c29c25c31985979d932f7fd87c2cc9548 Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Wed, 16 Jul 2025 13:05:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Podfile.lock | 4 +- .../agent_service/AgentServiceImpl.swift | 2 +- .../Sources/ble_service/BleService.swift | 41 ++++++++++++------- .../ble_service/SwiftBleServicePlugin.swift | 23 +++++++++++ .../ble_service/lib/ble_service.dart | 11 +++++ 5 files changed, 64 insertions(+), 17 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 63f38bd9d..77f53258d 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -85,7 +85,7 @@ PODS: - SDWebImage/Core (~> 5.17) - spotify_sdk (0.0.1): - Flutter - - tencentcloud_cos_sdk_plugin (1.2.3): + - tencentcloud_cos_sdk_plugin (1.2.4): - Flutter - QCloudCOSXML (= 6.4.7) - WechatOpenSDK-XCFramework (2.0.4) @@ -203,7 +203,7 @@ SPEC CHECKSUMS: SDWebImage: f29024626962457f3470184232766516dee8dfea SDWebImageWebPCoder: e38c0a70396191361d60c092933e22c20d5b1380 spotify_sdk: a48400bb29f70c4fe251ebfdc9135c37097ac5ca - tencentcloud_cos_sdk_plugin: c3d78b2c3bae42b5a20009dc047f3f1621e6272b + tencentcloud_cos_sdk_plugin: 7bed564dbe72df23e7b5cacb1e51b1a20cb1639c WechatOpenSDK-XCFramework: 36fb2bea0754266c17184adf4963d7e6ff98b69f wifi_iot: f645260a2be8608517b2a9bf4c39b98e97003acc diff --git a/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift b/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift index fd90f7047..78e299cf2 100644 --- a/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift +++ b/local_plugins/agent_service/ios/agent_service/Sources/agent_service/AgentServiceImpl.swift @@ -207,7 +207,7 @@ class AgentServiceImpl: NSObject { return false } guard let asrsetupSuccess = azureAsrHelper?.setupEventListeners( - callback: self, + callback: self ), asrsetupSuccess else { sendError("初始化语音识别服务失败", code: "ASR_INIT_ERROR") return false 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 5e78731c1..8a0199956 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 @@ -46,6 +46,8 @@ public class BleService: NSObject { private var isScanning = false private var scanTimer: Timer? + // 用于存储配对设备UUID的UserDefaults键 + private let pairedDeviceUUIDKey = "com.yunqiinnovation.ble_service.paired_device_uuid" // 新增:设备缓存和广播数据记录 private var discoveredDevices: [String: [String: Any]] = [:] // 以设备ID为key的设备信息缓存 private var deviceAdvertisementData: [String: [String: Any]] = [:] // 设备广播数据缓存 @@ -164,6 +166,27 @@ public class BleService: NSObject { return centralManager! } + func getPairedMacAddress() -> String? { + let uuidString = UserDefaults.standard.string(forKey: pairedDeviceUUIDKey) + if let uuidString = uuidString, !uuidString.isEmpty { + os_log("获取已配对设备UUID: %{public}@", log: logger, type: .info, uuidString) + return uuidString + } + os_log("未找到已配对设备UUID", log: logger, type: .info) + return nil + } + /// 清除已保存的配对设备UUID + private func clearPairedMacAddress() { + UserDefaults.standard.removeObject(forKey: pairedDeviceUUIDKey) + UserDefaults.standard.synchronize() + os_log("已清除配对设备UUID", log: logger, type: .info) + } + // MARK: - 清除配对关系 + func clearAssociations() { + resetBluetoothState() + // 清除保存的配对设备UUID + clearPairedMacAddress() + } /// 开始扫描BLE设备 public func startScan(timeout: TimeInterval = 30.0) -> Bool { if centralManager == nil { @@ -208,20 +231,6 @@ public class BleService: NSObject { isScanning = false scanTimer?.invalidate() scanTimer = nil - -// let deviceCount = discoveredDevices.count -// os_log("⏹️ 停止BLE扫描,共发现 %d 个设备", log: logger, type: .info, deviceCount) -// -// // 打印所有发现的设备摘要 -// if deviceCount > 0 { -// os_log("📋 扫描结果摘要:", log: logger, type: .info) -// for (index, deviceInfo) in discoveredDevices.values.enumerated() { -// if let name = deviceInfo["name"] as? String, -// let rssi = deviceInfo["rssi"] as? Int { -// os_log("📋 %d. %{public}@ (RSSI: %d)", log: logger, type: .info, index + 1, name, rssi) -// } -// } -// } } } @@ -417,6 +426,10 @@ public class BleService: NSObject { // MARK: - 回调通知方法 + //清除蓝牙状态(仅用于测试或重置,不会清除系统授权) + func resetBluetoothState() { + + } /// 通知所有回调扫描结果 private func notifyScanResult(devices: [[String: Any]]) { for callback in callbacks { 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 c602bb7fa..135da4a4b 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 @@ -124,6 +124,29 @@ public class SwiftBleServicePlugin: NSObject, FlutterPlugin { os_log("🔍 查询设备信息,deviceName: %s", log: logger, type: .info, deviceName) let info = BleService.shared.getDeviceAdvertisementData(deviceName: deviceName) result(info) + case "isCompanionSupported": + #if canImport(AccessorySetupKit) && swift(>=5.9) + if #available(iOS 18.0, *) { + result(true) + } else { + result(false) + } + #else + result(false) + #endif + + case "getPairedMacAddress": + let pairedUUID = BleService.shared.getPairedMacAddress() + result(nil) + case "clearAssociations": + BleService.shared.clearAssociations() + result(true) + case "startDeviceAssociation": + 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) ?? "" + case "connectToDevice": let arguments = call.arguments as? [String: Any] diff --git a/local_plugins/ble_service/lib/ble_service.dart b/local_plugins/ble_service/lib/ble_service.dart index 5a384bfc1..3cfb0954d 100644 --- a/local_plugins/ble_service/lib/ble_service.dart +++ b/local_plugins/ble_service/lib/ble_service.dart @@ -293,6 +293,17 @@ class BleService { } } + /// 断开连接 + Future stopScan() async { + try { + final result = await _methodChannel.invokeMethod('stopScan'); + return result ?? false; + } catch (e) { + print('开启扫描ble设备失败: $e'); + return false; + } + } + /// 获取设备信息 Future?> getDeviceInfo(String deviceName) async { try {