如何以编程方式检查 NSMicrophoneUsageDescription
how to check NSMicrophoneUsageDescription programmatically
我希望用户在应用程序中使用麦克风,并将适当的键添加到 info.plist "Privacy-MicrophoneUsageDescription",
如果用户点击麦克风按钮,会出现 window 以及使用权限问题。如果用户点击 "Allow",应用程序可以正常运行,不会出现任何问题。但如果没有,再次按下麦克风按钮,应用程序会崩溃。
我想要的是,每次按下按钮时检查 NSMicrophoneUsageDescription 状态。如果被拒绝,请再次请求用户的许可。
对于 swift 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
}
}
所选答案将不起作用 requestRecordPermission 方法是异步的,并且在 return 语句中 returned 值之前它不会更改 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)
}
}
我修改了所选答案以包含一个完成处理程序,而不是它具有 return 语句
我希望用户在应用程序中使用麦克风,并将适当的键添加到 info.plist "Privacy-MicrophoneUsageDescription", 如果用户点击麦克风按钮,会出现 window 以及使用权限问题。如果用户点击 "Allow",应用程序可以正常运行,不会出现任何问题。但如果没有,再次按下麦克风按钮,应用程序会崩溃。
我想要的是,每次按下按钮时检查 NSMicrophoneUsageDescription 状态。如果被拒绝,请再次请求用户的许可。
对于 swift 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
}
}
所选答案将不起作用 requestRecordPermission 方法是异步的,并且在 return 语句中 returned 值之前它不会更改 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)
}
}
我修改了所选答案以包含一个完成处理程序,而不是它具有 return 语句