我如何向用户请求麦克风记录许可

22 objective-c ios7 xcode5

我正在使用新的iOS7开发人员SDK,现在应用程序请求用户在第一次尝试录制时允许他从麦克风录制. 在此输入图像描述

我的应用程序将在倒计时后记录,因此用户无法看到此请求.我用这段代码来检查requestRecordPermission:

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

但是在开始录制之前我怎么能自己触发请求呢?

One*_*rew 27

在新的iOS7中,它非常简单,试试这个:

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission)])
{
    [[AVAudioSession sharedInstance] requestRecordPermission];
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上在iOS7中,这个功能需要使用块,可以这样调用:[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL response){NSLog(@"允许麦克风使用响应:%d",响应); }]; (6认同)

小智 11

这是最终的代码片段,对我有用.它支持Xcode 4和5,适用于iOS5 +.

#ifndef __IPHONE_7_0
    typedef void (^PermissionBlock)(BOOL granted);
#endif

    PermissionBlock permissionBlock = ^(BOOL granted) {
        if (granted)
        {
            [self doActualRecording];
        }
        else
        {
            // Warn no access to microphone
        }
    };

    // iOS7+
    if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)])
    {
        [[AVAudioSession sharedInstance] performSelector:@selector(requestRecordPermission:)
                                              withObject:permissionBlock];
    }
    else
    {
        [self doActualRecording];
    }
Run Code Online (Sandbox Code Playgroud)


Ida*_*dan 7

正如"One Man Crew"声称你可以使用requestRecordPermission.

需要注意的重要一点是,您必须检查requestRecordPermission是否已实现.原因是,如果您的应用程序可以在较旧的iOS版本(例如iOS 6.x)上运行,则在此调用后它将崩溃.为了防止这种情况,你必须检查这个选择器是否已经实现(无论如何这是一个好习惯).

代码应该是这样的:

if([[AVAudioSession sharedInstance] respondsToSelector:@selector(requestRecordPermission:)]){
    [[AVAudioSession sharedInstance] requestRecordPermission];
}
Run Code Online (Sandbox Code Playgroud)

使用此方法,您的应用程序将支持新操作系统以及以前版本的操作系统.

每次Apple为新操作系统添加更多功能时,我都会使用这种方法(这样我可以很容易地支持旧版本).

  • 我想你误解了我.简单来说,如果你在7.x之前在SDK上使用:requestRecordPermission你的应用程序将无法编译(Xcode 5之前的任何Xcode).如果您使用SDK 7.x(Xcode 5.x)并且没有实现对答案的检查,您的应用程序会在7.x之前的任何iOS上崩溃(iOS 5.x或iOS 6.x)希望更清楚现在. (2认同)