【问题标题】:Show microphone permission when denied拒绝时显示麦克风权限
【发布时间】:2019-05-31 14:09:43
【问题描述】:

我有一个按钮,点击它时我必须检查麦克风权限。

出于这个原因,我这样做了:

public func askMicrophoneAuthorization()
    {

        recordingSession = AVAudioSession.sharedInstance()
        recordingSession.requestRecordPermission() { [unowned self] allowed in
                DispatchQueue.main.async {
                    if allowed
                    {
                        self.goToNextStep()

                    } else
                    {
                        self.denied()
                    }
                }
            }
 }

我的问题是:当我点击按钮并调用 askMicrophoneAuthorization 方法时,如果它是我第一次请求权限,麦克风系统警报,在 plist 文件中插入文本,显示并且我可以拒绝或不允许。如果我拒绝该权限,然后我重新点击按钮方法 self.denied() 被执行,我没有看到麦克风系统警报。 是否可以重新显示系统警报?

【问题讨论】:

  • 在这种情况下,用户需要转到“设置”并手动允许录制。这就是系统的工作方式。它认为,如果用户做出了一次选择,应用程序不应通过警报打扰用户
  • 顺便说一句,虽然这不太可能成为问题,但作为一般规则,我不建议将 unowned 与异步方法结合使用。如果self 在此期间被解雇/解除分配怎么办?将[weak self]self?.goToNextStep()self?.denied() 一起使用...

标签: ios swift avfoundation ios-permissions


【解决方案1】:

如果用户已经拒绝,则无法显示系统警报。 您可以做的最好的事情是检查权限,如果他们被拒绝,则显示带有打开应用设置按钮的警报。

func askPermissionIfNeeded() {
    switch AVAudioSession.sharedInstance().recordPermission {
    case undetermined:
        askMicrophoneAuthorization()
    case denied:
        let alert = UIAlertController(title: "Error", message: "Please allow microphone usage from settings", preferredStyle: .alert)
        alert.addAction(UIAlertAction(title: "Open settings", style: .default, handler: { action in
            UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
        }))
        alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))
        present(alert, animated: true, completion: nil)
    case granted:
        goToNextStep()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 2021-12-04
    • 1970-01-01
    相关资源
    最近更新 更多