iOS14 相册和相机拍照使用权限新问题

问题描述

旧项目没有兼容iOS14的sdk之前的问题描述,拍照完成,取照片的时候,闪退

  • 解决
    • 因为iOS14访问照片库权限进行了细分,iOS14之后有以下分类
    • 如果你拍照的时候,虽然获取了拍照权限,但是如果没有判断照片的存储权限,且应用的权限设置为仅添加照片或者无,那么你拍完照,然后就会闪退,因为你要拍完照,就要使用,但是使用的权限不够
    • 这里我们需要开的权限是选中的照片或者所有照片

WechatIMG470

相机拍照和相册权限代码判断

//
//  MXPermissionCarmera.m
//  xbb
//
//  Created by coderiding on 2020/9/25.
//  Copyright © 2020 xiaobangban. All rights reserved.
//

#import "MXPermissionCarmera.h"
#import <AVFoundation/AVCaptureDevice.h>
#import <AVFoundation/AVMediaFormat.h>
#import <Photos/PHPhotoLibrary.h>

@implementation MXPermissionCarmera

+ (BOOL)isCarmeraPermissionOpen
{
    if (![MXPermissionCarmera isPhotoPermissionOpen]) {
        return false;
    }
    
    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    if (status == AVAuthorizationStatusRestricted || status == AVAuthorizationStatusDenied) {
         return false;
    }

    return true;
}

+ (BOOL)isPhotoPermissionOpen
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
    if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied)
    {
        return false;
    }
    return true;
}

- (void)showCarmeraAlert {
    if (![MXPermissionCarmera isPhotoPermissionOpen]) {
        [self showPhotoAlert];
        return;
    }
    
    UIAlertController *alert = [UIAlertController alertControllerTitle:@"需要访问您的相机" message:nil preferredStyle:UIAlertControllerStyleAlert clickBtn:@"去设置" cancelBtn:@"取消" clickBlock:^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    } cancelBlock:^{
        
    }];
    [[self topViewController] presentViewController:alert animated:YES completion:nil];
}

- (void)showPhotoAlert {
    UIAlertController *alert = [UIAlertController alertControllerTitle:@"需要访问您的相册" message:nil preferredStyle:UIAlertControllerStyleAlert clickBtn:@"去设置" cancelBtn:@"取消" clickBlock:^{
        [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
    } cancelBlock:^{
        
    }];
    [[self topViewController] presentViewController:alert animated:YES completion:nil];
}

- (UIViewController *)topViewController
{
    UIViewController *topViewController = [[UIApplication sharedApplication].keyWindow rootViewController];
    
    while (true) {
        if (topViewController.presentedViewController)
        {
            topViewController = topViewController.presentedViewController;
            
        } else if ([topViewController isKindOfClass:[UINavigationController class]] && [(UINavigationController*)topViewController topViewController])
        {
            topViewController = [(UINavigationController *)topViewController topViewController];
            
        } else if ([topViewController isKindOfClass:[UITabBarController class]])
        {
            UITabBarController *tab = (UITabBarController *)topViewController;
            topViewController = tab.selectedViewController;
            
        } else {
            break;
        }
    }
    
    return topViewController;
}

@end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值