Показать разрешение микрофона, когда отказано - PullRequest
1 голос
/ 31 мая 2019

У меня есть кнопка, которая при нажатии на нее, я должен проверить разрешение микрофона.

По этой причине я сделал это:

public func askMicrophoneAuthorization()
    {

        recordingSession = AVAudioSession.sharedInstance()
        recordingSession.requestRecordPermission() { [unowned self] allowed in
                DispatchQueue.main.async {
                    if allowed
                    {
                        self.goToNextStep()

                    } else
                    {
                        self.denied()
                    }
                }
            }
 }

моя проблема заключается в следующем: когда я нажимаю наКнопка и метод askMicrophoneAuthorization вызывается, если в первый раз, когда я спрашиваю разрешение, показывается системное предупреждение микрофона с текстом, вставленным в файл plist, и я могу отказать в разрешении или нет.Если я отказываю в разрешении, а затем снова нажимаю на кнопку, выполняется метод self.denied (), и я не вижу предупреждения системы микрофона.Можно ли повторно показать системное предупреждение?

1 Ответ

1 голос
/ 31 мая 2019

Невозможно показать системное предупреждение, если пользователь уже отказал.Лучшее, что вы можете сделать, это проверить разрешение и, если ему отказано, показать предупреждение с кнопкой, которая открывает настройки приложения.

func askPermissionIfNeeded() {
    switch AVAudioSession.sharedInstance().recordPermission {
    case undetermined:
        askMicrophoneAuthorization()
    case denied:
        let alert = UIAlertController(title: "Error", message: "Please allow microphone usage from settings", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Open settings", style: .default, handler: { action in
            UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
        }))
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        present(alert, animated: true, completion: nil)
    case granted:
        goToNextStep()
    }
}
...