扫描功能不适用于动作扩展(无需打开相机)

时间:2016-02-25 12:09:36

标签: ios swift uiactivityviewcontroller ios-app-extension ios-extensions

我能够实现buttonactions,tableview,textfields,switch ......所有在ActionExtension中工作正常

BUT

“操作扩展”中的扫描功能无效(无需打开相机)。下面我在swift和我的扩展程序的屏幕截图中分享了我的扫描代码

声明:

var scannedBarcode = NSString(string: "")
var scannedMetadataOutput = AVCaptureMetadataOutput()

var gCaptureMetadataOutput = AVCaptureMetadataOutput()
var _prevLayer = AVCaptureVideoPreviewLayer()
var _session = AVCaptureSession()

扫描按钮操作代码:

 @IBAction func scanExtenAction(sender: AnyObject) {

    scanExtAction.enabled = false


    var error:NSError? = nil
    //let _input = (try! AVCaptureDeviceInput.deviceInputWithDevice(gCaptureDevice))
    let _input = (try! AVCaptureDeviceInput.init(device: gCaptureDevice))

    if _session.canAddInput(_input)
    {
        _session.addInput(_input)
    }

    var _output = AVCaptureMetadataOutput()

    gCaptureMetadataOutput.setMetadataObjectsDelegate(self, queue: dispatch_get_main_queue())

    if _session.canAddOutput(gCaptureMetadataOutput)
    {
        _session.addOutput(gCaptureMetadataOutput)
    }

    //        gCaptureMetadataOutput.metadataObjectTypes = gCaptureMetadataOutput.availableMetadataObjectTypes
    gCaptureMetadataOutput.metadataObjectTypes = gCaptureMetadataOutput.availableMetadataObjectTypes

    _prevLayer = AVCaptureVideoPreviewLayer(layer: _session) as AVCaptureVideoPreviewLayer

    //_prevLayer.frame = self.view.bounds
    //_prevLayer.frame = CGRectMake( DEVICE_WIDTH * 0.10 , DEVICE_HEIGHT * 0.10, DEVICE_WIDTH * 0.8, DEVICE_HEIGHT * 0.4 )
    _prevLayer.frame = CGRectMake(0 , 0, 280, 300 )
    _prevLayer.cornerRadius = 10


    _prevLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;


   self.view.layer.addSublayer(_prevLayer)


    _session.startRunning()



}

enter image description here

1 个答案:

答案 0 :(得分:3)

App Extensions无法执行以下操作:

1.在iOS设备上访问相机或麦克风。

2.使用AirDrop接收数据(但它可以使用AirDrop发送数据)。

3.执行长时间运行的后台任务。

4.使用带有NS_EXTENSION_UNAVAILABLE宏或类似不可用宏的标头文件中标记的任何API,或者不可用框架中的任何API,例如EventKitHealthKit都不可用于应用扩展。

5.访问sharedApplication对象,因此不能使用该对象上的任何方法

请参阅以下链接以获取更多信息: link