iOS關(guān)于相機相冊權(quán)限設(shè)置

iOS10出來之后盔粹,有一些童鞋提審應(yīng)用時會出現(xiàn)因為沒有對相機相冊等權(quán)限的設(shè)置提醒而被拒絕,以及出現(xiàn)調(diào)取本地相冊相機等出現(xiàn)崩潰魂毁,這是蘋果為了安全而設(shè)置的權(quán)限所導致的玻佩,解決的辦法就是在 plist 文件里添加相應(yīng)的獲取權(quán)限出嘹。

配置權(quán)限:
相機權(quán)限:Privacy - Camera Usage Description 允許此權(quán)限才能使用相機功席楚,這樣才能錄制視頻,并且想要保存圖片税稼。
相冊權(quán)限:Privacy - Photo Library Usage Description 允許此權(quán)限才能使用系統(tǒng)相冊烦秩。
麥克風權(quán)限:Privacy - Microphone Usage Description 獲取麥克風權(quán)限不然會崩垮斯,只有允許此權(quán)限才能錄音。
在info.plist里增加一項只祠,key從上面的三項任一項拷貝兜蠕,然后運行后會出現(xiàn)授權(quán)的警示框,同意后就沒有問題了抛寝。

<!-- 相冊 -->   
<key>NSPhotoLibraryUsageDescription</key>   
<string>App需要您的同意,才能訪問相冊</string>   
<!-- 相機 -->   
<key>NSCameraUsageDescription</key>   
<string>App需要您的同意,才能訪問相機</string>   
<!-- 麥克風 -->   
<key>NSMicrophoneUsageDescription</key>   
<string>App需要您的同意,才能訪問麥克風</string>   
<!-- 位置 -->   
<key>NSLocationUsageDescription</key>   
<string>App需要您的同意,才能訪問位置</string>   
<!-- 在使用期間訪問位置 -->   
<key>NSLocationWhenInUseUsageDescription</key>   
<string>App需要您的同意,才能在使用期間訪問位置</string>   
<!-- 始終訪問位置 -->   
<key>NSLocationAlwaysUsageDescription</key>   
<string>App需要您的同意,才能始終訪問位置</string>   
<!-- 日歷 -->   
<key>NSCalendarsUsageDescription</key>   
<string>App需要您的同意,才能訪問日歷</string>   
<!-- 提醒事項 -->   
<key>NSRemindersUsageDescription</key>   
<string>App需要您的同意,才能訪問提醒事項</string>   
<!-- 運動與健身 -->   
<key>NSMotionUsageDescription</key> 
<string>App需要您的同意,才能訪問運動與健身</string>   
<!-- 健康更新 -->   
<key>NSHealthUpdateUsageDescription</key>   
<string>App需要您的同意,才能訪問健康更新 </string>   
<!-- 健康分享 -->   
<key>NSHealthShareUsageDescription</key>   
<string>App需要您的同意,才能訪問健康分享</string>   
<!-- 藍牙 -->   
<key>NSBluetoothPeripheralUsageDescription</key>   
<string>App需要您的同意,才能訪問藍牙</string>   
<!-- 媒體資料庫 -->   
<key>NSAppleMusicUsageDescription</key>  
<string>App需要您的同意,才能訪問媒體資料庫</string>  

info.plist中逐個添加 KEY直接復(fù)制 value的string字符串就是提示的文字 可以根據(jù)自己需要填寫

one.png

判斷相機權(quán)限是否被限制熊杨,判斷相機是否可以使用

判斷相機權(quán)限是否被限制

需要導入 AVFoundation 類

import <AVFoundation/AVFoundation.h>

// iOS 判斷應(yīng)用是否有使用相機的權(quán)限

NSString *mediaType = AVMediaTypeVideo;//讀取媒體類型  
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];//讀取設(shè)備授權(quán)狀態(tài)  
if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){  
    NSString *errorStr = @"應(yīng)用相機權(quán)限受限,請在設(shè)置中啟用";  
    [[HUDHelper getInstance] showErrorTipWithLabel:errorStr view:self.navigationController.view];  
    return;  
}  

如圖狀態(tài)是一個枚舉

typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {  
    AVAuthorizationStatusNotDetermined = 0,  
    AVAuthorizationStatusRestricted,  
    AVAuthorizationStatusDenied,  
    AVAuthorizationStatusAuthorized  
} NS_AVAILABLE_IOS(7_0);  

AVAuthorizationStatusNotDetermined  

用戶還沒有對應(yīng)用程序授權(quán)進行操作

AVAuthorizationStatusRestricted  

還沒有授權(quán)訪問的照片數(shù)據(jù)。

AVAuthorizationStatusDenied  

用戶拒絕對應(yīng)用程序授權(quán)

AVAuthorizationStatusAuthorized  

用戶對應(yīng)用程序授權(quán)

另外盗舰,需要對相機進行判斷是否被授權(quán)晶府,而相冊不需要判斷是否授權(quán)。
因為相機沒有授權(quán)的話不能被使用卻沒有任何有用的提示钻趋。

01E8E.png

可以自行根據(jù)判斷設(shè)置成這樣的提示

C95CA.png

而相冊的話川陆,系統(tǒng)默認modol出界面提示

7AD83.png

