美文网首页
iOS 14 访问相册崩溃,原来是API更换了

iOS 14 访问相册崩溃,原来是API更换了

作者: LV大树 | 来源:发表于2021-05-23 16:05 被阅读0次

这是ios12、13以前,ios10之后的做法,获取相册授权码:
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
dispatch_async(dispatch_get_main_queue(), ^{
switch (status) {
case PHAuthorizationStatusAuthorized: //已获取权限

                    [self takeAlbum];
                    break;

                case PHAuthorizationStatusDenied: //用户已经明确否认了这一照片数据的应用程序访问

                    [self.view makeToast:@"访问权限受限,请到设置里设置权限"];
                    break;

                case PHAuthorizationStatusRestricted://此应用程序没有被授权访问的照片数据。可能是家长控制权限
                    [self.view makeToast:@"此应用程序没有被授权访问的照片数据。可能是家长控制权限"];

                    break;

                default://其他。。。
                    break;
            }
        });
    }]

最近发现,不行了。
加了个访问权限,PHAccessLevelAddOnly,PHAccessLevelReadWrite。这是位操作符,只加或读写。你可以用位与操作把两种权限加上。
[PHPhotoLibrary requestAuthorizationForAccessLevel:PHAccessLevelAddOnly handler:^(PHAuthorizationStatus status) {
dispatch_async(dispatch_get_main_queue(), ^{
switch (status) {
case PHAuthorizationStatusAuthorized: //已获取权限

                    [self takeAlbum];
                    break;

                case PHAuthorizationStatusDenied: //用户已经明确否认了这一照片数据的应用程序访问

                    [self.view makeToast:@"访问权限受限,请到设置里设置权限"];
                    break;

                case PHAuthorizationStatusRestricted://此应用程序没有被授权访问的照片数据。可能是家长控制权限
                    [self.view makeToast:@"此应用程序没有被授权访问的照片数据。可能是家长控制权限"];

                    break;

                default://其他。。。
                    break;
            }
        });
    }]

以上全是废话,今天照的原因不在上面。

根源是api的设置问题。

- (IBAction)openAbum:(id)sender {
    self.pickController = [[UIImagePickerController alloc]init];

    //此处判断相机是否可用
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
        NSLog(@"camera error");
        return;
    }

    //UIImagePickerController *pick = [[UIImagePickerController alloc]init];
    self.pickController.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
   //指定媒体类型是什么 照片还是视频
   //默认为 照片
   //通过下一行方法可以返回支持的类型
  // [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
   //查到很多资料都是"kUTTypeMovie","kUTTypeImage"这两个参数名称但是我测试后发现已经变成下面这两种名称
   //"public.image"  照片
   //"public.movie"  视频
   //如果全部支持可以这么设置
   //self.pickController.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
   //单个支持
   self.pickController.mediaTypes = @[@"public.image"];
   //代理设置
   self.pickController.delegate = self;
   //是否提供编辑交互界面 比如说拍完照之后的编辑页面(缩放,剪裁等)
   //使用内置编辑控件时,图像选择器控制器会强制执行某些选项。对于照片,强制执行方形裁剪以及最大像素尺寸。对于视频,选择器强制执行最大电影长度和分辨率。如果要让用户指定自定义裁剪,则必须提供自己的编辑UI。
   self.pickController.allowsEditing = NO;
   //是否显示相机控制按钮
   //self.pickController.showsCameraControls = NO;
    //自定义相机控制页面
   //self.pickController.cameraOverlayView = self.cameraOverLayView;
   //如果不需要自定义控制页面可以省略上面两行
   //设置闪光灯模式
//   self.pickController.cameraFlashMode = UIImagePickerControllerCameraFlashModeAuto;
   //相册权限检测 需要导入 #import <Photos/Photos.h> 框架
   //用户还没有选择
   //PHAuthorizationStatusNotDetermined = 0
   // 客户端未被授权访问。用户不能改变状态,可能是由于家长控制
   //PHAuthorizationStatusRestricted = 1
   // 用户明确拒绝
   //PHAuthorizationStatusDenied = 2
   // 用户同意访问
   //PHAuthorizationStatusAuthorized = 3
   [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
      //相册访问权限
      if (status == PHAuthorizationStatusAuthorized) {
          NSLog(@"Authorized");
          
          dispatch_async(dispatch_get_main_queue(), ^{
              [self presentViewController:self.pickController animated:YES completion:nil];
          });
          
          
       }else{
          NSLog(@"Denied or Restricted");
       }
   }];


}

上面是正常的。
但是一旦放开注释部分,马上崩溃,即使,这些api在旧的ios14之前,没有问题。但到了iOS14.5后,崩溃就发生了。tnd。奇妙。

相关文章

网友评论

      本文标题:iOS 14 访问相册崩溃,原来是API更换了

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