一、带弹框的权限判断

.h

typedef void (^FinishPicking)(UIImage *image);@interface ImagePicker : NSObject <UIImagePickerControllerDelegate, UINavigationControllerDelegate>
// 访问相机
+ (void)showCameraFromVC:(UIViewController *)fromVC finishPicking:(FinishPicking)finishPicking;
// 访问相册
+ (void)showAlbumFromVC:(UIViewController *)fromVC finishPicking:(FinishPicking)finishPicking;
@end

.m

#import <Photos/PHPhotoLibrary.h>
#import <AVFoundation/AVCaptureDevice.h>

static FinishPicking _finishPicking;@implementation ImagePicker// 访问相机功能
+ (void)showCameraFromVC:(UIViewController *)fromVC finishPicking:(FinishPicking)finishPicking {_finishPicking = [finishPicking copy];// 判断相机授权,弹出访问权限提示框[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {dispatch_async(dispatch_get_main_queue(),^{if (granted) { // 授权成功[self openCamera:fromVC];} else { // 拒绝授权[self showCameraPermissionsTipPopView:fromVC];}});}];
}// 打开相机
+ (void)openCamera:(UIViewController *)fromVC {if (@available(iOS 11.0, *)) {[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways;}UIImagePickerController *ipv = [[UIImagePickerController alloc] init];ipv.delegate = [self self];ipv.sourceType = UIImagePickerControllerSourceTypeCamera;ipv.modalPresentationStyle = UIModalPresentationFullScreen;[fromVC presentViewController:ipv animated:YES completion:nil];
}// 不能打开相机时提示
+ (void)showCameraPermissionsTipPopView:(UIViewController *)fromVC {UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在手机系统设置中开启此权限" preferredStyle:UIAlertControllerStyleAlert];[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}]];[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {[self openSettings];}]];[fromVC presentViewController:alert animated:YES completion:nil];
}// 访问相册功能
+ (void)showAlbumFromVC:(UIViewController *)fromVC finishPicking:(FinishPicking)finishPicking {_finishPicking = [finishPicking copy];// 判断相册授权,弹出访问权限提示框[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {dispatch_async(dispatch_get_main_queue(),^{if (status == PHAuthorizationStatusAuthorized) {[self openPhotoAlbum:fromVC];} else {[self showPhotoAlbumPermissionsTipPopView:fromVC];}});}];
}// 打开相册
+ (void)openPhotoAlbum:(UIViewController *)fromVC {if (@available(iOS 11.0, *)) {[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAlways;}UIImagePickerController *ipv = [[UIImagePickerController alloc] init];ipv.delegate = [self self];ipv.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;ipv.modalPresentationStyle = UIModalPresentationFullScreen;[fromVC presentViewController:ipv animated:YES completion:nil];
}// 不能打开相册时提示
+ (void)showPhotoAlbumPermissionsTipPopView:(UIViewController *)fromVC {UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"请在手机系统设置中开启此权限" preferredStyle:UIAlertControllerStyleAlert];[alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {}]];[alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {[self openSettings];}]];[fromVC presentViewController:alert animated:YES completion:nil];
}// 打开设置
+ (void)openSettings {NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];if ([[UIApplication sharedApplication] canOpenURL:url]) {if (@available(iOS 10.0, *)) {[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {}];} else {[[UIApplication sharedApplication] openURL:url];}}
}// 回调
+ (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];if (image && _finishPicking) {_finishPicking(image);_finishPicking = nil;}[picker dismissViewControllerAnimated:YES completion:^{if (@available(iOS 11.0, *)) {[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;}}];
}+ (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {[picker dismissViewControllerAnimated:YES completion:^{if (@available(iOS 11.0, *)) {[UIScrollView appearance].contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;}}];
}@end

二、无弹框的权限判断

PHAuthorizationStatus authorizationStatus = [PHPhotoLibrary authorizationStatus];if (authorizationStatus == PHAuthorizationStatusAuthorized) {return YES;} else {return NO;}
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];if (authStatus == AVAuthorizationStatusAuthorized) {return YES;} else {return NO;}

