iOS 各種權(quán)限判斷及設(shè)置跳轉(zhuǎn)

iOS8之后用一下方法跳轉(zhuǎn)到設(shè)置界面

//手機(jī)系統(tǒng)版本號(hào)
#define SYSTEMVERSION [[[UIDevice currentDevice]systemVersion]floatValue]
//跳轉(zhuǎn)到設(shè)置界面,讓用戶開啟權(quán)限        
NSURL *url;        
if(SYSTEMVERSION >= 8.0)      
 {            
//iOS8 以后           
url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];            if ([[UIApplication sharedApplication] canOpenURL:url])           
[[UIApplication sharedApplication] openURL:url];      
 }

補(bǔ)充資料:

在iOS應(yīng)用程序中打開設(shè)備設(shè)置界面及其中某指定的選項(xiàng)界面

NSURL *url = [NSURL URLWithString:@“prefs:xxx"];
 if ([[UIApplication sharedApplication] canOpenURL:url])
 {     
    [[UIApplication sharedApplication] openURL:url]; 
 }

一些其他可用的參數(shù):
隱私下常用字段

@"prefs:root=Privacy&path=CAMERA"
,
//設(shè)置相機(jī)使用權(quán)限
@"prefs:root=Privacy&path=PHOTOS"
//設(shè)置照片使用權(quán)限

打開一級(jí)界面可將上面的字符串修改為以下對(duì)應(yīng)的字段:

@"prefs:root=WIFI"
,//打開WiFi

@"prefs:root=Bluetooth"
,//打開藍(lán)牙設(shè)置頁

@"prefs:root=NOTIFICATIONS_ID"
,//通知設(shè)置

@"prefs:root=General"
,//通用
@"prefs:root=DISPLAY&BRIGHTNESS",//顯示與亮度
@"prefs:root=Wallpaper",//墻紙
@"prefs:root=Sounds",//聲音
@"prefs:root=Privacy",//隱私
@"prefs:root=STORE",//存儲(chǔ)
@"prefs:root=NOTES",//備忘錄
@"prefs:root=SAFARI",//Safari
@"prefs:root=MUSIC",//音樂
@"prefs:root=Photos",//照片與相機(jī)
@"prefs:root=CASTLE"http://iCloud
@"prefs:root=FACETIME",//FaceTime
@"prefs:root=LOCATION_SERVICES",//定位服務(wù)
@"prefs:root=Phone",//電話
@"prefs:root=AIRPLANE_MODE"http://飛行模式 
@"prefs:root=General&path=Network"http://網(wǎng)絡(luò)
@"prefs:root=VIDEO"http://視頻

 prefs:root=CASTLE&path=STORAGE_AND_BACKUP// 
prefs:root=General&path=INTERNATIONAL//
prefs:root=ACCOUNT_SETTINGS// 
prefs:root=MUSIC&path=EQ// 
prefs:root=MUSIC&path=VolumeLimit// 
prefs:root=NIKE_PLUS_IPOD// 
prefs:root=General&path=ManagedConfigurationList// 
prefs:root=General&path=Reset// 
prefs:root=Sounds&path=Ringtone// 
prefs:root=General&path=Assistant// 
prefs:root=General&path=SOFTWARE_UPDATE_LINK// 
prefs:root=TWITTER// prefs:root=General&path=USAGE// 
prefs:root=General&path=Network/VPN//
prefs:root=INTERNET_TETHERING//

通用下常用字段

@"prefs:root=General&path=About",//關(guān)于本機(jī) 
@"prefs:root=General&path=SOFTWARE_UPDATE_LINK",//軟件更新 
@"prefs:root=General&path=DATE_AND_TIME",//日期和時(shí)間
@"prefs:root=General&path=ACCESSIBILITY",//輔助功能
@"prefs:root=General&path=Keyboard",//鍵盤 
@"prefs:root=General&path=VPN",//VPN設(shè)置 
@"prefs:root=General&path=AUTOLOCK",//自動(dòng)鎖屏
@"prefs:root=General&path=INTERNATIONAL",//語言與地區(qū) 
@"prefs:root=General&path=ManagedConfigurationList",//描述文件
prefs:root=General&path=ACCESSIBILITY//重力感應(yīng)  
prefs:root=General&path=USAGE/CELLULAR_USAGE//用量 

.m 方發(fā)聲明

#import <Foundation/Foundation.h>

typedef enum : NSUInteger {   
 systemAuthorityCamera,   
 systemAuthorityPhotoLibrary,  
 systemAuthorityNotifacation,   
 systemAuthorityNetwork,  
 systemAuthorityAudio,   
 systemAuthorityLocation,   
 systemAuthorityAddressBook,  
 systemAuthorityCalendar,    
systemAuthorityReminder,} systemAuthorityType;

@interface SystemAuthority : NSObject
/**
相機(jī)權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)CameraAuthority;
/**
相冊(cè)權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)PhotoLibraryAuthority;
/**
推送權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)notificationAuthority;
/**
連網(wǎng)權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)netWorkAuthority;
/**
麥克風(fēng)權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)audioAuthority;
/**
定位權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)locationAuthority;
/**
通訊錄權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)addressBookAuthority;
/**
日歷權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)calendarAuthority;
/**
備忘錄權(quán)限開關(guān)
@return YES/NO
*/
- (BOOL)reminderAuthority;
@end

.h 方法實(shí)現(xiàn)

#import "SystemAuthority.h"
#import <AVFoundation/AVFoundation.h>
#import <Photos/Photos.h>
#import <AssetsLibrary/AssetsLibrary.h>
@import CoreTelephony;
#import <UserNotifications/UserNotifications.h>
#import <CoreLocation/CoreLocation.h>
#import <AddressBook/AddressBook.h>
#import <Contacts/Contacts.h>
#import <EventKit/EventKit.h>

//手機(jī)系統(tǒng)版本號(hào)
#define SYSTEMVERSION [[[UIDevice currentDevice]systemVersion]floatValue]


@implementation SystemAuthority

- (BOOL)CameraAuthority
{
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (authStatus == AVAuthorizationStatusDenied || authStatus == AVAuthorizationStatusRestricted) {
        [self showAlertWithType:systemAuthorityCamera];
        return NO;
    }
    return YES;
}


- (BOOL)PhotoLibraryAuthority
{
    if (SYSTEMVERSION >= 8.0) {
        PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus];
        if(authStatus == PHAuthorizationStatusDenied || authStatus == PHAuthorizationStatusRestricted) {
            // 未授權(quán)
            [self showAlertWithType:systemAuthorityPhotoLibrary];
            return NO;
        }
    }
    else if (SYSTEMVERSION >= 6.0 && SYSTEMVERSION < 8.0)
    {
        ALAuthorizationStatus authStatus = [ALAssetsLibrary authorizationStatus];
        if(authStatus == ALAuthorizationStatusDenied || authStatus == ALAuthorizationStatusRestricted) {
            // 未授權(quán)
            [self showAlertWithType:systemAuthorityPhotoLibrary];
            return NO;
        }
    }
    return YES;
}

