獲取相機(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]