【问题标题】:Request camera permissions in macOS Mojave在 macOS Mojave 中请求相机权限
【发布时间】:2019-01-12 02:17:47
【问题描述】:

如果用户未授予权限,则在 macOS Mojave 中为相机初始化 AVCaptureDeviceInput 会失败。 尝试初始化时,系统会自动显示权限请求对话框。似乎没有办法得到用户响应的通知。

我正在寻找一种模拟方式来获得通知,就像请求音频权限一样:

Protecting the User's Privacy 指南并未概述任何其他访问相机的方法。

【问题讨论】:

    标签: swift macos camera privacy macos-mojave


    【解决方案1】:

    在从 AVCaptureDeviceInput 初始化 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
    }
    

    【讨论】:

    • 您执行此操作是否有特定的顺序?如果该状态为.notDetermined,您是否遇到过弹出窗口不显示的问题?
    • @PauliusDragunas 我添加了一些对我有用的示例代码 - 弹出窗口没有出现任何问题。
    • stackoverflow.com/questions/28214262/… 似乎相关 - 您是否在主队列中调用它?
    • 虽然我的 app.plist 中有 NSCameraUsageDescription 键(和我并不真正需要的 NSMicrophoneUsageDescription),但我从来没有得到弹出窗口,所以它总是失败.状态返回为.notDetermined,因此我调用.requestAccess,同时仍在带有completionHandler 的switch 语句中。 (顺便说一下,AVMediaType.video.rawValue == 'vide',而不是 'video'。)
    • 在我看来,处理程序从未执行过,因为我在各处添加了一些调试打印语句,但从未出现过。
    【解决方案2】:

    用于显示对话框和捕获响应的 Apple 文档位于: Requesting Authorization for Media Capture on MacOS

    它确实需要对对话进行异步处理,因此将检查授权状态与文档中提供的方法结合起来可能会有所帮助。

    史蒂夫

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-03
      • 2020-07-31
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2016-05-28
      • 2012-11-14
      相关资源
      最近更新 更多