獲取用戶權(quán)限

獲得相機或麥克風權(quán)限

使用到對應的權(quán)限時荔燎,應在info.plist文件中加入對應的權(quán)限描述妖啥。

  • NSCameraUsageDescription
    允許訪問您的相機才能XXXXXXXXXX(描述準確)

  • NSMicrophoneUsageDescription
    允許訪問您的麥克風才能XXXXXXXXXX(描述準確)

#import <AVFoundation/AVFoundation.h>

AVMediaType AVType = AVMediaTypeAudio;  // AVMediaTypeVideo 攝像頭  AVMediaTypeAudio 麥克風
// 讀取當前權(quán)限狀態(tài)
AVAuthorizationStatus avStatus = [AVCaptureDevice authorizationStatusForMediaType:AVType];
// 根據(jù)當前狀態(tài)作出對應的操作
switch (avStatus) {
    case AVAuthorizationStatusNotDetermined:
        NSLog(@"未決定的");
        // 發(fā)出權(quán)限請求, 在未決定的時候發(fā)出請求系統(tǒng)才會彈出對話框,其它情況下發(fā)出下面的請求也不彈框,需要自己去指引用戶設置
        [AVCaptureDevice requestAccessForMediaType:AVType completionHandler:^(BOOL granted) {
            if (granted) {
                NSLog(@"用戶同意使用");
            }else{
                NSLog(@"用戶不同意使用");
            }
        }];
        break;
    case AVAuthorizationStatusRestricted:   // 應該自己設置彈框引導用戶去打開設置
        NSLog(@"因其它原因被禁止的");
        break;
    case AVAuthorizationStatusDenied:   // 應該自己設置彈框引導用戶去打開設置
        NSLog(@"用戶拒絕的的");
        break;
    case AVAuthorizationStatusAuthorized:   // 進行業(yè)務操作
        NSLog(@"同意的");
        
        break;
    default:
        break;
}


// 跳轉(zhuǎn)到設置頁面,只要請求過權(quán)限的,就會出現(xiàn)在這個頁面,如果沒有請求過的權(quán)限,這個頁面是不會出現(xiàn)對應的權(quán)限設置的
NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"打開設置成功");
        }
    }];
}

相冊

ios11 之后,剛開始訪問相機的時候,系統(tǒng)默認可以進入,但會在選擇中某一張相片的時候,進行權(quán)限的詢問.
- NSPhotoLibraryUsageDescription
允許訪問您的相冊才能XXXXXXXXXX(描述準確)

#import <Photos/Photos.h>

// 查詢當前狀態(tài)
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
switch (status) {
    case PHAuthorizationStatusNotDetermined:
        NSLog(@"未決定的");
        // 此處應發(fā)起請求
        break;
    case PHAuthorizationStatusRestricted:
        NSLog(@"因其它原因被禁止的");
        break;
    case PHAuthorizationStatusDenied:
        NSLog(@"用戶拒絕的的");
        break;
    case PHAuthorizationStatusAuthorized:
        NSLog(@"同意的");
        break;
    default:
        break;
}


// 發(fā)起請求
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    switch (status) {
        case PHAuthorizationStatusDenied:
            NSLog(@"用戶拒絕的的");
            break;
        case PHAuthorizationStatusAuthorized:
            NSLog(@"同意的");
            break;
        default:
            break;
    }
}];

位置

位置在iOS11.4之前和之后有區(qū)別。

iOS11.4之前的描述
  • NSLocationWhenInUseUsageDescription 使用期間獲得權(quán)限的描述
    對應請求:
[self.locationManager requestWhenInUseAuthorization];
  • NSLocationAlwaysUsageDescription 未使用期間獲得權(quán)限的描述
    對應請求:
[self.locationManager requestAlwaysAuthorization];

以上描述和請求一一對應,互不干擾。根據(jù)需要進行描述和請求纲爸。在用戶未決定之前,系統(tǒng)彈出的對話框是只有同意和不同意的選擇妆够。

iOS11.4后

如果只詢問使用期間的權(quán)限(requestWhenInUseAuthorization)识啦,與之前版本相同。
如果需要詢問是否可以獲得未使用期間的權(quán)限( requestAlwaysAuthorization)神妹,則需要同時配置下面的兩個描述:

  • NSLocationWhenInUseUsageDescription 使用期間獲得權(quán)限的描述
  • NSLocationAlwaysAndWhenInUseUsageDescription 使用和未使用期間的權(quán)限描述
    第二個描述颓哮,替代了之前版本關(guān)于未使用期間的描述。此時代碼進行(requestAlwaysAuthorization)請求權(quán)限時鸵荠,如果當前狀態(tài)是用戶未決定的冕茅,則系統(tǒng)會彈出對話框,而這個對話框會有三個選項:
    1蛹找、僅在使用應用期間
    2姨伤、始終允許
    3、不允許
    這也是為什么代碼進行(requestAlwaysAuthorization)請求權(quán)限時庸疾,必須要同時有兩種描述存在的原因乍楚。
