ios - 在最初被拒绝后,我如何获得隐私权限以重新出现?

标签 ios swift

隐私-语音识别警报消息。 隐私 - 麦克风使用警告消息。

两者都需要访问麦克风,但一旦被拒绝,它将不会再次出现,因此用户将永远无法使用该功能。

点击录制按钮后,系统会立即提示您。

在我自己的设备上进行了测试,几乎尝试了我能想到的所有方法。

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/

相关文章:

ios - 激活搜索栏时会出现隐藏状态栏

ios - 如何使用 NSURLSession 下载多个文件

ios - 表格 View 在其上方的 View 下滚动而不是与它一起滚动

ios - 我不再使用的库在启动时使应用程序崩溃。如何彻底去除? Xcode/swift

ios - 意外发现 nil URL SWIFT

ios - 如何区分委托(delegate)方法中的 UITextFields?

ios - 使用 Swift 使用 Facebook 链接页面打开 Facebook 应用程序

android - 如何从 flash 迁移到 adobe air iOs 和 android?

swift - Swift 中的通用完成处理程序

ios - 快速使用 requestWhenInUseAuthorization