我使用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
);`
谢谢!