美文网首页Xcode常用开发技巧iOS知识专题
iOS 判断是否有权限访问相机,相册

iOS 判断是否有权限访问相机,相册

作者: 天空中的球 | 来源:发表于2015-11-03 10:10 被阅读9294次

    1.判断用户是否有权限访问相册

    #import <AssetsLibrary/AssetsLibrary.h>
    ALAuthorizationStatus author =[ALAssetsLibrary authorizationStatus];
    if (author == kCLAuthorizationStatusRestricted || author ==kCLAuthorizationStatusDenied)
    {
           //无权限
    }
    

    可以注意一下下面这个

    typedef enum {
          kCLAuthorizationStatusNotDetermined = 0, // 用户尚未做出选择这个应用程序的问候
          kCLAuthorizationStatusRestricted,        // 此应用程序没有被授权访问的照片数据。可能是家长控制权限
          kCLAuthorizationStatusDenied,            // 用户已经明确否认了这一照片数据的应用程序访问
          kCLAuthorizationStatusAuthorized         // 用户已经授权应用访问照片数据
    } CLAuthorizationStatus;
    

    iOS 8 之后推荐用 #import <Photos/Photos.h> 中的判断

    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusRestricted ||
        status == PHAuthorizationStatusDenied) {
        return NO;
    }
    return YES;
    
    typedef NS_ENUM(NSInteger, PHAuthorizationStatus) {
        PHAuthorizationStatusNotDetermined = 0, // 默认还没做出选择
        PHAuthorizationStatusRestricted,        // 此应用程序没有被授权访问的照片数据
        PHAuthorizationStatusDenied,            // 用户已经明确否认了这一照片数据的应用程序访问
        PHAuthorizationStatusAuthorized         //  用户已经授权应用访问照片数据
    } NS_AVAILABLE_IOS(8_0);
    
    推荐使用
    - (BOOL)isCanUsePhotos {
    
        if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) {
            ALAuthorizationStatus author =[ALAssetsLibrary authorizationStatus];
            if (author == kCLAuthorizationStatusRestricted || author == kCLAuthorizationStatusDenied) {
                //无权限
                return NO;
            }
        }
        else {
            PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
            if (status == PHAuthorizationStatusRestricted ||
                status == PHAuthorizationStatusDenied) {
                //无权限
                return NO;
            }
        }
        return YES;
    }
    

    但实际上系统会提示下面一张图,可以不做判断的,哈哈哈

    英语环境下的没有权限

    2.判断用户是否有权限访问相机

    iOS7之前都可以访问相机,iOS7之后访问相机有权限设置,所以还是需要我们手动去设置判断。

      #import <AVFoundation/AVCaptureDevice.h>
      #import <AVFoundation/AVMediaFormat.h>
    
      AVAuthorizationStatus authStatus =  [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
      if (authStatus == AVAuthorizationStatusRestricted || authStatus ==AVAuthorizationStatusDenied)
      {
            //无权限
      }
    
    typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {
            AVAuthorizationStatusNotDetermined = 0,// 系统还未知是否访问,第一次开启相机时
            AVAuthorizationStatusRestricted, // 受限制的
            AVAuthorizationStatusDenied, //不允许
            AVAuthorizationStatusAuthorized // 允许状态
    } NS_AVAILABLE_IOS(7_0) __TVOS_PROHIBITED;
    

    相关文章

      网友评论

      • 经文纬武:我想问的是 ,怎么控制访问权限的弹框时机,是在appdelegate呢 还是用到时再弹,如果用到时再弹,那么用户选择按钮之后,我们如何捕捉到呢
      • 梁森的简书:如何判断是否有写入相册的权限呢?
      • 充电星球:@玫瑰花瓣的信笺 我是用了计时器来循环判断当前是哪种权限,然后做对应权限之后的操作
        充电星球:还是回到了我的问题,不知道怎么能监听到,系统弹出来的权限弹矿,并且知道用户点击了哪个按钮
        玫瑰花瓣的信笺:如果这样的话,还不如直接在入口类开启权限吧?
      • k渴死的鱼:难道不是AVAuthorizationStatusRestricted和AVAuthorizationStatusDenied吗?AL是什么鬼?
        玫瑰花瓣的信笺:@寻找犄角的牛 可以获取到吗?
        充电星球:请问如何捕获到 用户是点击了 不允许按钮还是好字按钮呢?
        天空中的球:@992f80253110 AssetsLibrary 中 ALAuthorizationStatus 的值
      • 纯洁的小袋子: if (author == kCLAuthorizationStatusRestricted || author == kCLAuthorizationStatusDenied) {
        //无权限
        return NO;
        }
        这里应该用,上面是CoreLocation的:
        if (author == ALAuthorizationStatusRestricted || author == ALAuthorizationStatusDenied) {
        //无权限
        return NO;
        }
        天空中的球:@纯洁的小袋子 恩恩,谢谢你。
        对的,那个用的是CoreLocation 中的,确实在9.0之前应该按上述你说的那样使用。
        不过 ALAuthorizationStatusRestricted 也可以换成PHAuthorizationStatusRestricted,毕竟这个在 9.0 以后也被弃用啦

      本文标题:iOS 判断是否有权限访问相机,相册

      本文链接:https://www.haomeiwen.com/subject/xqpqhttx.html