美文网首页专题_iOS开发相关iOS技术资料
iOS中相册和相机的授权判断

iOS中相册和相机的授权判断

作者: FallPine | 来源:发表于2017-02-28 19:51 被阅读2112次
    • 相册授权判断
    // 判断授权状态
            PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
            if (status == PHAuthorizationStatusRestricted) { // 此应用程序没有被授权访问的照片数据。可能是家长控制权限。
                NSLog(@"因为系统原因, 无法访问相册");
            } else if (status == PHAuthorizationStatusDenied) { // 用户拒绝访问相册
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"警告" message:@"请去-> [设置 - 隐私 - 相机 - 项目名称] 打开访问开关" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"去设置", nil];
                [alertView show];
            } else if (status == PHAuthorizationStatusAuthorized) { // 用户允许访问相册
                // 放一些使用相册的代码
            } else if (status == PHAuthorizationStatusNotDetermined) { // 用户还没有做出选择
                // 弹框请求用户授权
                [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
                    if (status == PHAuthorizationStatusAuthorized) { // 用户点击了好
                      // 放一些使用相册的代码
                    }
                }];
            }
    
    • 相机授权判断
    // 1、 获取摄像设备
        AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
        if (device) {
            // 判断授权状态
            AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
            if (authStatus == AVAuthorizationStatusRestricted) {
                NSLog(@"因为系统原因, 无法访问相机");
                return;
            } else if (authStatus == AVAuthorizationStatusDenied) { // 用户拒绝当前应用访问相机
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"警告" message:@"请去-> [设置 - 隐私 - 相机 - 项目名称] 打开访问开关" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"去设置", nil];
                [alertView show];
                return;
            } else if (authStatus == AVAuthorizationStatusAuthorized) { // 用户允许当前应用访问相机
                SGScanningQRCodeVC *scanningQRCodeVC = [[SGScanningQRCodeVC alloc] init];
                scanningQRCodeVC.delegate = self;
                [self presentViewController:scanningQRCodeVC animated:YES completion:nil];
            } else if (authStatus == AVAuthorizationStatusNotDetermined) { // 用户还没有做出选择
                // 弹框请求用户授权
                [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
                    if (granted) {
                        // 用户接受
                        SGScanningQRCodeVC *scanningQRCodeVC = [[SGScanningQRCodeVC alloc] init];
                        scanningQRCodeVC.delegate = self;
                        [self presentViewController:scanningQRCodeVC animated:YES completion:nil];
                    }
                }];
            }
        } else {
            UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"警告" message:@"未检测到您的摄像头, 请在真机上测试" delegate:self cancelButtonTitle:@"好的" otherButtonTitles:nil, nil];
            [alertView show];
        }
    
    • UIAlertView的代理方法——跳转到系统设置的隐私中开启授权
    #pragma mark - UIAlertViewDelegate
    - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
    {
        if (buttonIndex == 1) {
            // 系统是否大于10
            NSURL *url = nil;
            if ([[UIDevice currentDevice] systemVersion].floatValue < 10.0) {
                url = [NSURL URLWithString:@"prefs:root=privacy"];
                
            } else {
                url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
            }
            [[UIApplication sharedApplication] openURL:url];
        }
    }
    

    相关文章

      网友评论

        本文标题:iOS中相册和相机的授权判断

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