SFSpeechRecognizer не разрешенные случаи никогда не вводятся - PullRequest
0 голосов
/ 14 января 2019

Я следую простому учебнику здесь , чтобы заставить работать распознавание речи в iOS.

Даже когда пользователь запрещает доступ к микрофону, когда я запускаю его в симуляторе, он всегда идет в авторизованном случае и печатает авторизованный , даже до того, как пользователь выберет Разрешить в приглашении. Мой askSpeechPermission никогда не называется. Как мне это исправить?

let audioEngine = AVAudioEngine()
let speechRecognizer = SFSpeechRecognizer(locale: Locale.init(identifier: "en-US"))
let request = SFSpeechAudioBufferRecognitionRequest()
var recognitionTask: SFSpeechRecognitionTask?

override func viewDidLoad() {        
    super.viewDidLoad()

    switch SFSpeechRecognizer.authorizationStatus() {
        case .notDetermined:
            askSpeechPermission()
            print("not determined")
        case .authorized:
            self.status = .ready
            print("authorized")
        case .denied, .restricted:
            self.status = .unavailable
            print("denied or restricted")
    }

}

func askSpeechPermission() {
    SFSpeechRecognizer.requestAuthorization { status in
        OperationQueue.main.addOperation {
            switch status {
                case .authorized:
                    self.status = .ready
                default:
                    self.status = .unavailable
            }
        }
    }
}

1 Ответ

0 голосов
/ 14 января 2019

Добро пожаловать в переполнение стека!

Как только пользователь авторизует или отклоняет запрос, он больше не будет отображаться, даже если снова вызывается requestAuthorization. Если вы удалите приложение из симулятора, а затем повторно запустите в XCode, оно очистит предыдущий выбор и позволит снова появиться диалоговое окно.

Я запустил код, который вы разместили, и, кажется, работает как положено.

...