最近在开发过程中,遇到了权限问题。现整理一下供大家参考。
首先碰到权限问题,要在info.plist中配置,如下图:
1、相册权限校验,代码如下:
/**
校验相册权限
*/
+ (void)checkPhotoAuth:(void (^)(BOOL auth))result {
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_8_0 //iOS 8.0以下使用AssetsLibrary.framework
ALAuthorizationStatus status = [ALAssetsLibrary authorizationStatus];
switch (status) {
case ALAuthorizationStatusNotDetermined: //用户还没有选择(第一次)
{
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
if (*stop) {
//允许
if (result) {
dispatch_async(dispatch_get_main_queue(), ^{
result(YES);
});
}
return;
}
*stop = YES;
} failureBlock:^(NSError *error) {
//拒绝
if (result) {
dispatch_async(dispatch_get_main_queue(), ^{
result(NO);
});
}
}];
}
break;
case ALAuthorizationStatusRestricted: //家长控制
{
if (result) {
result(NO);
}
}
break;
case ALAuthorizationStatusDenied: //用户拒绝
{
if (result) {
result(NO);
}
}
break;
case ALAuthorizationStatusAuthorized: //已授权
{
if (result) {
result(YES);
}
}
break;
default:
break;
}
#else //iOS 8.0以上使用Photos.framework
PHAuthorizationStatus current = [PHPhotoLibrary authorizationStatus];
switch (current) {
case PHAuthorizationStatusNotDetermined: //用户还没有选择(第一次)
{
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
//授权
if (result) {
dispatch_async(dispatch_get_main_queue(), ^{
result(YES);
});
}
}else {
//其他
if (result) {
dispatch_async(dispatch_get_main_queue(), ^{
result(NO);
});
}
}
}];
}
break;
case PHAuthorizationStatusRestricted: //家长控制
{
if (result) {
result(NO);
}
}
break;
case PHAuthorizationStatusDenied: //用户拒绝
{
if (result) {
result(NO);
}
}
break;
case PHAuthorizationStatusAuthorized: //已授权
{
if (result) {
result(YES);
}
}
break;
default:
break;
}
#endif
}
2、相机权限校验,代码如下:
/**
校验相机权限
*/
+ (void)checkVideoAuth:(void (^)(BOOL auth))result {
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
switch (status) {
case AVAuthorizationStatusNotDetermined: //用户还没有选择(第一次)
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if (granted) { //授权
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(YES);
}
});
}else { //拒绝
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(NO);
}
});
}
}];
}
break;
case AVAuthorizationStatusRestricted: //家长控制
{
if (result) {
result(NO);
}
}
break;
case AVAuthorizationStatusDenied: //用户拒绝
{
if (result) {
result(NO);
}
}
break;
case AVAuthorizationStatusAuthorized: //已授权
{
if (result) {
result(YES);
}
}
break;
default:
break;
}
}
3、麦克风权限校验,代码如下:
/**
校验录音权限
*/
+ (void)checkAudioAuth:(void (^)(BOOL auth))result {
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
switch (status) {
case AVAuthorizationStatusNotDetermined: //用户还没有选择(第一次)
{
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {
if (granted) { //授权
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(YES);
}
});
}else { //拒绝
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(NO);
}
});
}
}];
}
break;
case AVAuthorizationStatusRestricted: //家长控制
{
if (result) {
result(NO);
}
}
break;
case AVAuthorizationStatusDenied: //用户拒绝
{
if (result) {
result(NO);
}
}
break;
case AVAuthorizationStatusAuthorized: //已授权
{
if (result) {
result(YES);
}
}
break;
default:
break;
}
}
4、通讯录权限校验,代码如下:
/**
校验通讯录权限
*/
+ (void)checkAddressBookAuth:(void (^)(BOOL auth))result {
#if __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_9_0
ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
switch (status) {
case kABAuthorizationStatusNotDetermined: //用户还没有选择(第一次)
{
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL);
ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error) {
if (granted) { //授权
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(YES);
}
});
}else { //拒绝
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(NO);
}
});
}
});
}
break;
case kABAuthorizationStatusRestricted: //家长控制
{
if (result) {
result(NO);
}
}
break;
case kABAuthorizationStatusDenied: //用户拒绝
{
if (result) {
result(NO);
}
}
break;
case kABAuthorizationStatusAuthorized: //已授权
{
if (result) {
result(YES);
}
}
break;
default:
break;
}
#else
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
switch (status) {
case CNAuthorizationStatusNotDetermined: //用户还没有选择(第一次)
{
CNContactStore *contactStore = [[CNContactStore alloc] init];
[contactStore requestAccessForEntityType:CNEntityTypeContacts
completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) { //授权
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(YES);
}
});
}else { //拒绝
dispatch_async(dispatch_get_main_queue(), ^{
if (result) {
result(NO);
}
});
}
}];
}
break;
case CNAuthorizationStatusRestricted: //家长控制
{
if (result) {
result(NO);
}
}
break;
case CNAuthorizationStatusDenied: //用户拒绝
{
if (result) {
result(NO);
}
}
break;
case CNAuthorizationStatusAuthorized: //已授权
{
if (result) {
result(YES);
}
}
break;
default:
break;
}
#endif
}
好了,到此结束。