iOS 相機(jī) 麥克風(fēng) 照片 權(quán)限的檢測(cè)與獲取

獲取相機(jī)、相冊(cè)、麥克風(fēng)、定位等權(quán)限,需要提前在info.plist添加獲取權(quán)限聲明,否則會(huì)崩潰,提示信息如下:

[access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSMicrophoneUsageDescription key with a string value explaining to the user how the app uses this data.

一、相機(jī)
首先引入系統(tǒng)庫(kù)

#import <Photos/PHPhotoLibrary.h>

(1)檢測(cè)相機(jī)權(quán)限
首先我們要先了解AVAuthorizationStatus各個(gè)枚舉的含義

typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
    // 用戶還沒(méi)有關(guān)于這個(gè)應(yīng)用程序做出了選擇
    ALAuthorizationStatusNotDetermined NS_ENUM_DEPRECATED_IOS(6_0, 9_0) = 0, // User has not yet made a choice with regards to this application
    // 這個(gè)應(yīng)用程序未被授權(quán)訪問(wèn)圖片數(shù)據(jù)。用戶不能更改該應(yīng)用程序的狀態(tài),可能是由于活動(dòng)的限制,如家長(zhǎng)控制到位。
    ALAuthorizationStatusRestricted NS_ENUM_DEPRECATED_IOS(6_0, 9_0),        // This application is not authorized to access photo data.
                                            // The user cannot change this application’s status, possibly due to active restrictions
                                            //  such as parental controls being in place.
    // 用戶已經(jīng)明確否認(rèn)了這個(gè)應(yīng)用程序訪問(wèn)圖片數(shù)據(jù)
    ALAuthorizationStatusDenied NS_ENUM_DEPRECATED_IOS(6_0, 9_0),            // User has explicitly denied this application access to photos data.
    // 用戶授權(quán)此應(yīng)用程序訪問(wèn)圖片數(shù)據(jù)
    ALAuthorizationStatusAuthorized NS_ENUM_DEPRECATED_IOS(6_0, 9_0)        // User has authorized this application to access photos data.
} NS_DEPRECATED_IOS(6_0, 9_0, "Use PHAuthorizationStatus in the Photos framework instead");
- (void) checkVideoStatus
{
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    switch (authStatus) {
        case AVAuthorizationStatusNotDetermined:
        //沒(méi)有詢問(wèn)是否開(kāi)啟相機(jī)
        self.videoStatus = @"AVAuthorizationStatusNotDetermined";
        break;
        case AVAuthorizationStatusRestricted:
        //未授權(quán),家長(zhǎng)限制
        self.videoStatus = @"AVAuthorizationStatusRestricted";
        break;
        case AVAuthorizationStatusDenied:
        //未授權(quán)
        self.videoStatus = @"AVAuthorizationStatusDenied";
        break;
        case AVAuthorizationStatusAuthorized:
        //玩家授權(quán)
        self.videoStatus = @"AVAuthorizationStatusAuthorized";
        break;
        default:
        break;
    }

(2)獲取相機(jī)權(quán)限---彈出彈框

 //授權(quán)相機(jī)
- (void)videoAuthAction
{
    [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
        NSLog(@"%@",granted ? @"相機(jī)準(zhǔn)許":@"相機(jī)不準(zhǔn)許");
    }];
}

二、相冊(cè)
首先引入系統(tǒng)庫(kù)

#import <Photos/PHPhotoLibrary.h>

(1)檢測(cè)相冊(cè)權(quán)限

//檢查照片權(quán)限
- (void) checkPhotoStauts{
    PHAuthorizationStatus photoAuthorStatus = [PHPhotoLibrary authorizationStatus];
    switch (photoAuthorStatus) {
        case PHAuthorizationStatusAuthorized:
        self.photoLibraryStatus = @"PHAuthorizationStatusAuthorized";
        break;
        case PHAuthorizationStatusDenied:
        self.photoLibraryStatus = @"PHAuthorizationStatusDenied";
        break;
        case PHAuthorizationStatusNotDetermined:
        self.photoLibraryStatus = @"PHAuthorizationStatusNotDetermined";
        break;
        case PHAuthorizationStatusRestricted:
        self.photoLibraryStatus = @"PHAuthorizationStatusRestricted";
        break;
        default:
        break;
    }
   }

(2)獲取相冊(cè)權(quán)限---彈出彈框

//授權(quán)照片
- (void)phontLibraryAction{
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    }];
}

三、麥克風(fēng)
首先引入系統(tǒng)庫(kù)

#import <AVFoundation/AVFoundation.h>

(1)檢測(cè)麥克風(fēng)權(quán)限

- (void) checkAudioStatus{
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
    switch (authStatus) {
        case AVAuthorizationStatusNotDetermined:
        //沒(méi)有詢問(wèn)是否開(kāi)啟麥克風(fēng)
        self.audioStatus = @"AVAuthorizationStatusNotDetermined";
        break;
        case AVAuthorizationStatusRestricted:
        //未授權(quán),家長(zhǎng)限制
        self.audioStatus = @"AVAuthorizationStatusRestricted";
        break;
        case AVAuthorizationStatusDenied:
        //玩家未授權(quán)
        self.audioStatus = @"AVAuthorizationStatusDenied";
        break;
        case AVAuthorizationStatusAuthorized:
        //玩家授權(quán)
        self.audioStatus = @"AVAuthorizationStatusAuthorized";
        break;
        default:
        break;
    }
}

(2)獲取麥克風(fēng)權(quán)限----彈出彈框

[AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {
           NSLog(@"%@",granted ? @"麥克風(fēng)準(zhǔn)許":@"麥克風(fēng)不準(zhǔn)許");
       }];

四、定位---
首先引入系統(tǒng)庫(kù)

#import <CoreLocation/CLLocationManager.h>

(1)獲取定位權(quán)限

CLAuthorizationStatus status = [CLLocationManager authorizationStatus]

下面是CLAuthorizationStatus各個(gè)值的含義

授權(quán)狀態(tài)為枚舉值:
kCLAuthorizationStatusNotDetermined                  //用戶尚未對(duì)該應(yīng)用程序作出選擇
kCLAuthorizationStatusRestricted                     //應(yīng)用程序的定位權(quán)限被限制 
kCLAuthorizationStatusAuthorizedAlways               //一直允許獲取定位
kCLAuthorizationStatusAuthorizedWhenInUse            //在使用時(shí)允許獲取定位
kCLAuthorizationStatusAuthorized                     //已廢棄,相當(dāng)于一直允許獲取定位
kCLAuthorizationStatusDenied                         //拒絕獲取定位

(2)使用高德地圖時(shí),遇到了不彈出定位彈框的情況,原因是沒(méi)有添加下面的兩行代碼導(dǎo)致
當(dāng)前項(xiàng)目使用的是高德地圖,高德地圖更新后,需要設(shè)置這兩行代碼,否則,不會(huì)彈出獲取權(quán)限彈框

 [AMapLocationManager updatePrivacyAgree:AMapPrivacyAgreeStatusDidAgree];
    [AMapLocationManager updatePrivacyShow:AMapPrivacyShowStatusDidShow privacyInfo:AMapPrivacyInfoStatusDidContain]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容