iOS相机、相册的访问权限相关推荐

  1. 判断是否开启相机相册、定位权限并去系统开启权限

    #import <Foundation/Foundation.h> typedef NS_ENUM(NSInteger, ChosePhontType) { ChosePhontTypeA ...

  2. ios 请在设置中打开相机权限_开启运动与健身权限 iOS10相机相册等权限的使用、检测并引导用户开启权限 - 非主流娱乐网...

    开启运动与健身权限 iOS10相机相册等权限的使用.检测并引导用户开启权限 2019-04-09 01:01:34 来源: 非主流娱乐网责任编辑:小s0条评论 NSPhotoLibraryUsageD ...

  3. ios关于相机访问权限设置

    一般当应用在第一次访问相机的时候 系统都会弹出一个提示框,提示用户是否允许访问相机. 可是假如我们拒绝访问相机,或者在隐私-相机设置里面关闭了应用权限时,再次进入就会直接黑茫茫一片,不会再出现提示框. ...

  4. minio 授予永久访问权限_应对 iOS 14 权限管理 应用手把手教你打开“所有照片”权限...

    DoNews 11月3日消息(记者 刘文轩)苹果在 iOS 14 中带来全新的隐私管理功能,其中最亮眼的就是相册权限方面,可以为应用程序授予单独授予某张照片的访问权限,无需交出整个相册. 作为 iOS ...

  5. iOS 7如何解决相册无法访问的问题?

    How to Solve "Error Access Denied" Issue When Trying to Import Photos? 当你第一次打开"照片工坊:Y ...

  6. 用Swift实现iOS相机及相册图片上传

    最近要做一个iOS相机及相册图片上传,其中遇到了这些问题:1.图片增删在UICollectionView里的变化:2.获取相机拍摄的照片和相册的照片:3.将PHAsset对象转为UIImage对象: ...

  7. Android7.0调用系统相机拍照、访问相册问题。

    关于Android7.0调用系统相机拍照.访问相册的一些问题: 在Android6.0中Google提出了动态申请权限的Api,调用相机拍照,访问SDcard等操作都需要先申请对应的权限如下: < ...

  8. iOS重写和成员变量访问权限

    iOS重写和成员变量访问权限 一.重写机制 1.覆盖父类的方法 2.对父类方法做进一步的补充 注意:父类声明过得方法,子类无需声明. * 子类如果重写了父类的方法: 1.父类的指针指向子类的对象,则调 ...

  9. iOS 取相册照片/打开相机

    最近做了个功能,就是关于打开手机相册取照片,或者是通过相机照相 作为菜鸟的我,花了两天的时间才学会,在此分享给大家 基本思路: 1 打开相机:直接打开,通过代理方法取到我们拍下的照片(在进行照片压缩上 ...

  10. iOS从Files App中无法打开特定格式文件的解决(提示没有访问权限)

    问题现象 从iOS 11开始,Apple在系统中增加了一个文件(Files) App, 若其中存储的文件被特定App注册过,我们就可以直接用对应的App将其打开: 但此时即使我们得到了文件的URL,读 ...

最新文章

  1. 用Gogs在Windows上搭建Git服务
  2. 复习计算机网络day2
  3. 普通内部类里面为什么不能有static字段
  4. SQLite添加列的限制
  5. Lucene-Analyzer
  6. 【Python】Flask框架系列(三):session和cookie操作、get/post请求、钩子函数
  7. 记录一个SpringBoot集成邮件及工具类博客
  8. Linux基本常用命令
  9. python 3.7.4 shell_centos7上Virtualenv从python3.4升级到Python3.7.4
  10. 在ASP中轻松实现记录集分页显示
  11. linux中cron表达式指南
  12. java 一元二次方程_java一元二次方程求根
  13. MES系统之设备管理的基础功能
  14. c语言 结构体ppt,C语言知识学习结构体.ppt
  15. 信号检测与估计理论_论文解读 | 利用脑功能连接实现疲劳驾驶检测
  16. 分治算法小结(附例题详解)
  17. singalrhub
  18. 转:如何找回iPhone的访问限制密码
  19. 外贸SOHO是否要有自己的推广网站?
  20. SpringBoot——四大核心之指标监控(actuator)

热门文章

  1. 关于总线、现场总线、RS-485和modbus之间的关系
  2. shell脚本(二)
  3. PHP弹窗回送,AJAX 服务器回送数据失败 onreadystatechange没法触发回调函数
  4. 怎么删除计算机病毒,电脑中病毒删不掉怎么办?
  5. 京东智能客服言犀启发式问答技术探秘
  6. mysql 建复合索引_mysql 建立复合索引
  7. java 数字转换字母大写_大写字母或小写字母转换为数字
  8. Java笔记——Java 实现金额小写转大写
  9. kubernetes device or resource busy的问题
  10. 主机浏览器访问不了OWASP的主页