OC 简单实现相机、相册、定位的权限管理类

创建管理类:

typedef NS_ENUM(NSUInteger,AuthorizationStatus){
    /**不确定*/
    AuthorizationStatusNotDetermined,//不确定,此时系统尚未向用户申请权限
    /**用户禁止该权限*/
    AuthorizationStatusDenied,
    /**用户已经授权*/
    AuthorizationStatusAuthorized
};
@interface AuthorizationManager : NSObject
+(instancetype)manager;
/**是否有相机权限*/
- (AuthorizationStatus)canUseCamera;
/**请求相机权限 仅用于被用户拒绝权限后的再次申请*/
- (void)requestAuthorizationForCamera;
/**是否有相册权限*/
- (AuthorizationStatus)canUsePhotoLibrary;
/**请求相册权限 仅用于被用户拒绝权限后的再次申请*/
- (void)requestAuthorizationForPhotoLibrary;
/**是否有麦克风权限*/
- (AuthorizationStatus)canUseMicrophone;
/**请求麦克风权限 仅用于被用户拒绝权限后的再次申请*/
- (void)requestAuthorizationForMicrophone;
/**是否有定位权限 仅用于被用户拒绝权限后的再次申请*/
- (AuthorizationStatus)canUseLocation;
/**请求定位权限*/
- (void)requestAuthorizationForLocation;

@end

#import "AuthorizationManager.h"

@implementation AuthorizationManager
+ (instancetype)manager {
    static AuthorizationManager *manager;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        manager = [[AuthorizationManager alloc]init];
    });
    return manager;
}
- (AuthorizationStatus)canUseCamera {
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (status == AVAuthorizationStatusRestricted || status == AVAuthorizationStatusDenied) {
        return AuthorizationStatusDenied;
    }
    if (status == AVAuthorizationStatusAuthorized) {
        return AuthorizationStatusAuthorized;
    }
    return AuthorizationStatusNotDetermined;
}
- (void)requestAuthorizationForCamera{
    if ([[AuthorizationManager manager] canUseCamera] == AuthorizationStatusDenied) {
       [[AuthorizationManager manager]alertWithTitle:@"无法使用相机" Message:@"请在设置中允许使用相机"];
    }
    
}

- (AuthorizationStatus)canUsePhotoLibrary {
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusDenied || status == PHAuthorizationStatusRestricted ) {
        return AuthorizationStatusDenied;
    }
    if (status == PHAuthorizationStatusAuthorized) {
        return AuthorizationStatusAuthorized;
    }
    return AuthorizationStatusNotDetermined;
}
- (void)requestAuthorizationForPhotoLibrary {
    if ([[AuthorizationManager manager] canUsePhotoLibrary] == AuthorizationStatusDenied) {
        [[AuthorizationManager manager]alertWithTitle:@"无法使用相册" Message:@"请在设置中允许使用相册"];
    }
}

- (AuthorizationStatus)canUseMicrophone {
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
    if (status == AVAuthorizationStatusRestricted || status == AVAuthorizationStatusDenied) {
        return AuthorizationStatusDenied;
    }
    if (status == AVAuthorizationStatusAuthorized) {
        return AuthorizationStatusAuthorized;
    }
    return AuthorizationStatusNotDetermined;
}
- (void)requestAuthorizationForMicrophone {
    if ([[AuthorizationManager manager] canUseMicrophone] == AuthorizationStatusDenied) {
        [[AuthorizationManager manager]alertWithTitle:@"无法使用麦克风" Message:@"请在设置中允许使用麦克风"];
    }
}

-(AuthorizationStatus)canUseLocation {
    CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
    if (status == kCLAuthorizationStatusDenied || status == kCLAuthorizationStatusRestricted) {
        return AuthorizationStatusDenied;
    }
    if (status == kCLAuthorizationStatusAuthorizedAlways || status == kCLAuthorizationStatusAuthorizedWhenInUse) {
        return AuthorizationStatusAuthorized;
    }
    return AuthorizationStatusNotDetermined;
}
- (void)requestAuthorizationForLocation {
    if ([[AuthorizationManager manager] canUseLocation] == AuthorizationStatusDenied) {
        [[AuthorizationManager manager]alertWithTitle:@"无法使用定位" Message:@"请在设置中允许使用定位"];
    }
}

- (UIViewController *)viewController {
    UIViewController *vc = [[UIApplication sharedApplication].keyWindow rootViewController];
    return vc;
}
- (void)alertWithTitle:(NSString *)title Message:(NSString *)message {
    UIAlertController *alertC = [UIAlertController alertControllerWithTitle:title message:message preferredStyle:UIAlertControllerStyleAlert];
    UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    }];
    [alertC addAction:action1];
    [alertC addAction:action2];
    [[[AuthorizationManager manager] viewController] presentViewController:alertC animated:YES completion:nil];
}
@end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值