在 macOS Mojave 中请求相机权限

4
在macOS Mojave中,如果用户未授予权限,则无法为摄像头初始化AVCaptureDeviceInput。当尝试初始化时,系统会自动呈现权限请求对话框。但似乎没有办法获得用户响应的通知。
以下是需要翻译的内容:

我希望能像请求音频权限一样获得通知:

保护用户隐私指南没有概述其他访问摄像头的方法。
2个回答

1

通过在初始化AVCaptureDeviceInput之前检查AVCaptureDevice上的authorizationStatus(for:),发现解决方案实际上类似于iOS。

如果需要,可以使用requestAccess(for:completionHandler:)来请求权限。

获取相机访问权限的示例:

let status = AVCaptureDevice.authorizationStatus(for: .video)

if status == .authorized {
  // connect to video device
  let devices = AVCaptureDevice.devices(for: .video)
  ...
  return
}

if status == .denied {
  // show error
  return
}

AVCaptureDevice.requestAccess(for: .video) { (accessGranted) in
  // handle result
}

1
你做这件事情有特定的顺序吗?如果状态是.notDetermined,你是否遇到过弹出窗口未显示的问题? - Paulius Dragunas
@PauliusDragunas 我添加了一些示例代码,对我来说很有效 - 没有弹出窗口未出现的问题。 - mirkokiefer
看起来与此相关:https://dev59.com/8Yfca4cB1Zd3GeqPhlv9?rq=1 - 你是在主队列上调用它吗? - mirkokiefer
虽然我在我的app.plist中有NSCameraUsageDescription键(和我不是很需要的NSMicrophoneUsageDescription),但我从来没有得到弹出窗口,所以它总是失败。状态返回为.notDetermined,因此我在switch语句内部调用.requestAccess并使用completionHandler。(顺便说一下,AVMediaType.video.rawValue == 'vide',而不是'video'。) - gone
在我看来,处理程序似乎从未被执行,因为我已经在各个地方添加了一些调试打印语句,但它们从未出现。 - gone

0

苹果文档中关于呈现对话框和捕获响应的内容可以在以下链接找到: 在MacOS上请求媒体捕获的授权

它确实需要异步处理对话框,因此也许结合检查授权状态和文档中提供的方法会更有帮助。

Steve


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接