import Flutter import UIKit @main @objc class AppDelegate: FlutterAppDelegate { private var classicBluetoothHelper: ClassicBluetoothHelper? private var mediaButtonHelper: Any? override func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { // 初始化蓝牙辅助类 classicBluetoothHelper = ClassicBluetoothHelper() // 立即初始化蓝牙,不要等待Flutter调用 classicBluetoothHelper?.initBluetooth() // 仅在iOS 13.0及以上版本初始化媒体按钮辅助类 if #available(iOS 13.0, *) { mediaButtonHelper = BluetoothMediaButtonHelper() } // 建立Flutter方法通道 registerMethodChannel() GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } private func registerMethodChannel() { let controller = window?.rootViewController as? FlutterViewController guard let controller = controller else { NSLog("AppDelegate: FlutterViewController 不可用") return } // 注册经典蓝牙通道 let classicChannel = FlutterMethodChannel( name: "com.deep_voice.classic_bluetooth", binaryMessenger: controller.binaryMessenger ) classicChannel.setMethodCallHandler { [weak self] (call, result) in guard let self = self else { result(FlutterError(code: "UNAVAILABLE", message: "AppDelegate实例不可用", details: nil)) return } switch call.method { case "isBluetoothEnabled": result(self.classicBluetoothHelper?.isBluetoothEnabled() ?? false) case "getConnectedHeadsetDevices": // 获取已连接的耳机设备 self.classicBluetoothHelper?.getConnectedHeadsetDevices { devices, error in if let error = error { result(FlutterError(code: "GET_DEVICES_FAILED", message: error, details: nil)) } else { result(devices) } } case "startBluetoothDeviceMonitoring": // 启动蓝牙设备监控 self.classicBluetoothHelper?.initBluetooth() result(true) default: result(FlutterMethodNotImplemented) } } // 注册蓝牙事件通道 let classicEventChannel = FlutterEventChannel( name: "com.deep_voice.classic_bluetooth_events", binaryMessenger: controller.binaryMessenger ) // 创建事件处理器 let bluetoothEventHandler = BluetoothStreamHandler(bluetoothHelper: self.classicBluetoothHelper!) classicEventChannel.setStreamHandler(bluetoothEventHandler) // 仅在iOS 13.0及以上版本注册媒体按钮通道 if #available(iOS 13.0, *), let mediaButtonHelper = mediaButtonHelper as? BluetoothMediaButtonHelper { // 注册媒体按钮方法通道 let mediaButtonChannel = FlutterMethodChannel( name: "com.deep_voice.bluetooth_media_button", binaryMessenger: controller.binaryMessenger ) mediaButtonChannel.setMethodCallHandler { [weak self, weak mediaButtonHelper] (call, result) in guard let _ = self, let mediaButtonHelper = mediaButtonHelper else { result(FlutterError(code: "UNAVAILABLE", message: "媒体按钮辅助实例不可用", details: nil)) return } switch call.method { case "startButtonListening": let success = mediaButtonHelper.startButtonListening() result(success) case "stopButtonListening": let success = mediaButtonHelper.stopButtonListening() result(success) default: result(FlutterMethodNotImplemented) } } // 注册媒体按钮事件通道 let mediaButtonEventChannel = FlutterEventChannel( name: "com.deep_voice.bluetooth_media_button_events", binaryMessenger: controller.binaryMessenger ) // 创建媒体按钮事件处理器 let mediaButtonEventHandler = MediaButtonStreamHandler(mediaButtonHelper: mediaButtonHelper) mediaButtonEventChannel.setStreamHandler(mediaButtonEventHandler) } } } // 蓝牙事件流处理器 class BluetoothStreamHandler: NSObject, FlutterStreamHandler, BluetoothEventHandler { private let bluetoothHelper: ClassicBluetoothHelper private var eventSink: FlutterEventSink? init(bluetoothHelper: ClassicBluetoothHelper) { self.bluetoothHelper = bluetoothHelper super.init() // 设置事件处理器 bluetoothHelper.setEventHandler(self) } func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { NSLog("BluetoothStreamHandler: 开始监听蓝牙事件") self.eventSink = events return nil } func onCancel(withArguments arguments: Any?) -> FlutterError? { NSLog("BluetoothStreamHandler: 取消监听蓝牙事件") eventSink = nil return nil } // 实现BluetoothEventHandler协议 func sendEvent(_ event: [String: Any]) { NSLog("BluetoothStreamHandler: 接收到蓝牙事件: \(event)") DispatchQueue.main.async { [weak self] in self?.eventSink?(event) } } } // 媒体按钮事件流处理器 @available(iOS 13.0, *) class MediaButtonStreamHandler: NSObject, FlutterStreamHandler, MediaButtonEventHandler { private let mediaButtonHelper: BluetoothMediaButtonHelper private var eventSink: FlutterEventSink? init(mediaButtonHelper: BluetoothMediaButtonHelper) { self.mediaButtonHelper = mediaButtonHelper super.init() // 设置事件处理器 mediaButtonHelper.setEventHandler(self) } func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { NSLog("MediaButtonStreamHandler: 开始监听媒体按钮事件") self.eventSink = events return nil } func onCancel(withArguments arguments: Any?) -> FlutterError? { NSLog("MediaButtonStreamHandler: 取消监听媒体按钮事件") eventSink = nil return nil } // 实现MediaButtonEventHandler协议 func sendEvent(_ event: [String: Any]) { NSLog("MediaButtonStreamHandler: 收到按钮事件 \(event)") DispatchQueue.main.async { [weak self] in self?.eventSink?(event) } } }