我在iOS 10上要求获得麦克风的许可时遇到了一个奇怪的问题。我把正确的plist属性(隐私 - 麦克风使用说明)和通过代码启用它。在我的手机上,麦克风工作/启用,我在手机的应用程序设置中看到它。但是,在朋友的手机上,麦克风会要求许可,但麦克风选项不会显示在应用程序的设置中。我在这里错过了什么,即使我正确设置权限?为什么我的手机会在设置中显示选项而不是我朋友的手机?我有iPhone SE,而我的朋友有iPhone 6s。
plist property:
<key>NSMicrophoneUsageDescription</key>
<string>Used to capture microphone input</string>
要求许可的代码:
if ([AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio] == AVAuthorizationStatusAuthorized) {
[self configureMicrophone];
}
else {
UIAlertController *deniedAlert = [UIAlertController alertControllerWithTitle:@"Use your microphone?"
message:@"The FOO APP requires access to your microphone to work!"
preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *action = [UIAlertAction actionWithTitle:@"Go to Settings" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action){
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}];
[deniedAlert addAction:action];
[self presentViewController:deniedAlert animated:YES completion:nil];
}
谢谢!
答案 0 :(得分:4)
您的代码不正确。您检查用户是否已获得权限。如果没有,则不要求许可。您只需显示一个警报,并选择转到设置页面。但如果您的应用从不请求使用麦克风的权限,则“设置”页面上不会设置麦克风。
您需要实际请求权限的代码。我有以下用于处理麦克风权限的代码:
+ (void)checkMicrophonePermissions:(void (^)(BOOL allowed))completion {
AVAudioSessionRecordPermission status = [[AVAudioSession sharedInstance] recordPermission];
switch (status) {
case AVAudioSessionRecordPermissionGranted:
if (completion) {
completion(YES);
}
break;
case AVAudioSessionRecordPermissionDenied:
{
// Optionally show alert with option to go to Settings
if (completion) {
completion(NO);
}
}
break;
case AVAudioSessionRecordPermissionUndetermined:
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
if (granted && completion) {
dispatch_async(dispatch_get_main_queue(), ^{
completion(granted);
});
}
}];
break;
}
}
您可以按如下方式调用:
[whateverUtilClass checkMicrophonePermissions:^(BOOL allowed) {
if (allowed) {
[self configureMicrophone];
}
}];