我试图处理要求用户访问相机的权限。到目前为止,我有一个正确返回相机当前授权状态的方法,当相机权限被拒绝时,应用程序正常工作。
但是,如果我进入手机设置并将相机权限切换为"允许",当我重新启动应用程序并尝试启动捕获会话时,我会继续发生这种奇怪的崩溃(我的相机会立即启动当应用程序打开FYI时)。这是崩溃:
*由于未捕获的异常终止应用程序&#39; NSGenericException&#39;,原因:&#39; * AVCaptureSession无法在调用beginConfiguration / commitConfiguration&#39; <之间启动/ p>
以下是启动会话的代码(在commitConfiguration之后):
dispatch_async(captureSessionQueue) {
self.captureSession.startRunning()
}
通过调用此函数检查授权状态后调用上面的代码。带有捕获会话的cameraView仅在我检查权限是否已授权后初始化:
public func IsCameraAuthorized() -> AVAuthorizationStatus {
var authorizationStatus = AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo)
switch authorizationStatus {
case .NotDetermined:
// permission dialog not yet presented, request authorization
AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo) { granted in
if granted {
authorizationStatus = .Authorized
} else {
// user denied
authorizationStatus = .Denied
}
}
break
case .Authorized:
// go
break
case .Denied, .Restricted:
// the user explicitly denied camera usage or is not allowed to access the camera devices
break
}
return authorizationStatus
}
对我做错了什么的想法?如果我在开始会话之前提交配置,为什么这不起作用?
答案 0 :(得分:0)
您的授权码没有任何问题。尝试删除dispatch_async
块并开始在viewDidAppear