USB 摄像头适配iPadOS17+ios端的配置
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
//
|
||||
// UsbCameraAndroidPlugin.swift
|
||||
// usb_camera_android
|
||||
//
|
||||
// Flutter iOS 插件入口:注册 MethodChannel / EventChannel / PlatformView,
|
||||
// 通道名与 Android 端完全一致,上层 Dart 无需区分平台。
|
||||
//
|
||||
|
||||
import Flutter
|
||||
import UIKit
|
||||
|
||||
public class UsbCameraAndroidPlugin: NSObject, FlutterPlugin, FlutterStreamHandler {
|
||||
|
||||
private static let METHOD_CHANNEL = "com.maibu.usb_camera_android/methods"
|
||||
private static let EVENT_CHANNEL = "com.maibu.usb_camera_android/events"
|
||||
private static let VIEW_TYPE = "com.maibu.usb_camera_android/preview"
|
||||
|
||||
private let engine = UsbCameraEngine()
|
||||
|
||||
public static func register(with registrar: FlutterPluginRegistrar) {
|
||||
let instance = UsbCameraAndroidPlugin()
|
||||
|
||||
let methodChannel = FlutterMethodChannel(
|
||||
name: METHOD_CHANNEL, binaryMessenger: registrar.messenger())
|
||||
registrar.addMethodCallDelegate(instance, channel: methodChannel)
|
||||
|
||||
let eventChannel = FlutterEventChannel(
|
||||
name: EVENT_CHANNEL, binaryMessenger: registrar.messenger())
|
||||
eventChannel.setStreamHandler(instance)
|
||||
|
||||
registrar.register(UsbCameraViewFactory(engine: instance.engine),
|
||||
withId: VIEW_TYPE)
|
||||
|
||||
instance.engine.startMonitoring()
|
||||
}
|
||||
|
||||
// MARK: - FlutterStreamHandler(转发给 engine)
|
||||
|
||||
public func onListen(withArguments arguments: Any?,
|
||||
eventSink events: @escaping FlutterEventSink) -> FlutterError? {
|
||||
return engine.onListen(withArguments: arguments, eventSink: events)
|
||||
}
|
||||
|
||||
public func onCancel(withArguments arguments: Any?) -> FlutterError? {
|
||||
return engine.onCancel(withArguments: arguments)
|
||||
}
|
||||
|
||||
// MARK: - MethodCallHandler
|
||||
|
||||
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
||||
switch call.method {
|
||||
case "isSupported":
|
||||
result(engine.isSupported())
|
||||
case "getDeviceList":
|
||||
result(engine.getDeviceList())
|
||||
case "getSupportedResolutions":
|
||||
result(engine.getSupportedResolutions())
|
||||
case "getPreviewSize":
|
||||
result(engine.getPreviewSize())
|
||||
case "open":
|
||||
let args = call.arguments as? [String: Any]
|
||||
engine.open(deviceId: args?["deviceId"] as? String,
|
||||
resolution: args?["resolution"] as? String,
|
||||
result: result)
|
||||
case "close":
|
||||
engine.close(result: result)
|
||||
case "setResolution":
|
||||
let args = call.arguments as? [String: Any]
|
||||
engine.setResolution(args?["resolution"] as? String, result: result)
|
||||
default:
|
||||
result(FlutterMethodNotImplemented)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user