我能够实现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()
}
答案 0 :(得分:3)
App Extensions无法执行以下操作:
1.在iOS设备上访问相机或麦克风。
2.使用AirDrop接收数据(但它可以使用AirDrop发送数据)。
3.执行长时间运行的后台任务。
4.使用带有NS_EXTENSION_UNAVAILABLE
宏或类似不可用宏的标头文件中标记的任何API,或者不可用框架中的任何API,例如EventKit
和HealthKit
都不可用于应用扩展。
5.访问sharedApplication对象,因此不能使用该对象上的任何方法
请参阅以下链接以获取更多信息: link