Swift - 要求获得麦克风许可

时间:2016-03-29 10:52:43

标签: swift avcapturesession avaudiosession avcapture

在我的swift应用程序中,这是我要求麦克风和摄像头权限的代码。

class func requestCameraPermission(completionBlock:(Bool throws -> Void)) rethrows {
    if (AVCaptureDevice.respondsToSelector(Selector("requestAccessForMediaType:completionHandler"))) {
        AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {
            granted in
            dispatch_async(dispatch_get_main_queue()) {
                try! completionBlock(granted)
            }
        })
    } else {
        try! completionBlock(true)
    }
}


class func requestMicrophonePermission(completionBlock:(Bool throws -> Void)) rethrows {
    if AVAudioSession.sharedInstance().respondsToSelector("requestRecordPermission:") {
        AVAudioSession.sharedInstance().requestRecordPermission {
            granted in
            dispatch_async(dispatch_get_main_queue()) {
                try! completionBlock(granted)
            }
        }
    }
}

这是我必须附加相机的代码,如果缺少某些权限则显示错误。

func attachCamera() {
    do {
        try self.camera.start()
    } catch BESwiftCameraErrorCode.CameraPermission {
        self.showCameraPermissionAlert()
    } catch BESwiftCameraErrorCode.MicrophonePermission {
        self.showMicrophonePermissionAlert()
        print("mic error!!")
    } catch {
        self.showUnknownErrorAlert()
    }
}

我试过不允许相机许可。我看到一个警告框说我需要相机权限。该应用程序不会崩溃。

但是当我尝试不允许麦克风许可时,应用程序崩溃了。

在崩溃日志中突出显示此行:

try! completionBlock(granted)

这个错误:

fatal error: 'try!' expression unexpectedly raised an error: TestApp.CameraErrorCode.MicrophonePermission: file /Library/Caches/com.apple.xbs/Sources/swiftlang_PONDEROSA/swiftlang_PONDEROSA-700.1.101.6/src/swift/stdlib/public/core/ErrorType.swift, line 50

造成这种情况的原因是什么?如何显示麦克风权限警报而不是应用程序崩溃?

0 个答案:

没有答案