#swift #macos
#swift #macos
Вопрос:
При попытке закодировать прототип, мне кажется, что нет способа отменить запрос?
Итак, вы добавляете интересующие вас права к возможностям вашего приложения, и вот я проверяю:
internal func avStatus(for media: AVMediaType) -> AVAuthorizationStatus {
let status = AVCaptureDevice.authorizationStatus(for: media)
switch status {
case .authorized: // The user has previously granted access to the microphone.
return .authorized
case .notDetermined: // The user has not yet been asked for microphone access.
return .notDetermined
case .denied: // The user has previously denied access.
return .denied
case .restricted: // The user can't grant access due to restrictions.
return .restricted
default:
Swift.print("Unknown AV status (status) for .audio")
return status
}
}
Я думал, что потребуется действие пользователя для запроса использования права и отказа:
@objc @IBAction func audioVideoServicesPress(_ sender: AnyObject) {
let service = sender.title.components(separatedBy: " ").last
let media : AVMediaType = service == "Audio" ? .audio : .video
let status = self.avStatus(for: media)
guard ![.denied,.restricted].contains(status) else { return }
if status == .authorized {
print("how do we relinquish need in the a/v device")
}
else
{
AVCaptureDevice.requestAccess(for: media, completionHandler: { granted in
return
})
}
}
В других действиях пользователя, если они были отключены или отклонены, я бы перенаправил их в соответствующее приложение настроек, но прежде чем я туда доберусь, как отменить запрос?
Это не способ отменить запрос доступа к a / v устройству?
Я думаю, это говорит о том, что я все делаю неправильно?
Ответ №1:
«Отказываться» не от чего.
Нажатие кнопки пользователем является намерением. Пользователь хочет выполнить какое-то действие, которое может быть выполнено только при наличии авторизации. Итак, если у вас это есть или вы можете получить, ваша задача сейчас — сделать это.
Итак, либо у вас есть авторизация, либо ее нет. Если статус авторизации есть .undetermined
, вы можете его получить. Если это так .authorized
, вы уже получили это. В любом из этих случаев делайте то, что намеревается пользователь!
-
Во время вашей
print
строки у вас есть авторизация, так что теперь продолжайте и делайте все, что пользователь нажал на кнопку, намереваясь сделать. -
Аналогично, не
return
используйте обработчик завершения для запроса доступа; вместо этого проверьтеgranted
и, если true, сделайте все, что пользователь нажал на кнопку, намереваясь сделать.
В любом другом случае вы находитесь под водой, поэтому ничего не делайте. Намерение пользователя требует авторизации, которой у вас нет, и которую вы не можете получить. Вы можете создать диалоговое окно, объясняющее, почему вы не можете этого сделать, или отправить их туда, где они могут получить доступ к своим настройкам, но это все, что вы можете сделать отсюда.
Комментарии:
1. Наверное, я хотел получить сходство со службами определения местоположения.
2. Какое именно сходство вы имели в виду? Вы имеете в виду запуск / остановку обновлений? Это не имеет ничего общего с авторизацией. Вы также не можете авторизоваться в службах определения местоположения.
3. Презентация для пользователя — это все, что мне нужно, и когда они скажут «Нет», я сделаю в разумных пределах, чтобы удовлетворить, что касается местоположения, я бы прекратил мониторинг / обновление и выпустил свой объект manager. Все, что хранится, должно быть легко высвобождаемым, а не неуклюжим, чтобы для отказа в доступе к приложению требовался перезапуск приложения и / или сеанс приложения конфиденциальности, когда все, что я хотел, это просто показать и подтвердить остановку интереса или удержание на ресурсе или устройстве.
4. Ну, если они скажут «Нет», вы будете знать, потому что ваше защитное предложение будет выполнено :
guard ![.denied,.restricted].contains(status) else { return }
. Поэтому вместо того, чтобы простоreturn
, если у вас есть ресурсы, которые вы хотите освободить, освободите их (хотя я не могу себе представить, какими они могут быть). Я действительно совсем не понимаю, что вы хотите знать, что мой ответ вам не говорит.5. Я ничего не понимаю, я думаю; просто чувствую, что функция запроса будет сопряжена с отказом; если вы не согласны, это вполне нормально, но я не фанат, вот и все.