Cocoa touch 如何检测iOS 7中拒绝的麦克风输入权限

Cocoa touch 如何检测iOS 7中拒绝的麦克风输入权限,cocoa-touch,ios7,Cocoa Touch,Ios7,我想检测用户何时拒绝我的iOS应用程序上的麦克风权限。 我仅在尝试录制麦克风时获得此值:-120.000000 db 但在得到这个之前,我必须建立一个音频会话。还有其他功能吗 我在输出中得到了这样的信息: 麦克风输入权限被拒绝-将只录制静音 谢谢。我不能100%肯定我们是否可以在苹果的DevForum之外谈论iOS 7 简而言之,您将在SDK中的AVAudioSession.h头文件中找到解决方案。如果您想在仍然支持iOS 6的情况下使用它,请确保使用“respondsToSelector:”来

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

但在得到这个之前,我必须建立一个音频会话。还有其他功能吗

我在输出中得到了这样的信息:
麦克风输入权限被拒绝-将只录制静音


谢谢。

我不能100%肯定我们是否可以在苹果的DevForum之外谈论iOS 7


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

请注意,这仅在使用Xcode 5构建时有效,而不使用4.6

将AVFoundation框架添加到项目中

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

#import <AVFoundation/AVAudioSession.h>

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

如果您仍然使用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工作,否则您的应用程序可能会挂起。我已经调整了上面的代码。一位客户在谢天谢地的beta版本中指出了这一点。为错误道歉。

快速回答:

if AVAudioSession.sharedInstance().recordPermission() == .Denied {
    print("Microphone permission refused");
}
或者您可以使用类似PermissionScope的框架,该框架允许轻松检查权限

编辑:Swift 3答案:

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

请注意,此方法仅适用于iOS7及以上版本:我在iPad Air上遇到了这个解决方案的问题(仅限)。你知道这种设备是否有其他配置吗?@BetoBens我还没有听说过任何特定于这种型号的东西。问题是什么?当我在iPad Air中使用内置麦克风录制到文件时,会创建该文件,但当我播放时,不会听到声音,播放也不会停止,只会在该设备上发生。太奇怪了,我修好了。在iPadAir中录制声音时,我必须从设置会话中删除AvencoderBitracteKey。我想它一定与几个麦克风有关,因为我无法选择其他麦克风来保存我的声音文件。@BenClayton我们都知道苹果喜欢在没有发布说明的情况下更改类似的内容:)
import AVFoundation
...
if AVAudioSession.sharedInstance().recordPermission() == .denied {
    print("Microphone permission refused");
}