ios - 拒绝时显示麦克风权限
问题描述
我有一个按钮,当点击它时,我必须检查麦克风权限。
出于这个原因,我这样做了:
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() 被执行,我没有看到麦克风系统警报。是否可以重新显示系统警报?
解决方案
如果用户已经拒绝,则无法显示系统警报。您可以做的最好的事情是检查权限,如果他们被拒绝,则显示带有打开应用程序设置按钮的警报。
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()
}
}
推荐阅读
- spring - Spring Data MongoDB + Spring Boot 启动两次?
- php - 为 foreach() Laravel 5.5 提供的参数无效
- php - 使用会话变量比多次读取 ini 文件更有效
- django - Django Race Condition 当在 form_valid 中增加使用表时
- java - 如何从 OpenStreetMaps API 的给定地址获取坐标
- aem - 在 AEM 6.5 中设置 SSL 的 Curl 命令
- php - 无法连接到 MySQL-DB:意外的 T_STRING
- r - 在闪亮的小工具中创建全屏 DT 表小部件
- java - 如何以编程方式挂断奥利奥及以上的电话?
- node.js - 带有 Ghost 源的 Gatsby Lunr 插件