美文网首页
iOS:跳转设置界面,权限相关,UIApplicationOpe

iOS:跳转设置界面,权限相关,UIApplicationOpe

作者: 康小曹 | 来源:发表于2016-12-14 10:58 被阅读0次

相册权限

(只需要判断是否为ALAuthorizationStatusDenied即可)
typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
ALAuthorizationStatusNotDetermined = 0, 用户尚未做出了选择这个应用程序的问候
ALAuthorizationStatusRestricted, 此应用程序没有被授权访问的照片数据。可能是家长控制权限。
ALAuthorizationStatusDenied, 用户已经明确否认了这一照片数据的应用程序访问.
ALAuthorizationStatusAuthorized 用户已授权应用访问照片数据.
}
2.访问相机时,优先访问相册,可以理解为相机为相册的子功能。
3.关于IOS8之后新跳转方法:UIApplicationOpenSettingsURLString,这个跳转方法可以直接跳转到设置中的项目设置页面的方法,其中的允许“xxx”访问中的项目不是自己添加的,而是系统自动识别的,每请求一次这个权限时,系统会自动记录并添加!!!
4.block作为参数传递:

  • (void)test:(返回值类型(^)(参数1,参数2))参数名; // 参数名称可省略
    -(void)calculate:(int(^)(int))calculateBlock;
## 弹出对话框,进行选择
- (void)handleTakePicture {
    __weak typeof(self) weakSelf = self;
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:nil message:nil preferredStyle:UIAlertControllerStyleActionSheet];
    UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"拍照" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [weakSelf openCamera];
    }];
    UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"从相机选择" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
        [weakSelf openAlbum];
    }];
    UIAlertAction *action3 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    [alert addAction:action1];
    [alert addAction:action2];
    [alert addAction:action3];
    [self.targetVC presentViewController:alert animated:YES completion:nil];
}

## 操作
2.1 打开相机
- (void)openCamera {// 打开相机
    [self checkAuthorizateCameraWithBlock:^(BOOL cameraAuthSuccess, BOOL albumAuthSuccess) {
        if(!albumAuthSuccess) {
            //            [GTAppUtils showAlertViewWithTitle:@"" message:@"请到 设置》隐私》相册 开启相册权限."];
            UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"相册未授权" message:@"授权xxx访问你的照片" preferredStyle:UIAlertControllerStyleAlert];
            
            UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
                [[UIApplication sharedApplication] openURL:url];
            }];
            
            UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                
            }];
            [alertVC addAction:action1];
            [alertVC addAction:action2];
            [self.targetVC presentViewController:alertVC animated:YES completion:nil];
            
            return;
        }
        if(cameraAuthSuccess) {
            if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {// 手机支持相机拍摄的情况下执行下列代码
                UIImagePickerController* imagePicker = [[UIImagePickerController alloc] init];
                imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
                imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
                imagePicker.mediaTypes = @[(NSString *)kUTTypeImage];
                imagePicker.delegate = self;
                imagePicker.allowsEditing = YES;
                [self.targetVC presentViewController:imagePicker animated:YES completion:nil];
                NSLog(@"---");
            }
        } else {
            UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:@"相机未授权" message:@"授权xxx访问你的照片" preferredStyle:UIAlertControllerStyleAlert];
            
            UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
                [[UIApplication sharedApplication] openURL:url];
            }];
            
            UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
                
            }];
            [alertVC addAction:action1];
            [alertVC addAction:action2];
            [self.targetVC presentViewController:alertVC animated:YES completion:nil];
        }
    }];
}

// 验证权限
- (void)checkAuthorizateCameraWithBlock:(void(^)(BOOL cameraAuthSuccess, BOOL albumAuthSuccess))block {
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSInteger cameraAuth = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
            block(cameraAuth != AVAuthorizationStatusDenied, status != PHAuthorizationStatusDenied);
        });
    }];
}

相关文章

网友评论

      本文标题:iOS:跳转设置界面,权限相关,UIApplicationOpe

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