就不需要我們進行判斷,提示用戶了蛮位。

上述視圖判斷邏輯代碼如下



- (void)PhotoClick:(UIButton *)button{
    
    switch (button.tag) {
        case 1:{
            DLog(@"拍照");
            [self.darkView removeFromSuperview];
            UIImagePickerController *pick = [[UIImagePickerController alloc]init];
            pick.sourceType = UIImagePickerControllerSourceTypeCamera;
            pick.delegate = self;
            
            
            //判斷是否有相機權(quán)限
            NSString *mediaType = AVMediaTypeVideo;//讀取媒體類型
            AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];//讀取設(shè)備授權(quán)狀態(tài)
            if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
                NSString *errorStr = @"應(yīng)用相機權(quán)限受限,請在iPhone的“設(shè)置-隱私-相機”選項中较沪,允許好享玩訪問你的相機。";
                DLog(@"相機不可用");
                
                //必須使用present 方法
                //[self presentViewController:pick animated:YES completion:nil];
                
                [self showAlertControllerWithMessage:errorStr];
            
            
            } else {
            
                DLog(@"相機可用");
                
                //必須使用present 方法
                [self presentViewController:pick animated:YES completion:nil];
            
            }
            
            
            
        }
            
            break;
        case 2:{
            DLog(@"相冊");
            [self.darkView removeFromSuperview];
            UIImagePickerController *pick = [[UIImagePickerController alloc]init];
            pick.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
            pick.delegate = self;
            //必須使用present 方法調(diào)用相冊  相機也一樣
            [self presentViewController:pick animated:YES completion:nil];
            
        }
            break;
        default:
            break;
    }
}



判斷相機是否可以使用

以下是參考方法:

pragma mark - 攝像頭和相冊相關(guān)的公共類

// 判斷設(shè)備是否有攝像頭  
- (BOOL) isCameraAvailable{  
    return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];  
}  
  
// 前面的攝像頭是否可用  
- (BOOL) isFrontCameraAvailable{  
    return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];  
}  
  
// 后面的攝像頭是否可用  
- (BOOL) isRearCameraAvailable{  
    return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];  
}  

相應(yīng)的我們需要判斷用戶的攝像頭是否是壞的失仁,以防程序crash

if (![self isFrontCameraAvailable]) {  
        //判斷相機是否可用  
        NSString *errorStr = @"相機出現(xiàn)問題尸曼,將跳轉(zhuǎn)到相冊選擇照片";  
        [[HUDHelper getInstance] showErrorTipWithLabel:errorStr view:self.navigationController.view];  
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{  
            [self openPhotoLibrary];  
        });  
        return;  
    }  

如果攝像頭壞了的話,我們可以直接跳到從相冊中選擇照片萄焦。

判斷用戶訪問相冊權(quán)限

iOS10以上系統(tǒng)
首先骡苞,需在工程對應(yīng)的plist文件內(nèi)添加“Privacy - Photo Library Usage Description”這個key,同時設(shè)置其值為“App needs your permission to access the Photo”類似這樣的說明楷扬。

//獲取相冊訪問權(quán)限
PHAuthorizationStatus photoStatus = [PHPhotoLibrary authorizationStatus];

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    dispatch_async(dispatch_get_main_queue(), ^{
        switch (status) {
            case PHAuthorizationStatusAuthorized: //已獲取權(quán)限
                break;
            
            case PHAuthorizationStatusDenied: //用戶已經(jīng)明確否認了這一照片數(shù)據(jù)的應(yīng)用程序訪問
                break;
            
            case PHAuthorizationStatusRestricted://此應(yīng)用程序沒有被授權(quán)訪問的照片數(shù)據(jù)解幽。可能是家長控制權(quán)限
                break;
           
            default://其他烘苹。躲株。。
                break;
        }
    });
}];
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末镣衡,一起剝皮案震驚了整個濱河市霜定,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌廊鸥,老刑警劉巖望浩,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異惰说,居然都是意外死亡磨德,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來典挑,“玉大人酥宴,你說我怎么就攤上這事∧酰” “怎么了拙寡?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長琳水。 經(jīng)常有香客問我肆糕,道長,這世上最難降的妖魔是什么在孝? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任擎宝,我火速辦了婚禮,結(jié)果婚禮上浑玛,老公的妹妹穿的比我還像新娘绍申。我一直安慰自己,他們只是感情好顾彰,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布极阅。 她就那樣靜靜地躺著,像睡著了一般涨享。 火紅的嫁衣襯著肌膚如雪筋搏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天厕隧,我揣著相機與錄音奔脐,去河邊找鬼。 笑死吁讨,一個胖子當著我的面吹牛髓迎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播建丧,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼排龄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了翎朱?” 一聲冷哼從身側(cè)響起橄维,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拴曲,沒想到半個月后争舞,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡澈灼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年竞川,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡流译,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出者疤,到底是詐尸還是另有隱情福澡,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布驹马,位于F島的核電站革砸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糯累。R本人自食惡果不足惜算利,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泳姐。 院中可真熱鬧效拭,春花似錦、人聲如沸胖秒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阎肝。三九已至挤渔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間风题,已是汗流浹背判导。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沛硅,地道東北人眼刃。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像摇肌,于是被迫代替她去往敵國和親鸟整。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348