注意

1、在第一次請求權(quán)限的時候届慈,CLLocationManager 的實例對象應該被引用起來徒溪,否則對話框只會一閃而過忿偷。
2、通過CLLocationManager的delegate臊泌,我們可以從“授權(quán)回調(diào)”方法:
-(void)locationManager:(CLLocationManager*)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status鲤桥;中獲得在用戶點擊詢問“允許”還是“拒絕”時的結(jié)果。

#import <CoreLocation/CLLocationManager.h>

// 查詢狀態(tài)
CLAuthorizationStatus CLStatus = [CLLocationManager authorizationStatus];
switch (CLStatus) {
    case kCLAuthorizationStatusNotDetermined:
        NSLog(@"用戶尚未選擇決定的");
        // 此處應發(fā)起請求
        break;
    case kCLAuthorizationStatusRestricted:
        NSLog(@"其它原因被禁止的");
        break;
    case kCLAuthorizationStatusAuthorizedAlways:
        NSLog(@"前臺后臺一直可以使用定位");
        break;
    case kCLAuthorizationStatusAuthorizedWhenInUse:
        NSLog(@"試用期間可以定位");
        break;
    case kCLAuthorizationStatusDenied:
        NSLog(@"用戶拒絕定位服務");
        break;
    default:
        break;
}

// 發(fā)起請求缺虐,實例對象要引用起來,防止詢問對話框一閃消失
self.locationManager = [[CLLocationManager alloc] init];
//[self.locationManager requestWhenInUseAuthorization]; 請求使用期間的權(quán)限
// 請求始終允許獲得定位的權(quán)限
[self.locationManager requestAlwaysAuthorization];

通訊錄

  • Contacts Usage Description
    允許訪問您的通訊錄才能XXXXXXXXXX(描述準確)
// 查詢當前狀態(tài)
CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];
switch (status) {
    case CNAuthorizationStatusNotDetermined:    // 未確定的
    {
        // 進行權(quán)限請求
        CNContactStore *store = [[CNContactStore alloc] init];
        [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError*  _Nullable error) {
            if (error) {
                NSLog(@"授權(quán)失敗");
            }else {
                NSLog(@"成功授權(quán)");
            }
        }];
    }
        break;
    case CNAuthorizationStatusRestricted:
        NSLog(@"其它原因被禁止的");
        break;
    case CNAuthorizationStatusDenied:
        NSLog(@"用戶拒絕的");
         [self showAlertViewAboutNotAuthorAccessContact];
        break;
    case CNAuthorizationStatusAuthorized:
        NSLog(@"用戶同意的");
        //有通訊錄權(quán)限-- 進行下一步操作
        break;
    default:
        break;
}
待續(xù)礁凡。高氮。。顷牌。剪芍。。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窟蓝,一起剝皮案震驚了整個濱河市罪裹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌运挫,老刑警劉巖状共,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谁帕,居然都是意外死亡峡继,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門匈挖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碾牌,“玉大人,你說我怎么就攤上這事儡循〔奥穑” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵择膝,是天一觀的道長誓琼。 經(jīng)常有香客問我,道長肴捉,這世上最難降的妖魔是什么踊赠? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮每庆,結(jié)果婚禮上筐带,老公的妹妹穿的比我還像新娘。我一直安慰自己缤灵,他們只是感情好伦籍,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布蓝晒。 她就那樣靜靜地躺著,像睡著了一般帖鸦。 火紅的嫁衣襯著肌膚如雪芝薇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天作儿,我揣著相機與錄音洛二,去河邊找鬼。 笑死攻锰,一個胖子當著我的面吹牛晾嘶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播娶吞,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼垒迂,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妒蛇?” 一聲冷哼從身側(cè)響起机断,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绣夺,沒想到半個月后吏奸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡陶耍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年苦丁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片物臂。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡旺拉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棵磷,到底是詐尸還是另有隱情蛾狗,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布仪媒,位于F島的核電站沉桌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏算吩。R本人自食惡果不足惜留凭,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望偎巢。 院中可真熱鬧蔼夜,春花似錦、人聲如沸压昼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匠题,卻和暖如春拯坟,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背韭山。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工郁季, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钱磅。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓梦裂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親续搀。 傳聞我的和親對象是個殘疾皇子塞琼,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351

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