Инициализация AVCaptureDeviceInput для камеры не выполняется в macOS Mojave, если пользователь не предоставил разрешения. При попытке инициализации система автоматически представляет диалоговое окно запроса разрешения. Однако, похоже, нет способа получить уведомление об ответе пользователя.

Я ищу аналоговый способ получения уведомлений, например, с запросом разрешений на звук в:

В руководстве Защита конфиденциальности пользователя не описаны другие методы доступа к камере.

3
mirkokiefer 26 Сен 2018 в 09:35

2 ответа

Лучший ответ

Обнаружил, что решение фактически аналогично iOS, проверив authorizationStatus(for:) на AVCaptureDevice перед инициализацией на нем AVCaptureDeviceInput .

И используя 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
mirkokiefer 16 Ноя 2018 в 09:42

Документы Apple для представления диалогового окна и получения ответа находятся по адресу: Запрос авторизации для захвата мультимедиа в MacOS

Это требует асинхронной обработки диалогового окна, поэтому, возможно, будет полезно сочетание проверки статуса авторизации с подходом, представленным в документации.

Стив

0
SteveS 11 Янв 2019 в 18:17