三、相册权限

三、相册权限

首先需导入两个框架#import 和#import ,并且需要在info.plist中加入如下字段

         
         <key>NSPhotoLibraryUsageDescriptionkey>
         <string>App需要您的同意,才能访问相册string>

         
         <key>NSPhotoLibraryAddUsageDescriptionkey>
         <string>App需要您的同意,才能保存图片到相册string>
         未添加该字段时即调用弹出授权弹窗方法会导致crash, 弹框二级提示信息可自己定义内容

根据PHPhotoLibrary类方法authorizationStatus获得当前App的相册权限,权限状态是一个枚举PHAuthorizationStatus

    PHAuthorizationStatusNotDetermined = 0,  // 用户未决定
    PHAuthorizationStatusRestricted,   // 受限制
    PHAuthorizationStatusDenied,            // 用户拒绝授权
    PHAuthorizationStatusAuthorized  // 用户授权使用

当枚举值为PHAuthorizationStatusNotDetermined时可以通过调用PHPhotoLibrary类的类方法requestAuthorization:来请求用户授权(即弹出授权框),同时block中回调用户授权状态(block中做一些UI操作时需要回到主线程进行)

    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus]; // iOS8.0~10.0
    if (status == PHAuthorizationStatusNotDetermined) // 用户未做出选择
    {
        /** 弹框请求获得相册授权 - 需要在info.plist中添加对应的字段如下:
         
         <key>NSPhotoLibraryUsageDescriptionkey>
         <string>App需要您的同意,才能访问相册string>

         
         <key>NSPhotoLibraryAddUsageDescriptionkey>
         <string>App需要您的同意,才能保存图片到相册string>
         未添加该字段时即调用弹出授权弹窗方法会导致crash, 弹框二级提示信息可自己定义内容
         */
        [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
            NSLog(@"[相册]授权状态是:%@", status == PHAuthorizationStatusAuthorized ? @"允许" : @"不允许");
            if (callback) {
                dispatch_async(dispatch_get_main_queue(), ^{//用GCD的方式,保证在主线程上更新UI
                    callback(status == PHAuthorizationStatusAuthorized);
                });
            }
        }];
    }
    else if (status == PHAuthorizationStatusAuthorized) // 允许
    {
        NSLog(@"[相册]授权状态是:允许");
        if (callback) {
            callback(YES);
        }
    }
    else // 受限制或禁止
    {
        NSLog(@"[相册]授权状态是:不允许");
        if (callback) {
            callback(NO);
        }
    }

以上是iOS8.0以后可以使用的方式,下面介绍一下在8.0以前使用的方式。

iOS8.0之前不需要去主动申请授权,因此可以直接通过监听用户授权状态来进行对应操作。

    ALAuthorizationStatus status = [ALAssetsLibraryauthorizationStatus]; // iOS 6.0~9.0
    if (callback) {
        callback(status == ALAuthorizationStatusAuthorized);
    }

你可能感兴趣的:(系统权限监听与申请授权)