更新时间:2024-05-20 03:47:42下载pdf
该功能只适用于已连接互联网的设备。
参数说明
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
mode |
ActivatorMode |
是 | 配网模式 |
代码示例
self.pair = ActivatorService.shared.activator(.QRScan)
属性说明
属性名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
session | AVCaptureSession | 否 | 捕捉视频和音频数据的会话对象 |
callBack | CallBack | 否 | 扫描完成后的回调方法 |
方法说明
方法名 | 参数 | 返回值 | 说明 |
---|---|---|---|
addScaningVideo() |
无 | 无 | 添加视频扫描功能 |
metadataOutput(_:didOutput:from:) |
output: AVCaptureMetadataOutput, metadataObjects: [AVMetadataObject], connection: AVCaptureConnection | 无 | 处理扫描到的元数据 |
代码示例
typealias CallBack = (_ code : String? ) -> ()
class QRScanViewController: UIViewController {
let session = AVCaptureSession()
var callBack:CallBack?
override func viewDidLoad() {
self.addScaningVideo()
}
private func addScaningVideo(){
guard let device = AVCaptureDevice.default(for: .video) else { return }
guard let deviceInput = try? AVCaptureDeviceInput(device: device) else { return }
let metadataOutput = AVCaptureMetadataOutput()
metadataOutput.setMetadataObjectsDelegate(self, queue: DispatchQueue.main)
if session.canAddInput(deviceInput) {
session.addInput(deviceInput)
}
if session.canAddOutput(metadataOutput) {
session.addOutput(metadataOutput)
}
metadataOutput.metadataObjectTypes = [.qr, .code128, .code39, .code93, .code39Mod43, .ean8, .ean13, .upce, .pdf417, .aztec]
let previewLayer: AVCaptureVideoPreviewLayer = AVCaptureVideoPreviewLayer(session: session)
previewLayer.videoGravity = .resizeAspectFill
previewLayer.frame = view.bounds
view.layer.insertSublayer(previewLayer, at: 0)
session.startRunning()
}
}
extension QRScanViewController: AVCaptureMetadataOutputObjectsDelegate {
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate))
session.stopRunning()
for result in metadataObjects {
if let code = result as? AVMetadataMachineReadableCodeObject {
self.callBack?(code.stringValue ?? "")
}
}
self.navigationController?.popViewController(animated: true)
}
}
参数说明
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
deviceModel |
IActivatedDevice? |
是 | 若操作成功,表示被激活的设备信息,否则为 nil |
params |
ActivatorParams? |
是 | 操作相关的参数信息 |
回调函数说明
函数名 | 参数 | 说明 |
---|---|---|
onSuccess |
deviceModel: IActivatedDevice?, params: ActivatorParams? |
操作成功回调函数,返回被激活的设备信息 |
onError |
error: Error, params: ActivatorParams? |
操作失败回调函数,返回错误信息 |
代码示例
private func start() {
pair.listener = self
}
extension ViewController: IActivatorListener {
func onSuccess(deviceModel: IActivatedDevice?, params: ActivatorParams?) {
SVProgressHUD.dismiss()
self.navigationController?.popToRootViewController(animated: true)
}
func onError(error: Error, params: ActivatorParams?) {
SVProgressHUD.dismiss()
SVProgressHUD.showInfo(withStatus: error.localizedDescription)
}
}
该方法用于开始设备配网操作。
参数说明
参数名 | 类型 | 是否必填 | 说明 |
---|---|---|---|
params |
ActivatorParams |
是 | 配网操作相关的参数信息,见代码示例 |
代码示例
// 创建 QRScanActivatorParams 实例
let params = QRScanActivatorParams(code: "code_from_scan_image", assetId: "assetId", longitude: nil, latitude: nil)
// 开始设备配网操作,pair 是在初始化过程中生成的
// self.pair = ActivatorService.shared.activator(.QRScan)
pair.startPair(params)
该方法用于停止设备配网操作。
代码示例
// 停止设备配网操作,pair 是在初始化过程中生成的
// self.pair = ActivatorService.shared.activator(.QRScan)
pair.stopPair()
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