關於相機相簿的一些實用技術

weixin_34041003發表於2017-01-21

最近做專案遇到了一些問題,就蒐集了一些資料,集中在了一起
感謝:
CSDN 博主 [小手一背愛誰誰]
http://blog.csdn.net/saw471/article/details/52679746
wentian的部落格
http://www.2cto.com/kf/201608/532614.html
本人只是搬運工,如有冒犯,請見諒!

一、許可權狀態說明

相簿、相機、通訊錄等授權狀態目前都有種,都可以對應以下幾種狀態:

AuthorizationStatusNotDetermined      // 使用者從未進行過授權等處理,首次訪問相應內容會提示使用者進行授權
AuthorizationStatusAuthorized = 0,    // 使用者已授權,允許訪問
AuthorizationStatusDenied,            // 使用者拒絕訪問
AuthorizationStatusRestricted,        // 應用沒有相關許可權,且當前使用者無法改變這個許可權,比如:家長控制

二、許可權獲取(以下都是iOS8之後的)
1.相簿許可權
是否支援

[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]

獲取許可權狀態

PHAuthorizationStatus authStatus = [PHPhotoLibrary authorizationStatus];

請求許可權

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                }];

許可權狀態

typedef NS_ENUM(NSInteger, PHAuthorizationStatus) {
    PHAuthorizationStatusNotDetermined = 0, // User has not yet made a choice with regards to this application
    PHAuthorizationStatusRestricted,        // 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.
    PHAuthorizationStatusDenied,            // User has explicitly denied this application access to photos data.
    PHAuthorizationStatusAuthorized         // User has authorized this application to access photos data.
} NS_AVAILABLE_IOS(8_0);

2.拍照許可權
是否支援

[UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]

獲取許可權狀態

AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

請求許可權

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                }];

許可權狀態

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

三、拒絕授權的處理
使用者拒絕授權後,如果訪問相應內容可能會出現一些類似沒有資料的情況,此時應該給使用者提示,引導使用者授權。

跳轉到應用設定:

NSURL *settingUrl = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:settingUrl]) {
    [[UIApplication sharedApplication] openURL:settingUrl];
}

四、info.plist 裡面的相關配置

<!-- 相簿 -->   
<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>  

*有個封裝的工具類,可使用WTAuthorizationTool,裡面還有通訊錄的許可權

pod "WTAuthorizationTool"

相關文章