一、带弹框的权限判断

.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. 皮一皮:所以说不管做什么,上风口都是很重要的位置...
  2. cocos2d-x游戏实例(1)-视角跟随主角
  3. Go语言Web框架gwk介绍 (一)
  4. python画相关性可视化图_Python 可视化 | 关联图 - 散点图1
  5. 02 ansible核心模块 之 shell script
  6. iscroll.js 下拉刷新和上拉加载
  7. qt designer 弹出输入框_Qt编写的项目作品3-输入法V2018
  8. 《实用软件工程》复习知识点
  9. 《node2vec Scalable Feature Learning for Networks》阅读笔记
  10. excel 链接批量转图片
  11. C语言打印日历总结报告,C语言打印日历
  12. 如何快速入门深度学习写论文?
  13. C++四大特性——多态 的总结
  14. 教你使用shell脚本打印五角星
  15. WorkFlow .Net 流程撤回
  16. 同程旅游火车票部门面经
  17. 将服务器文件夹映射到windows本地(映射网络驱动器)
  18. c语言 qsort 改进篇
  19. 陈浩计算机应用,陈浩
  20. 走着走着就散了,回忆都淡了,看着看着就倦了,星光也暗了

热门文章

  1. 第二章 Python数据类型和运算符
  2. tplink怎么进去_手机怎么进入tplink路由器设置界面?
  3. Antd 表格样式修改
  4. 产品经理快(ku)乐(bi)的一天~
  5. webbrowser1 脚本报错_webbrowser脚本错误的解决办法
  6. 当tomcat启动遇到(你的项目名字) is required and cannot be removed from the server(不能部署到server上)
  7. wamp mysql_wamp中如何打开mysql
  8. 【交换基础】交换基础知识总结
  9. 均值、均方值、方差、均方差和协方差概念及其物理意义
  10. NFT头像屡拍天价,如何从理性角度分析其市场价值?