iOS相机、相册的访问权限
一、带弹框的权限判断
.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相机、相册的访问权限相关推荐
- 判断是否开启相机相册、定位权限并去系统开启权限
#import <Foundation/Foundation.h> typedef NS_ENUM(NSInteger, ChosePhontType) { ChosePhontTypeA ...
- ios 请在设置中打开相机权限_开启运动与健身权限 iOS10相机相册等权限的使用、检测并引导用户开启权限 - 非主流娱乐网...
开启运动与健身权限 iOS10相机相册等权限的使用.检测并引导用户开启权限 2019-04-09 01:01:34 来源: 非主流娱乐网责任编辑:小s0条评论 NSPhotoLibraryUsageD ...
- ios关于相机访问权限设置
一般当应用在第一次访问相机的时候 系统都会弹出一个提示框,提示用户是否允许访问相机. 可是假如我们拒绝访问相机,或者在隐私-相机设置里面关闭了应用权限时,再次进入就会直接黑茫茫一片,不会再出现提示框. ...
- minio 授予永久访问权限_应对 iOS 14 权限管理 应用手把手教你打开“所有照片”权限...
DoNews 11月3日消息(记者 刘文轩)苹果在 iOS 14 中带来全新的隐私管理功能,其中最亮眼的就是相册权限方面,可以为应用程序授予单独授予某张照片的访问权限,无需交出整个相册. 作为 iOS ...
- iOS 7如何解决相册无法访问的问题?
How to Solve "Error Access Denied" Issue When Trying to Import Photos? 当你第一次打开"照片工坊:Y ...
- 用Swift实现iOS相机及相册图片上传
最近要做一个iOS相机及相册图片上传,其中遇到了这些问题:1.图片增删在UICollectionView里的变化:2.获取相机拍摄的照片和相册的照片:3.将PHAsset对象转为UIImage对象: ...
- Android7.0调用系统相机拍照、访问相册问题。
关于Android7.0调用系统相机拍照.访问相册的一些问题: 在Android6.0中Google提出了动态申请权限的Api,调用相机拍照,访问SDcard等操作都需要先申请对应的权限如下: < ...
- iOS重写和成员变量访问权限
iOS重写和成员变量访问权限 一.重写机制 1.覆盖父类的方法 2.对父类方法做进一步的补充 注意:父类声明过得方法,子类无需声明. * 子类如果重写了父类的方法: 1.父类的指针指向子类的对象,则调 ...
- iOS 取相册照片/打开相机
最近做了个功能,就是关于打开手机相册取照片,或者是通过相机照相 作为菜鸟的我,花了两天的时间才学会,在此分享给大家 基本思路: 1 打开相机:直接打开,通过代理方法取到我们拍下的照片(在进行照片压缩上 ...
- iOS从Files App中无法打开特定格式文件的解决(提示没有访问权限)
问题现象 从iOS 11开始,Apple在系统中增加了一个文件(Files) App, 若其中存储的文件被特定App注册过,我们就可以直接用对应的App将其打开: 但此时即使我们得到了文件的URL,读 ...
最新文章
- 用Gogs在Windows上搭建Git服务
- 复习计算机网络day2
- 普通内部类里面为什么不能有static字段
- SQLite添加列的限制
- Lucene-Analyzer
- 【Python】Flask框架系列(三):session和cookie操作、get/post请求、钩子函数
- 记录一个SpringBoot集成邮件及工具类博客
- Linux基本常用命令
- python 3.7.4 shell_centos7上Virtualenv从python3.4升级到Python3.7.4
- 在ASP中轻松实现记录集分页显示
- linux中cron表达式指南
- java 一元二次方程_java一元二次方程求根
- MES系统之设备管理的基础功能
- c语言 结构体ppt,C语言知识学习结构体.ppt
- 信号检测与估计理论_论文解读 | 利用脑功能连接实现疲劳驾驶检测
- 分治算法小结(附例题详解)
- singalrhub
- 转:如何找回iPhone的访问限制密码
- 外贸SOHO是否要有自己的推广网站?
- SpringBoot——四大核心之指标监控(actuator)