如何在iOS 7中检测麦克风输入权限被拒绝

时间:2013-09-05 00:06:06

标签: cocoa-touch ios7

我想检测用户何时拒绝iOS应用程序上的麦克风权限。 我在尝试录制麦克风时只获得此值:-120.000000 db

但在此之前我必须设置一个AVAudioSession。还有其他功能吗?

我在输出中收到了这条消息: Microphone input permission refused - will record only silence

感谢。

4 个答案:

答案 0 :(得分:51)

如果您仍在使用iOS SDK 6.0进行编译(就像我一样),您必须比@Luis E. Prado更加间接,因为requestRecordPermission方法不存在。

我是这样做的。如果您使用ARC,请删除自动释放位。在iOS6上没有任何反应,在iOS7上会记录“麦克风已启用”消息或弹出警报。

AVAudioSession *session = [AVAudioSession sharedInstance];
if ([session respondsToSelector:@selector(requestRecordPermission:)]) {
    [session performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
        if (granted) {
            // Microphone enabled code
            NSLog(@"Microphone is enabled..");
        }
        else {
            // Microphone disabled code
            NSLog(@"Microphone is disabled..");

            // We're in a background thread here, so jump to main thread to do UI work.
            dispatch_async(dispatch_get_main_queue(), ^{
                [[[[UIAlertView alloc] initWithTitle:@"Microphone Access Denied"
                                        message:@"This app requires access to your device's Microphone.\n\nPlease enable Microphone access for this app in Settings / Privacy / Microphone"
                                       delegate:nil
                              cancelButtonTitle:@"Dismiss"
                              otherButtonTitles:nil] autorelease] show];
            });
        }
    }];
}

编辑:事实证明,withObject块是在后台线程中执行的,所以不要在那里做任何UI工作,否则你的应用可能会挂起。我已经调整了上面的代码。一位客户指出了这一点,感谢测试版。为错误道歉。

答案 1 :(得分:42)

请注意,这仅适用于使用Xcode 5而不是4.6

构建的情况

将AVFoundation Framework添加到您的项目中

然后从AVFoundation框架导入AVAudioSession头文件,您要在其中检查麦克风设置是否已启用

#import <AVFoundation/AVAudioSession.h>

然后简单地调用此方法

[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
            if (granted) {
                // Microphone enabled code
            }
            else {
                // Microphone disabled code
            }
        }];

第一次运行此方法时,它将显示允许麦克风访问的提示,并根据用户响应执行完成块。从第二次开始,它将根据设备上存储的设置进行操作。

答案 2 :(得分:2)

快速回答:

if AVAudioSession.sharedInstance().recordPermission() == .Denied {
    print("Microphone permission refused");
}

或者您可以使用PermissionScope等框架来轻松检查权限。 https://github.com/nickoneill/PermissionScope

编辑:Swift 3回答:

import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
    print("Microphone permission refused");
}

答案 3 :(得分:1)

如果我们被允许在Apple的devforums but I found the answer you're looking for there之外谈论iOS 7,我不是百分之百确定。

简而言之,您将在SDK中的AVAudioSession.h头文件中找到您的解决方案。如果您想在仍支持iOS 6的同时使用它,请确保使用“respondsToSelector:”来检查API的可用性。