美文网首页
iOS7及以上版本麦克风权限操作

iOS7及以上版本麦克风权限操作

作者: CodingTom | 来源:发表于2021-03-10 13:55 被阅读0次

    https://www.jianshu.com/p/8d418aea7221

    
    + (NSInteger)authorizationStatus
    {
        if ( @available(iOS 8,*) ){
            return [[AVAudioSession sharedInstance] recordPermission];
        }
        else if (@available(iOS 7,*))
        {
            bool hasBeenAsked =
            [[NSUserDefaults standardUserDefaults] boolForKey:kHasBeenAskedForMicrophonePermission];
            if (hasBeenAsked) {
                dispatch_semaphore_t sema = dispatch_semaphore_create(0);
                __block BOOL hasAccess;
                [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
                    hasAccess = granted;
                    dispatch_semaphore_signal(sema);
                }];
                dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
                
                return hasAccess ? 2 : 1;
            } else {
                return 0;
            }
        }
        else
            return 2;
    }
    
    + (void)authorizeWithCompletion:(void(^)(BOOL granted,BOOL firstTime))completion
    {
        AVAudioSession *audioSession = [AVAudioSession sharedInstance];
    
        if (@available(iOS 8.0, *)) {
    
            AVAudioSessionRecordPermission permission = [audioSession recordPermission];
            switch (permission) {
                case AVAudioSessionRecordPermissionGranted: {
                    if (completion) {
                        completion(YES, NO);
                    }
                }
                    break;
                case AVAudioSessionRecordPermissionDenied: {
                    if (completion) {
                        completion(NO, NO);
                    }
                }
                    break;
                case AVAudioSessionRecordPermissionUndetermined:
                {
                    AVAudioSession *session = [[AVAudioSession alloc] init];
                    NSError *error;
                    [session setCategory:@"AVAudioSessionCategoryPlayAndRecord" error:&error];
                    [session requestRecordPermission:^(BOOL granted) {
                        if (completion) {
                            dispatch_async(dispatch_get_main_queue(), ^{
                                completion(granted,YES);
                            });
                        }
                    }];
                }
                    break;
                default:
                {
                    completion(NO,YES);
                }
                    break;
            }
        }
        else if([audioSession respondsToSelector:@selector(requestRecordPermission:)])
        {
            [audioSession requestRecordPermission:^(BOOL granted) {
                
                NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
    
                if (completion) {
                    BOOL hasBeenAskedPermission = [ud boolForKey:kHasBeenAskedForMicrophonePermission];
                    dispatch_async(dispatch_get_main_queue(), ^{
                        completion(granted,!hasBeenAskedPermission);
                    });
                }
                
                [ud setBool:YES forKey:kHasBeenAskedForMicrophonePermission];
                [ud synchronize];
            }];
        }
        else
        {
            completion(YES, NO);
        }
    }
    
    

    相关文章

      网友评论

          本文标题:iOS7及以上版本麦克风权限操作

          本文链接:https://www.haomeiwen.com/subject/ckswqltx.html