ios - 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
}
}
}
}
解决方案
欢迎来到堆栈溢出!
一旦用户授权或拒绝请求,即使再次调用 requestAuthorization 也不会再次显示。如果您从模拟器中删除应用程序,然后在 Xcode 中重新运行,它将清除先前的选择并允许再次出现对话框。
我运行了您发布的代码,并且似乎按预期工作。
推荐阅读
- ios - iOS RunLoop 和 DispatchQueue.main.async
- python - 求从 x 到 y 的数字之和,程序将答案打印为“x+(x+1)....+y= (sum of # from x to y)”
- algorithm - 如何在 MATLAB 中使用粒子群优化函数(particleswarm),为什么我的最佳函数值显示的是 inf 值?
- ios - 无法将颤振应用程序部署到 iOS Appstore
- html - 在桌面上显示图像,但在电话浏览器中没有显示图像
- node.js - nodejs 模块中 UMD 块的代码覆盖率
- r - Base R 获取光栅图像以填充整个绘图区域
- api - 根据 REST API 规范,以下哪些是有效的 URI(统一资源标识符)?
- go - 如何读取固定数量的字节?
- sql-server - SQL Server where 子句中的 IF 条件