+ (void)checkAuthorizationForMediaType:(AVMediaType)mediaType
completion:(void (^)(BOOL authorized, BOOL shouldSetting))completion {
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
switch (status) {
case AVAuthorizationStatusDenied: {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(NO, YES);
});
} break;
case AVAuthorizationStatusRestricted: {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(NO, NO);
});
} break;
case AVAuthorizationStatusAuthorized: {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(YES, NO);
});
} break;
case AVAuthorizationStatusNotDetermined: {
[AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(granted, NO);
});
}];
} break;
default:
break;
}
}
+ (void)checkAuthorizationForPhotoLibraryCompletion:(void (^)(BOOL authorized, BOOL shouldSetting))completion {
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch (status) {
case PHAuthorizationStatusDenied: {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(NO, YES);
});
} break;
case PHAuthorizationStatusRestricted: {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(NO, NO);
});
} break;
case PHAuthorizationStatusAuthorized: {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(YES, NO);
});
} break;
case PHAuthorizationStatusNotDetermined: {
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
dispatch_async(dispatch_get_main_queue(), ^{
if (status == PHAuthorizationStatusAuthorized) {
!completion ?: completion(YES, NO);
} else {
!completion ?: completion(NO, NO);
}
});
}];
} break;
default:
break;
}
}
+ (void)checkSystemContactsAuthorizationCompletion:(void (^)(BOOL, BOOL))completion {
switch ([CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts]) {
case CNAuthorizationStatusAuthorized: {
// 存在权限
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(YES, NO);
});
} break;
case CNAuthorizationStatusNotDetermined: {
// 权限未知
CNContactStore *store = [[CNContactStore alloc] init];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError *_Nullable error) {
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(granted, !granted);
});
}];
} break;
case CNAuthorizationStatusRestricted:
case CNAuthorizationStatusDenied: {
// 如果没有权限 需要提示
dispatch_async(dispatch_get_main_queue(), ^{
!completion ?: completion(NO, YES);
});
} break;
}
}
网友评论