iOS应用部分权限控制
整理下iOS开发中常用的权限控制,只整理里一些常用的并不全。
#import<Foundation/Foundation.h>typedefvoid(^AuthorizedFinishBlock)();@interfaceLYAuthorizedMaster:NSObject#pragmamark-摄像头权限+(BOOL)checkCameraAuthority;+(void)cameraAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;#pragmamark-麦克风权限+(BOOL)checkAudioAuthority;+(void)audioAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;#pragmamark-相册权限+(BOOL)checkAlbumAuthority;+(void)albumAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;#pragmamark-推送通知权限+(BOOL)checkPushNotificationAuthority;+(void)pushNotificationAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;#pragmamark-推送通知权限+(BOOL)checkLocationAuthority;+(void)locationAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;#pragmamark-通讯录权限+(BOOL)checkAddressBookAuthority;+(void)AddressBookAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;
下面是.m文件
里面引入了很多库文件,也不是所用项目都会用到的,用不到的注掉就好。
#import"LYAuthorizedMaster.h"#import<AVFoundation/AVFoundation.h>//摄像头麦克风必须#import<AssetsLibrary/AssetsLibrary.h>//相册权限#import<CoreLocation/CoreLocation.h>//位置权限#import<AddressBook/AddressBook.h>//通讯录权限#import"AppDelegate.h"#definekAPPName[[[NSBundlemainBundle]infoDictionary]objectForKey:@"CFBundleName"]@implementationLYAuthorizedMaster#pragmamark-+(BOOL)checkAuthority:(AVAuthorizationStatus)_status{return(_status==AVAuthorizationStatusAuthorized)||(_status==AVAuthorizationStatusNotDetermined);}+(void)showAlertController:(AuthorizedFinishBlock)_blockdevice:(NSString*)_device{UIAlertController*_alertC=[UIAlertControlleralertControllerWithTitle:@"没有权限"message:[NSStringstringWithFormat:@"请开启‘%@’对%@的使用权限",kAPPName,_device]preferredStyle:UIAlertControllerStyleAlert];[_alertCaddAction:[UIAlertActionactionWithTitle:@"取消"style:UIAlertActionStyleCancelhandler:nil]];[_alertCaddAction:[UIAlertActionactionWithTitle:@"确定"style:UIAlertActionStyleDefaulthandler:^(UIAlertAction*action){[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:UIApplicationOpenSettingsURLString]];}]];[((AppDelegate*)[UIApplicationsharedApplication].delegate).window.rootViewControllerpresentViewController:_alertCanimated:YEScompletion:_block];}#pragmamark-摄像头权限+(BOOL)checkCameraAuthority{return[selfcheckAuthority:[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeVideo]];}+(void)cameraAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;{if([selfcheckCameraAuthority]){if(_success){_success();}}else{[selfshowAlertController:_faildevice:@"相机"];}}#pragmamark-麦克风权限+(BOOL)checkAudioAuthority{return[selfcheckAuthority:[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeAudio]];}+(void)audioAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail{if([selfcheckAudioAuthority]){if(_success){_success();}}else{[selfshowAlertController:_faildevice:@"麦克风"];}}#pragmamark-相册权限+(BOOL)checkAlbumAuthority{return[ALAssetsLibraryauthorizationStatus]==ALAuthorizationStatusAuthorized;}+(void)albumAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail;{if([selfcheckAlbumAuthority]){if(_success){_success();}}else{[selfshowAlertController:_faildevice:@"照片"];}}#pragmamark-位置权限+(BOOL)checkLocationAuthority{return[CLLocationManagerlocationServicesEnabled];}+(void)locationAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail{if([selfcheckLocationAuthority]){if(_success){_success();}}else{[selfshowAlertController:_faildevice:@"位置"];}}#pragmamark-推送通知权限+(BOOL)checkPushNotificationAuthority{return[[UIApplicationsharedApplication]currentUserNotificationSettings].types!=UIUserNotificationTypeNone;}+(void)pushNotificationAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail{if([selfcheckAlbumAuthority]){if(_success){_success();}}else{[selfshowAlertController:_faildevice:@"通知"];}}#pragmamark-通讯录权限+(BOOL)checkAddressBookAuthority{returnABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusAuthorized||ABAddressBookGetAuthorizationStatus()==kABAuthorizationStatusNotDetermined;}+(void)AddressBookAuthorityCheckSuccess:(AuthorizedFinishBlock)_successfail:(AuthorizedFinishBlock)_fail{if([selfcheckAddressBookAuthority]){if(_success){_success();}}else{[selfshowAlertController:_faildevice:@"通讯录"];}}
最后有些时会遇到不弹出权限提示,或需要在提示框增加详细描述的时候,需要手动在info.plist加一些字段。
NSLocationWhenInUseUsageDescription位置权限 使用期间 状态
NSLocationAlwaysUsageDescription位置权限 始终 状态
下面这些我并没有都试,所以也不知道是否正确....
NSLocationUsageDescription用于访问位置权限
NSCalendarsUsageDescription用于访问日历权限
NSContactsUsageDescription用于访问联络人
NSPhotoLibraryUsageDescription用于访问相册
NSRemindersUsageDescription用于访问提醒
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。