본문 바로가기
ios 뽀개기/objective-c

ios 오디오 + 비디오 권한 체크 함수

by 인생여희 2018. 12. 20.
반응형

ios 오디오 + 비디오 권한 체크 함수


.h


#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

@interface PermissionsManager : NSObject  <UIAlertViewDelegate>



//음성녹음 권한체크

-(void)checkMicrophonePermissionsWithBlock :(void(^)(BOOL granted))block;



//카메라 권한 상태 체크

-(void)checkCameraAuthorizationsStatusWithBlock :(void(^)(BOOL granted))block;



@end


.m



#import "PermissionsManager.h"

#import <AVFoundation/AVFoundation.h>

@implementation PermissionsManager 

//오디오 권한 체크


- (void)checkMicrophonePermissionsWithBlock:(void (^)(BOOL granted))block{

    

    NSLog(@"PermissionManager - checkMicrophonePermissionsWithBlock 메소드 진입");

    //AVCaptureDevice에 미디어 타입으로 오디오 권한을 체크

    NSString *mediaType = AVMediaTypeAudio;

    [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {

        //오류발생 시

        if (!granted) {

            

            //UI 변경 시 메인쓰레드 사용

            dispatch_async(dispatch_get_main_queue(), ^{

                

                UIAlertView *alert = [[UIAlertView alloc]

                                      initWithTitle:@"오디오 권한"

                                      message:@"설정에서 Microphone 권한을 허용해주세요."

                                      delegate:self cancelButtonTitle:@"OK"

                                      otherButtonTitles:@"Settings", nil];

                

                alert.delegate = self;

                [alert show];

            });

        }

        if (block != nil) {

            block(granted);

        }

    }];

}


//카메라 권한 체크

- (void)checkCameraAuthorizationsStatusWithBlock:(void (^)(BOOL granted))block{

    NSLog(@"PermissionManager - checkCameraAuthorizationsStatusWithBlock 메소드 진입");

    

    //AVCaptureDevice에 미디어 타입으로 오디오 권한을 체크

    NSString *mediaType = AVMediaTypeVideo;

    [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {

        //오류발생 시

        if (!granted) {

            

            //메인ui 바꿀때는 메인쓰레드 사용

            dispatch_async(dispatch_get_main_queue(), ^{

                

                UIAlertView *alert = [[UIAlertView alloc]

                                      initWithTitle:@"카메라 권한"

                                      message:@"설정에서 카메라 권한을 허용해주세요."

                                      delegate:self cancelButtonTitle:@"OK"

                                      otherButtonTitles:@"설정", nil];

                

                alert.delegate = self;

                [alert show];

            });

        }

        if (block != nil) {

            block(granted);

        }

    }];

}


//설정 페이지 열어주기

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

    NSLog(@"PermissionManager - clickedButtonAtIndex 메소드 진입 - 설정 페이지 열기");

    if (buttonIndex == 1) {

        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

    }

}


@end

반응형

댓글