requestAccessForMediaType 不请求许可

requestAccessForMediaType doesn't ask for permission

我注意到我的应用未请求使用相机的权限。经过一些实验后,我发现用于检查权限的代码需要很长时间才能完成。所以我想到让我的 viewdidload 运行 的那部分放在串行队列(同步)上。强制其余部分在开始下一行之前等待身份验证过程完成。但这实际上行不通。这些行按顺序开始,但仍然没有按顺序结束。

奇怪的是,如果我只是请求许可而不对它做任何事情,没有 completionHandler(如下面的代码),那么他第二次 运行 我 运行 它用completionHandler 完美,尽管它仍然没有向用户显示警报。这可能是因为在欧洲录制视频不需要许可吗? avcapturedevice ref

如果我想逐行执行代码,是否需要使用屏障?或同步串行队列的或??

AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: { nil }())

更新:

这种方法应该是非常安全的,但事实并非如此。它 returns true 是理所当然的,但 3 为 rawValue (denied)

func checkForAuthorizationStatus() {
        println("auth me")
        AVCaptureDevice.requestAccessForMediaType(AVMediaTypeVideo, completionHandler: {
            granted in
            if granted {
                println("granted: \(granted)")
                self.deviceAuthorized = true
                println("raw value: \(AVCaptureDevice.authorizationStatusForMediaType(AVMediaTypeVideo).rawValue)")
            } else {
                self.deviceAuthorized = false
            }

        })
    }

更新 2:在下面的评论中回答。 - 重置设备上的隐私设置以获取请求。

如果它要花很长时间才能出现,那么听起来您似乎没有 运行 在主线程上,而您应该在主线程上。此外,如果它之前提示过一次,则不会再次提示 – 用户必须进入“设置”并启用相机访问权限。