iOS權(quán)限相關(guān)的檢測和申請
在iOS開發(fā)過程中常用到的權(quán)限整理如下:
- 相冊權(quán)限檢測
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch (status) {
case PHAuthorizationStatusNotDetermined:
NSLog(@"用戶還未做出任何選擇");
break;
case PHAuthorizationStatusRestricted:
NSLog(@"權(quán)限收到限制仿野,可能是家長控制權(quán)限");
break;
case PHAuthorizationStatusDenied:
NSLog(@"沒有授權(quán)");
break;
case PHAuthorizationStatusAuthorized:
NSLog(@"已經(jīng)授權(quán)");
break;
default:
break;
}
相冊權(quán)限申請
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
if (status == PHAuthorizationStatusAuthorized) {
NSLog(@"同意授權(quán)");
}else{
NSLog(@"未同意或未選擇");
}
}];
- 相機權(quán)限檢測
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if (status == AVAuthorizationStatusAuthorized) {
NSLog(@"有權(quán)限");
}else{
NSLog(@"沒有");
}
相機權(quán)限申請
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
if (granted) {
NSLog(@"同意");
}
}];
麥克風(fēng)
把上面的AVMediaTypeVideo換成AVMediaTypeAudio即可網(wǎng)絡(luò)權(quán)限
需要進入頭文件#import <CoreTelephony/CTCellularData.h
CTCellularData *cellularData = [CTCellularData new];
CTCellularDataRestrictedState state = [cellularData restrictedState];
if (state == kCTCellularDataRestricted) {
NSLog(@"kCTCellularDataRestricted");
}else if (state == kCTCellularDataNotRestricted){
NSLog(@"kCTCellularDataNotRestricted");
}else{
NSLog(@"kCTCellularDataRestrictedStateUnknown");
}
- 推送權(quán)限檢測
UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
switch (setting.types) {
case UIUserNotificationTypeNone:
NSLog(@"在收到通知后耻陕,應(yīng)用程序可能不呈現(xiàn)任何UI镣屹。");
break;
case UIUserNotificationTypeBadge:
NSLog(@"應(yīng)用程序可以在收到通知時標記其圖標。");
break;
case UIUserNotificationTypeSound:
NSLog(@"應(yīng)用程序可以在接收到通知時播放聲音猪叙。");
break;
case UIUserNotificationTypeAlert:
NSLog(@"應(yīng)用程序可以在接收到通知時顯示警報。");
break;
default:
break;
}
推送權(quán)限申請
UIUserNotificationSettings *requeatSet = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge categories:nil];
[[UIApplication sharedApplication] registerUserNotificationSettings:requeatSet];
- 通訊錄權(quán)限檢測
//ios9之前,檢測
ABAuthorizationStatus status = ABAddressBookGetAuthorizationStatus();
if (status == kABAuthorizationStatusAuthorized) {
NSLog(@"有權(quán)限");
}else{
NSLog(@"沒有");
}
//iOS9及以上,檢測
CNAuthorizationStatus statu = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
if (statu == CNAuthorizationStatusAuthorized) {
NSLog(@"有權(quán)限");
}else{
NSLog(@"沒有");
}
通訊錄權(quán)限申請
//ios9之前眷篇,申請
ABAddressBookRef ref = ABAddressBookCreate();
ABAddressBookRequestAccessWithCompletion(ref, ^(bool granted, CFErrorRef error) {
if (granted) {
NSLog(@"同意");
}
});
//iOS9及以上,申請
CNContactStore *store = [CNContactStore new];
[store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
if (granted) {
NSLog(@"同意");
}
}];
- 定位權(quán)限檢測
引入頭文件#import <CoreLocation/CoreLocation.h>
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
switch (status) {
case kCLAuthorizationStatusNotDetermined:
NSLog(@"kCLAuthorizationStatusNotDetermined");
break;
case kCLAuthorizationStatusRestricted:
NSLog(@"kCLAuthorizationStatusRestricted");
break;
case kCLAuthorizationStatusDenied:
NSLog(@"kCLAuthorizationStatusDenied");
break;
case kCLAuthorizationStatusAuthorizedAlways:
NSLog(@"kCLAuthorizationStatusAuthorizedAlways");
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
NSLog(@"kCLAuthorizationStatusAuthorizedWhenInUse");
break;
default:
break;
}
定位權(quán)限申請
CLLocationManager *manager = [CLLocationManager new];
[manager requestAlwaysAuthorization];
[manager requestWhenInUseAuthorization];
manager.delegate = self;
//代理方法中判斷用戶的選擇
- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status{
switch (status) {
case kCLAuthorizationStatusNotDetermined:
NSLog(@"kCLAuthorizationStatusNotDetermined");
break;
case kCLAuthorizationStatusRestricted:
NSLog(@"kCLAuthorizationStatusRestricted");
break;
case kCLAuthorizationStatusDenied:
NSLog(@"kCLAuthorizationStatusDenied");
break;
case kCLAuthorizationStatusAuthorizedAlways:
NSLog(@"kCLAuthorizationStatusAuthorizedAlways");
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
NSLog(@"kCLAuthorizationStatusAuthorizedWhenInUse");
break;
default:
break;
}
}