- (BOOL)notificationAuthority
{
    if (SYSTEMVERSION>=8.0f)
    {
        UIUserNotificationSettings *setting = [[UIApplication sharedApplication] currentUserNotificationSettings];
        if (UIUserNotificationTypeNone == setting.types)
        {
            [self showAlertWithType:systemAuthorityNotifacation];
            return NO;
        }
        
    }
    else
    {
        UIRemoteNotificationType type = [[UIApplication sharedApplication] enabledRemoteNotificationTypes];
        if(UIRemoteNotificationTypeNone == type){
            [self showAlertWithType:systemAuthorityNotifacation];
            return NO;
        }
    }
    return YES;
}

- (BOOL)netWorkAuthority
{
    CTCellularData *cellularData = [[CTCellularData alloc]init];
    CTCellularDataRestrictedState state = cellularData.restrictedState;
    if (state == kCTCellularDataRestricted) {
        [self showAlertWithType:systemAuthorityNetwork];
        return NO;
    }
    return YES;
}

- (BOOL)audioAuthority
{
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
    if (authStatus == AVAuthorizationStatusDenied || authStatus == AVAuthorizationStatusRestricted) {
        [self showAlertWithType:systemAuthorityAudio];
        return NO;
    }
    return YES;
}

- (BOOL)locationAuthority
{
    BOOL isLocation = [CLLocationManager locationServicesEnabled];
    if (!isLocation) {
        CLAuthorizationStatus CLstatus = [CLLocationManager authorizationStatus];
        if (CLstatus == kCLAuthorizationStatusDenied || CLstatus == kCLAuthorizationStatusDenied) {
            [self showAlertWithType:systemAuthorityLocation];
            return NO;
        }
    }
    return YES;
}

- (BOOL)addressBookAuthority
{
    if (SYSTEMVERSION >= 9.0) {
        CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
        if (status == CNAuthorizationStatusDenied || status == CNAuthorizationStatusRestricted)
        {
            [self showAlertWithType:systemAuthorityAddressBook];
            return NO;
            
        }
    }
    else
    {
        ABAuthorizationStatus ABstatus = ABAddressBookGetAuthorizationStatus();
        if (ABstatus == kABAuthorizationStatusDenied || ABstatus == kABAuthorizationStatusRestricted)
        {
            [self showAlertWithType:systemAuthorityAddressBook];
            return NO;
        }
    }
    return YES;
}

