授予相机访问权限后,未在iOS中加载cordova条形码扫描仪插件

时间:2017-06-22 13:53:34

标签: ios objective-c cordova cordova-plugins barcode-scanner

我使用cordova barcode scanner plugin作为我的混合iOS移动应用。我遇到的问题是初次使用扫描仪,如果用户未授予相机权限,则会提示相机访问(如预期的那样)。但是,它不会启动摄像头或执行任何回调。如果您关闭应用程序并重新尝试它将正常工作,因为它不再需要权限检查。

我没有使用Objective C的经验,但我一直试图使用以下文件中的断点来缩小原因: https://github.com/phonegap/phonegap-plugin-barcodescanner/blob/master/src/ios/CDVBarcodeScanner.mm

LN511 - 在此处添加断点是出现要求摄像机权限的提示。如果我在此断点处于活动状态时接受权限并继续执行,则一切正常并且相机UI打开。如果我改为继续所有执行(然后调用scanBarcode())直到完成,然后接受权限,相机就不会打开,也不会执行回调。

有没有人经历过这方面的问题,或者对如何解决这个问题有任何建议?

编辑:我也尝试了建议的内容安全策略,但它没有解决问题:

<meta http-equiv="Content-Security-Policy" content="default-src * gap://ready file:;default-src * 'unsafe-eval'; style-src 'self' 'unsafe-inline'; script-src * 'self' 'unsafe-inline' 'unsafe-eval'" />

EDIT2: 在继续之前,Obj C代码是否应该等待在某个时刻授予相机访问权限?我似乎无法在任何地方找到它。再一次,我不认识Obj。 C所以我有点研究,但下面的示例(来自另一个SO问题)请求访问并且有一个completionHandler。

[AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
    if(granted){
      NSLog(@"Granted access to %@", mediaType);
    } else {
      NSLog(@"Not granted access to %@", mediaType);
    }

EDIT3:JS代码

`const scannerOpts = {
                preferFrontCamera: false, // iOS and Android 
                showFlipCameraButton: false, // iOS and Android 
                showTorchButton: true, // iOS and Android 
                torchOn: false, // Android, launch with the torch switched on (if available) 
                prompt: "Place a barcode inside the scan area", // Android 
                resultDisplayDuration: 500, // Android, display scanned text for X ms. 0 suppresses it entirely, default 1500 
                //formats : "QR_CODE,PDF_417", // default: all but PDF_417 and RSS_EXPANDED 
                //orientation : "landscape", // Android only (portrait|landscape), default unset so it rotates with the device 
                disableAnimations: true, // iOS 
                disableSuccessBeep: false // iOS 
            };

            cordova.plugins.barcodeScanner.scan(
                function(scanResult) {
                    debugger;
                    resolve(scanResult);
                },
                function(scanError) {
                    debugger;
                    reject(scanError);
                },
                scannerOpts
            );`

谢谢!

0 个答案:

没有答案