如何在启动时检查麦克风访问权限?
Posted
技术标签:
【中文标题】如何在启动时检查麦克风访问权限?【英文标题】:How to check for microphone access at time of launch? 【发布时间】:2014-01-15 16:18:38 【问题描述】:在我的应用程序中,我将使用麦克风进行一些录音。从 ios7.0 开始,在开始音频之前,会要求用户检查访问麦克风的权限。
我的应用中有一个“开始录制”按钮。这里首先检查用户的录制权限。
这是执行此操作的代码:
if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)])
[[AVAudioSession sharedInstance] performSelector:@selector(requestRecordPermission:)
withObject:permissionBlock];
#ifndef __IPHONE_7_0
typedef void (^PermissionBlock)(BOOL granted);
#endif
PermissionBlock permissionBlock = ^(BOOL granted)
NSLog(@"permissionBlock");
if (granted)
[self doActualRecording];
else
// Warn no access to microphone
;
现在,我想要求用户在用户启动应用程序时授权使用麦克风。然后当用户选择录制按钮时,它会再次弹出消息。
定位服务也有类似的功能。我如何才能访问麦克风?
【问题讨论】:
【参考方案1】:一旦用户拒绝了您应用的麦克风访问权限,您就无法再次向他们展示权限对话框。使用保存的设置。相反,您可以提示用户进入他们的设置并进行更改。
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted)
if (granted)
NSLog(@"granted");
else
NSLog(@"denied");
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Microphone Access Denied"
message:@"You must allow microphone access in Settings > Privacy > Microphone"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
];
【讨论】:
执行块在后台线程上执行。因此,不建议调用 UI 元素。看到这个:***.com/questions/18625738/…【参考方案2】:我也有同样的问题。请参阅this response 的相关问题,包括使用 AVAudioSession 检查和处理权限状态的示例代码,您可以对其进行自定义以提供所需的用户体验。
【讨论】:
@Matt,@davidfer。谢谢..你的解决方案给了我一个想法。以上是关于如何在启动时检查麦克风访问权限?的主要内容,如果未能解决你的问题,请参考以下文章
Flutter插件开发和iOS原生代码:避免应用启动时的权限请求?
为同一台机器上的两个应用程序实例处理 Mojave 权限(摄像头、麦克风和可访问性)