// // Copyright © 2016年 dahua. All rights reserved. // #import #import #import #import #import #import #import @interface LCPermissionHelper () @property (strong, nonatomic) CLLocationManager *locationManager; @end @implementation LCPermissionHelper - (void)requestAlwaysLocationPermissions:(BOOL)always completion:(void (^)(BOOL granted))completion { //先判断总定位服务是否可用(设置-->隐私-->定位服务,而不是app自己的定位服务) if (![CLLocationManager locationServicesEnabled]) { if (completion) { completion(NO); } return; } BOOL locationEnable = [CLLocationManager locationServicesEnabled]; if (!self.locationManager) { self.locationManager = [[CLLocationManager alloc] init]; } CLAuthorizationStatus status = [CLLocationManager authorizationStatus]; dispatch_async(dispatch_get_main_queue(), ^{ if (!locationEnable || (status < 3 && status > 0)) { if (completion) { completion(NO); } } else if (status == kCLAuthorizationStatusNotDetermined){ //获取授权认证 if (always) { [self.locationManager requestAlwaysAuthorization]; } else { [self.locationManager requestWhenInUseAuthorization]; //使用时开启定位 } } else { if (always) { if (status == kCLAuthorizationStatusAuthorizedAlways) { if (completion) { completion(YES); } } else { if (completion) { completion(NO); } } } else { if (completion) { completion(YES); } } } }); } + (void)requestAudioPermission:(void (^)(BOOL granted))completion { //申请对讲权限 AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]; if (authStatus == AVAuthorizationStatusAuthorized) { dispatch_async(dispatch_get_main_queue(), ^{ completion(true); }); } else if (authStatus == AVAuthorizationStatusNotDetermined) { [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) { dispatch_async(dispatch_get_main_queue(), ^{ completion(granted); }); }]; } else { dispatch_async(dispatch_get_main_queue(), ^{ [LCSetJurisdictionHelper setJurisdictionAlertView:@"mobile_common_permission_apply".lc_T message:@"mobile_common_permission_explain_record_audio".lc_T]; completion(false); }); } } + (void)requestCameraPermission:(void (^)(BOOL granted))completion { //申请摄像头权限 AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; if (authStatus == AVAuthorizationStatusAuthorized) { dispatch_async(dispatch_get_main_queue(), ^{ completion(true); }); } else if (authStatus == AVAuthorizationStatusNotDetermined) { [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { dispatch_async(dispatch_get_main_queue(), ^{ completion(granted); }); }]; } else { dispatch_async(dispatch_get_main_queue(), ^{ [LCSetJurisdictionHelper setJurisdictionAlertView:@"mobile_common_permission_apply".lc_T message:@"mobile_common_permission_explain_camera".lc_T]; completion(false); }); } } + (void)requestAlbumPermission:(void (^)(BOOL granted))completion { //申请相册访问权限 PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus]; if (authStatus == PHAuthorizationStatusAuthorized) { dispatch_async(dispatch_get_main_queue(), ^{ completion(true); }); } else if (authStatus == PHAuthorizationStatusNotDetermined) { [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) { dispatch_async(dispatch_get_main_queue(), ^{ completion(status == PHAuthorizationStatusAuthorized); }); }]; } else { dispatch_async(dispatch_get_main_queue(), ^{ [LCSetJurisdictionHelper setJurisdictionAlertView:@"mobile_common_permission_apply".lc_T message:@"mobile_common_permission_explain_album".lc_T]; completion(false); }); } } + (void)requestContacePermission:(void (^)(BOOL granted))completion complete:(void (^)(NSInteger))complete{ //申请通讯录访问权限 if (@available(iOS 9.0, *)) { CNAuthorizationStatus authStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]; if (authStatus == CNAuthorizationStatusAuthorized) { dispatch_async(dispatch_get_main_queue(), ^{ completion(true); }); } else if (authStatus == CNAuthorizationStatusNotDetermined) { CNContactStore *store = [[CNContactStore alloc] init]; [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { dispatch_async(dispatch_get_main_queue(), ^{ completion(granted); }); }]; } else { dispatch_async(dispatch_get_main_queue(), ^{ [LCSetJurisdictionHelper setJurisdictionAlertView:@"mobile_common_permission_apply".lc_T message:@"mobile_common_permission_explain_contact".lc_T complete:^(NSInteger index) { complete(index); }]; completion(false); }); } } else { // Fallback on earlier versions ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus(); if (authStatus == kABAuthorizationStatusAuthorized) { dispatch_async(dispatch_get_main_queue(), ^{ completion(true); }); } else if (authStatus == kABAuthorizationStatusNotDetermined) { ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) { dispatch_async(dispatch_get_main_queue(), ^{ completion(granted); }); }); } else { dispatch_async(dispatch_get_main_queue(), ^{ [LCSetJurisdictionHelper setJurisdictionAlertView:@"mobile_common_permission_apply".lc_T message:@"mobile_common_permission_explain_contact".lc_T complete:^(NSInteger index) { complete(index); }]; completion(false); }); } } } @end