隐私-语音识别警报消息。
隐私 - 麦克风使用警告消息。
两者都需要访问麦克风,但一旦被拒绝,它将不会再次出现,因此用户将永远无法使用该功能。
点击录制按钮后,系统会立即提示您。
在我自己的设备上进行了测试,几乎尝试了我能想到的所有方法。
SFSpeechRecognizerDelegate
let recordButton = RecordButton()
let speechRecognizer: SFSpeechRecognizer? = SFSpeechRecognizer()
let request = SFSpeechAudioBufferRecognitionRequest()
var recognitionTask: SFSpeechRecognitionTask?
func recordAndRecognizeSpeech() {
let node = audioEngine.inputNode
let recordingFormat = node.outputFormat(forBus: node.installTap(onBus: 0, bufferSize: 1024, format: recordingFormat) {
buffer, _ in self.request.append(buffer)
}
audioEngine.prepare()
do {
try audioEngine.start()
} catch {
return print(error)
}
guard let myRecognizer = SFSpeechRecognizer()
else { return }
if !myRecognizer.isAvailable { return }
recognitionTask = speechRecognizer?.recognitionTask(with: request, resultHandler: { result, error in
if let result = result {
let bestString = result.bestTranscription.formattedString
self.textView.text = bestString
} else if let error = error {
print(error)
return
}
})
}
@objc func recordButtonTap() {
self.recordAndRecognizeSpeech()
}
有没有人曾经不得不处理过这个问题?
最佳答案
您可以检查权限的状态,如果它的 .denied
向用户询问您创建的一些警报,并在需要时为用户打开设置:
func askForMicPermission() {
switch AVAudioSession.sharedInstance().recordPermission {
case .granted:
print("Permission granted")
// grantedAction()
case .denied:
print("Pemission denied")
// Show alert to user and ask them to turn it on from settings
// Open settings
let url = URL(string: UIApplication.openSettingsURLString)!
DispatchQueue.main.async {
guard UIApplication.shared.canOpenURL(url) else { return assertionFailure("Settings not found") }
UIApplication.shared.open(url, options: [:])
}
case .undetermined:
print("Request permission here")
AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
// granted ? grantedAction() : deniedAction()
})
}
}
不要忘记import AVFoundation
关于ios - 在最初被拒绝后,我如何获得隐私权限以重新出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56607892/