首页 > 解决方案 > SFSpeechRecognizer 未授权案例从未进入

问题描述

我在这里遵循一个简单的教程让 iOS 语音识别工作。

即使用户拒绝麦克风访问,当我在模拟器中运行它时,它总是进入授权情况并打印出authorized,即使在用户在提示中选择 Allow 之前也是如此。我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
            }
        }
    }
}

标签: iosswiftspeech-to-textapple-speech

解决方案


欢迎来到堆栈溢出!

一旦用户授权或拒绝请求,即使再次调用 requestAuthorization 也不会再次显示。如果您从模拟器中删除应用程序,然后在 Xcode 中重新运行,它将清除先前的选择并允许再次出现对话框。

我运行了您发布的代码,并且似乎按预期工作。


推荐阅读