0

我希望用户在应用程序中使用麦克风,并将适当的密钥添加到 info.plist “Privacy-MicrophoneUsageDescription”,如果用户点击麦克风按钮,则会出现使用权限问题的窗口。如果用户点击“允许”,则该应用程序可以正常运行而不会出现任何问题。但如果没有,再次按下麦克风按钮,应用程序就会崩溃。

我想要的是,每次按下按钮时检查 NSMicrophoneUsageDescription 状态。如果被拒绝,请再次向用户请求权限。

4

2 回答 2

4

选择的答案不起作用 requestRecordPermission 方法是异步的,并且在返回语句中返回值之前它不会更改 permissionCheck 的值正确的方法是使用完成处理程序

func askMicroPhonePermission(completion: @escaping (_ success: Bool)-> Void) {
    switch AVAudioSession.sharedInstance().recordPermission() {
    case AVAudioSessionRecordPermission.granted:
        completion(true)
    case AVAudioSessionRecordPermission.denied:
        completion(false) //show alert if required
    case AVAudioSessionRecordPermission.undetermined:
        AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
            if granted {
                completion(true)
            } else {
                completion(false) // show alert if required
            }
        })
    default:
        completion(false)
    }
}

我修改了选择的答案以包含一个完成处理程序,而不是它有一个返回语句

于 2017-05-24T12:47:10.060 回答
2

对于迅速 3 :

func askMicroPhonePermission() {
    switch AVAudioSession.sharedInstance().recordPermission() {
    case AVAudioSessionRecordPermission.granted:
        //permissionCheck = true 
    case AVAudioSessionRecordPermission.denied:
       // permissionCheck = false //show alert if required
    case AVAudioSessionRecordPermission.undetermined:
        AVAudioSession.sharedInstance().requestRecordPermission({ (granted) in
            if granted {
                //permissionCheck = true
            } else {
                //permissionCheck = false // show alert if required or completion handler
            }
        })
    default:
        break
    }
}
于 2017-05-24T11:43:33.657 回答