Bunny
在 iOS 中屎媳,權(quán)限申請?zhí)崾究蛑粫谟脩舭惭b軟件后第一次申請時才會提示出來绳姨,如果用戶到"設(shè)置->隱私->權(quán)限"處關(guān)閉了權(quán)限佃牛,此時荣堰,當(dāng)你 APP 須要某權(quán)限時床未,系統(tǒng)將不會再次提示。當(dāng)我們從用戶角度出發(fā)去看待這個 APP 時振坚,這樣的 APP 很不人性化薇搁。為了提高軟件的人性化,我們可以這樣做渡八,判斷用戶之前是否申請過此類權(quán)限啃洋,如果沒有申請,則不讓用戶進(jìn)行下一步操作屎鳍。
以相機授權(quán)狀態(tài)為例宏娄,以下各授權(quán)狀態(tài)類似
// 授權(quán)狀態(tài)
AVAuthorizationStatusNotDetermined: 第一次請求權(quán)限
AVAuthorizationStatusRestricted: 受家長模式控制
AVAuthorizationStatusDenied: 拒絕權(quán)限授權(quán)
AVAuthorizationStatusAuthorized: 已授權(quán)
1、相機
#import <AVFoundation/AVFoundation.h>
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
switch (authStatus) {
case AVAuthorizationStatusNotDetermined:
case AVAuthorizationStatusRestricted:
case AVAuthorizationStatusDenied:
case AVAuthorizationStatusAuthorized:
}
2哥艇、定位
#import <CoreLocation/CoreLocation.h>
CLAuthorizationStatus authStatus = [CLLocationManager authorizationStatus];
switch (authStatus) {
case kCLAuthorizationStatusNotDetermined:
case kCLAuthorizationStatusRestricted:
case kCLAuthorizationStatusDenied:
case kCLAuthorizationStatusAuthorizedAlways:
case kCLAuthorizationStatusAuthorizedWhenInUse:
}
3绝编、日歷
EKAuthorizationStatus authStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
switch (authStatus) {
case EKAuthorizationStatusNotDetermined:
case EKAuthorizationStatusRestricted:
case EKAuthorizationStatusDenied:
case EKAuthorizationStatusAuthorized:
}
4僻澎、提醒事項
EKAuthorizationStatus authStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeReminder];
switch (authStatus) {
case EKAuthorizationStatusNotDetermined:
case EKAuthorizationStatusRestricted:
case EKAuthorizationStatusDenied:
case EKAuthorizationStatusAuthorized:
}
5貌踏、相冊
if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) {
ALAuthorizationStatus authStatus =[ALAssetsLibrary authorizationStatus];
switch (authStatus) {
case ALAuthorizationStatusNotDetermined:
case ALAuthorizationStatusRestricted:
case ALAuthorizationStatusDenied:
case ALAuthorizationStatusAuthorized:
}
} else {
PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus];
switch (authStatus) {
case PHAuthorizationStatusNotDetermined:
case PHAuthorizationStatusRestricted:
case PHAuthorizationStatusDenied:
case PHAuthorizationStatusAuthorized:
}
}
6、通知
UIUserNotificationType type = [[UIApplication sharedApplication] currentUserNotificationSettings].types;
switch (type) {
case UIUserNotificationTypeNone: {
// 沒有授權(quán)
}
case UIUserNotificationTypeBadge:
case UIUserNotificationTypeSound:
case UIUserNotificationTypeAlert:
}
7窟勃、麥克風(fēng)
AVAudioSessionRecordPermission authStatus = [[AVAudioSession sharedInstance] recordPermission];
switch (authStatus) {
case AVAudioSessionRecordPermissionUndetermined: {
// 第一次授權(quán)
}
case AVAudioSessionRecordPermissionDenied:
case AVAudioSessionRecordPermissionGranted: {
// 授權(quán)成功
}
}
8祖乳、健康(Health)
HKHealthStore *healthStore = [[HKHealthStore alloc] init];
HKObjectType *hkObjectType = [HKObjectType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeight];
HKAuthorizationStatus authStatus = [healthStore authorizationStatusForType:hkObjectType];
switch (authStatus) {
case HKAuthorizationStatusNotDetermined:
case HKAuthorizationStatusSharingDenied:
case HKAuthorizationStatusSharingAuthorized:
}
9、通訊錄
if ([[[UIDevice currentDevice] systemVersion] floatValue] > 9.0) {
CNAuthorizationStatus authStatus = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
switch (authStatus) {
case CNAuthorizationStatusNotDetermined:
case CNAuthorizationStatusRestricted:
case CNAuthorizationStatusDenied:
case CNAuthorizationStatusAuthorized:
}
}else {
ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus();
switch (authStatus) {
case kABAuthorizationStatusNotDetermined:
case kABAuthorizationStatusRestricted:
case kABAuthorizationStatusDenied:
case kABAuthorizationStatusAuthorized:
}
}
10秉氧、網(wǎng)絡(luò)
CTCellularData *cellularData = [[CTCellularData alloc] init];
CTCellularDataRestrictedState authStatus = cellularData.restrictedState;
switch (authStatus) {
case kCTCellularDataRestrictedStateUnknown:
// 第一次請求
case kCTCellularDataRestricted:
// 權(quán)限被禁止
case kCTCellularDataNotRestricted:
// 權(quán)限已授權(quán)
}