import Flutter import UIKit import ExternalAccessory import AVFoundation // 这个文件是为了满足Flutter插件的命名约定 // 实际实现在ClassicBluetoothPlugin.swift中 public class SwiftClassicBluetoothPlugin: NSObject, FlutterPlugin { private let TAG = "ClassicBluetoothPlugin" private var methodChannel: FlutterMethodChannel? private var eventChannel: FlutterEventChannel? private var eventSink: FlutterEventSink? private let bluetoothHelper = ClassicBluetoothHelper() public static func register(with registrar: FlutterPluginRegistrar) { let channel = FlutterMethodChannel(name: "com.yunqiinnovation.classic_bluetooth/methods", binaryMessenger: registrar.messenger()) let instance = SwiftClassicBluetoothPlugin() registrar.addMethodCallDelegate(instance, channel: channel) // 设置事件通道(用于蓝牙状态监控) let eventChannel = FlutterEventChannel(name: "com.yunqiinnovation.classic_bluetooth/events", binaryMessenger: registrar.messenger()) eventChannel.setStreamHandler(instance) instance.methodChannel = channel instance.eventChannel = eventChannel // 记录插件初始化 print("经典蓝牙插件初始化成功") } public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { switch call.method { case "getConnectedDevices": getConnectedDevices(result: result) case "isBluetoothEnabled": result(bluetoothHelper.isBluetoothEnabled()) default: result(FlutterMethodNotImplemented) } } private func getConnectedDevices(result: @escaping FlutterResult) { // 先检查蓝牙状态 // if !bluetoothHelper.isBluetoothEnabled() { // print("蓝牙未启用,无法获取设备") // result([]) // return // } bluetoothHelper.getConnectedDevices { devices, error in if let error = error { print("获取设备失败: \(error.localizedDescription)") result(FlutterError(code: "BLUETOOTH_ERROR", message: error.localizedDescription, details: nil)) return } print("获取到 \(devices.count) 个蓝牙设备") for device in devices { if let name = device["name"], let address = device["address"], let type = device["type"] { print("设备: \(name), 地址: \(address), 类型: \(type)") } } // 转换为Flutter可用的格式 let resultList = devices.map { device -> [String: String] in // 仅保留Flutter端需要的字段 return [ "name": device["name"] ?? "未知设备", "address": device["address"] ?? "未知地址" ] } result(resultList) } } // 发送事件到Flutter private func sendEvent(_ event: [String: Any]) { if let eventSink = eventSink { eventSink(event) } } } // MARK: - FlutterStreamHandler extension SwiftClassicBluetoothPlugin: FlutterStreamHandler { public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { self.eventSink = events // 开始监听蓝牙状态变化 bluetoothHelper.startBluetoothStateMonitoring { [weak self] eventType, data in guard let self = self else { return } switch eventType { case .stateChanged: if let state = data["state"] as? String { print("蓝牙状态变化: \(state)") self.sendEvent([ "type": "stateChanged", "state": state, "timestamp": Int(Date().timeIntervalSince1970 * 1000) ]) } case .deviceConnected: if let device = data["device"] as? [String: String] { print("设备连接: \(device["name"] ?? "未知") [\(device["address"] ?? "未知")]") // 只保留Flutter端需要的字段 let deviceData: [String: String] = [ "name": device["name"] ?? "未知设备", "address": device["address"] ?? "未知地址" ] self.sendEvent([ "type": "deviceConnected", "device": deviceData, "timestamp": Int(Date().timeIntervalSince1970 * 1000) ]) } case .deviceDisconnected: if let device = data["device"] as? [String: String] { print("设备断开: \(device["name"] ?? "未知") [\(device["address"] ?? "未知")]") // 只保留Flutter端需要的字段 let deviceData: [String: String] = [ "name": device["name"] ?? "未知设备", "address": device["address"] ?? "未知地址" ] self.sendEvent([ "type": "deviceDisconnected", "device": deviceData, "timestamp": Int(Date().timeIntervalSince1970 * 1000) ]) } } } // 报告当前蓝牙状态 bluetoothHelper.reportCurrentBluetoothState() return nil } public func onCancel(withArguments arguments: Any?) -> FlutterError? { eventSink = nil bluetoothHelper.stopBluetoothStateMonitoring() return nil } }