- (BOOL)calendarAuthority
{
    EKAuthorizationStatus EKstatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
    if (EKstatus == EKAuthorizationStatusDenied || EKstatus == EKAuthorizationStatusRestricted)
    {
        [self showAlertWithType:systemAuthorityCalendar];
        return NO;
    }
    return YES;
}

- (BOOL)reminderAuthority
{
    EKAuthorizationStatus EKstatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeReminder];
    if (EKstatus == EKAuthorizationStatusDenied || EKstatus == EKAuthorizationStatusRestricted)
    {
        [self showAlertWithType:systemAuthorityReminder];
        return NO;
    }
    return YES;
}

- (void)showAlertWithType:(systemAuthorityType)type
{
    NSString *title;
    NSString *msg;
    switch (type) {
        case systemAuthorityCamera:
            title = @"未獲得授權(quán)使用相機(jī)";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-相機(jī) 中打開。";
            break;
        case systemAuthorityPhotoLibrary:
            title = @"未獲得授權(quán)使用相冊(cè)";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-照片 中打開。";
            break;
        case systemAuthorityNotifacation:
            title = @"未獲得授權(quán)使用推送";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-推送 中打開。";
            break;
        case systemAuthorityNetwork:
            title = @"未獲得授權(quán)使用網(wǎng)絡(luò)";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-網(wǎng)絡(luò) 中打開。";
            break;
        case systemAuthorityAudio:
            title = @"未獲得授權(quán)使用麥克風(fēng)";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-麥克風(fēng) 中打開。";
            break;
        case systemAuthorityLocation:
            title = @"未獲得授權(quán)使用定位";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-定位 中打開。";
            break;
        case systemAuthorityAddressBook:
            title = @"未獲得授權(quán)使用通訊錄";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-通訊錄 中打開。";
            break;
        case systemAuthorityCalendar:
            title = @"未獲得授權(quán)使用日歷";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-日歷 中打開。";
            break;
        case systemAuthorityReminder:
            title = @"未獲得授權(quán)使用備忘錄";
            msg = @"請(qǐng)?jiān)谠O(shè)備的 設(shè)置-隱私-備忘錄 中打開。";
            break;
        default:
            break;
    }
    UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:title message:msg delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"立即前往", nil];
    alertView.delegate = self;
    [alertView show];
    alertView.tag = type;
}

#pragma mark -- AlertView Delegate
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 1)
    {
        //跳轉(zhuǎn)到設(shè)置界面,讓用戶開啟權(quán)限
        NSURL *url;
        if(SYSTEMVERSION >= 8.0)
        {
            //iOS8 以后
            url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
            if ([[UIApplication sharedApplication] canOpenURL:url])
            [[UIApplication sharedApplication] openURL:url];
        }
        else
        {
            //iOS8 之前
            //以下方法暫未測(cè)試
            switch (alertView.tag) {
                case systemAuthorityCamera:
                    url = [NSURL URLWithString:@"prefs:root=Privacy&path=CAMERA"];
                    break;
                case systemAuthorityPhotoLibrary:
                    url = [NSURL URLWithString:@"prefs:root=Privacy&path=PHOTOS"];
                    break;
                case systemAuthorityNetwork:
                    url = [NSURL URLWithString:@"prefs:root=General&path=Network"];
                    break;
                case systemAuthorityAudio:
                    url = [NSURL URLWithString:@"prefs:root=Privacy&path=Audio"];
                    break;
                case systemAuthorityLocation:
                    url = [NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];
                    break;
                case systemAuthorityAddressBook:
                    url = [NSURL URLWithString:@"prefs:root=Privacy&path=AddressBook"];
                    break;
                case systemAuthorityCalendar:
                    url = [NSURL URLWithString:@"prefs:root=Privacy&path=Calendar"];
                    break;
                case systemAuthorityReminder:
                    url = [NSURL URLWithString:@"prefs:root=Privacy&path=NOTES"];
                    break;
                
                default:
                    break;
            }
            if ([[UIApplication sharedApplication] canOpenURL:url])
            {
                [[UIApplication sharedApplication] openURL:url];
            }
        }
    }
}
@end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,698評(píng)論 6 539
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,202評(píng)論 3 426
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,742評(píng)論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,580評(píng)論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,297評(píng)論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,688評(píng)論 1 327
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,693評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,875評(píng)論 0 289
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,438評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,183評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,384評(píng)論 1 372
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,931評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,612評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,022評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,297評(píng)論 1 292
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,093評(píng)論 3 397
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,330評(píng)論 2 377

推薦閱讀更多精彩內(nèi)容