iOS10出来之后,有一些童鞋提审应用时会出现因为没有对相机相册等权限的设置提醒而被拒绝,以及出现调取本地相册相机等出现崩溃,这是苹果为了安全而设置的权限所导致的,解决的办法就是在 plist 文件里添加相应的获取权限。

配置权限:

相机权限:Privacy - Camera Usage Description 允许此权限才能使用相机功,这样才能录制视频,并且想要保存图片。

相册权限:Privacy - Photo Library Usage Description 允许此权限才能使用系统相册。

麦克风权限:Privacy - Microphone Usage Description 获取麦克风权限不然会崩,只有允许此权限才能录音。

在info.plist里增加一项,key从上面的三项任一项拷贝,然后运行后会出现授权的警示框,同意后就没有问题了。

NSPhotoLibraryUsageDescription

App需要您的同意,才能访问相册

NSCameraUsageDescription

App需要您的同意,才能访问相机

NSMicrophoneUsageDescription

App需要您的同意,才能访问麦克风

NSLocationUsageDescription

App需要您的同意,才能访问位置

NSLocationWhenInUseUsageDescription

App需要您的同意,才能在使用期间访问位置

NSLocationAlwaysUsageDescription

App需要您的同意,才能始终访问位置

NSCalendarsUsageDescription

App需要您的同意,才能访问日历

NSRemindersUsageDescription

App需要您的同意,才能访问提醒事项

NSMotionUsageDescription

App需要您的同意,才能访问运动与健身

NSHealthUpdateUsageDescription

App需要您的同意,才能访问健康更新

NSHealthShareUsageDescription

App需要您的同意,才能访问健康分享

NSBluetoothPeripheralUsageDescription

App需要您的同意,才能访问蓝牙

NSAppleMusicUsageDescription

App需要您的同意,才能访问媒体资料库

info.plist中逐个添加 KEY直接复制 value的string字符串就是提示的文字 可以根据自己需要填写

one.png

判断相机权限是否被限制,判断相机是否可以使用

判断相机权限是否被限制

需要导入 AVFoundation 类

import

// iOS 判断应用是否有使用相机的权限

NSString *mediaType = AVMediaTypeVideo;//读取媒体类型

AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];//读取设备授权状态

if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){

NSString *errorStr = @"应用相机权限受限,请在设置中启用";

[[HUDHelper getInstance] showErrorTipWithLabel:errorStr view:self.navigationController.view];

return;

}

如图状态是一个枚举

typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {

AVAuthorizationStatusNotDetermined = 0,

AVAuthorizationStatusRestricted,

AVAuthorizationStatusDenied,

AVAuthorizationStatusAuthorized

} NS_AVAILABLE_IOS(7_0);

AVAuthorizationStatusNotDetermined

用户还没有对应用程序授权进行操作

AVAuthorizationStatusRestricted

还没有授权访问的照片数据。

AVAuthorizationStatusDenied

用户拒绝对应用程序授权

AVAuthorizationStatusAuthorized

用户对应用程序授权

另外,需要对相机进行判断是否被授权,而相册不需要判断是否授权。

因为相机没有授权的话不能被使用却没有任何有用的提示。

01E8E.png

可以自行根据判断设置成这样的提示

C95CA.png

而相册的话,系统默认modol出界面提示

7AD83.png

就不需要我们进行判断,提示用户了。

上述视图判断逻辑代码如下

- (void)PhotoClick:(UIButton *)button{

switch (button.tag) {

case 1:{

DLog(@"拍照");

[self.darkView removeFromSuperview];

UIImagePickerController *pick = [[UIImagePickerController alloc]init];

pick.sourceType = UIImagePickerControllerSourceTypeCamera;

pick.delegate = self;

//判断是否有相机权限

NSString *mediaType = AVMediaTypeVideo;//读取媒体类型

AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];//读取设备授权状态

if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){

NSString *errorStr = @"应用相机权限受限,请在iPhone的“设置-隐私-相机”选项中,允许好享玩访问你的相机。";

DLog(@"相机不可用");

//必须使用present 方法

//[self presentViewController:pick animated:YES completion:nil];

[self showAlertControllerWithMessage:errorStr];

} else {

DLog(@"相机可用");

//必须使用present 方法

[self presentViewController:pick animated:YES completion:nil];

}

}

break;

case 2:{

DLog(@"相册");

[self.darkView removeFromSuperview];

UIImagePickerController *pick = [[UIImagePickerController alloc]init];

pick.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

pick.delegate = self;

//必须使用present 方法调用相册 相机也一样

[self presentViewController:pick animated:YES completion:nil];

}

break;

default:

break;

}

}

判断相机是否可以使用

以下是参考方法:

pragma mark - 摄像头和相册相关的公共类

// 判断设备是否有摄像头

- (BOOL) isCameraAvailable{

return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];

}

// 前面的摄像头是否可用

- (BOOL) isFrontCameraAvailable{

return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];

}

// 后面的摄像头是否可用

- (BOOL) isRearCameraAvailable{

return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];

}

相应的我们需要判断用户的摄像头是否是坏的,以防程序crash

if (![self isFrontCameraAvailable]) {

//判断相机是否可用

NSString *errorStr = @"相机出现问题,将跳转到相册选择照片";

[[HUDHelper getInstance] showErrorTipWithLabel:errorStr view:self.navigationController.view];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self openPhotoLibrary];

});

return;

}

如果摄像头坏了的话,我们可以直接跳到从相册中选择照片。

判断用户访问相册权限

iOS10以上系统

首先,需在工程对应的plist文件内添加“Privacy - Photo Library Usage Description”这个key,同时设置其值为“App needs your permission to access the Photo”类似这样的说明。

//获取相册访问权限

PHAuthorizationStatus photoStatus = [PHPhotoLibrary authorizationStatus];

[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

dispatch_async(dispatch_get_main_queue(), ^{

switch (status) {

case PHAuthorizationStatusAuthorized: //已获取权限

break;

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

break;

case PHAuthorizationStatusRestricted://此应用程序没有被授权访问的照片数据。可能是家长控制权限

break;

default://其他。。。

break;

}

});

}];

ios 请在设置中打开相机权限_iOS关于相机相册权限设置相关推荐

  1. 不能修改“System Roots”钥匙串 要更改根证书是否会被信任,请在“钥匙串访问”中打开它,然后修改它的信任设置

    问题: 在做 ios 开发 安装 根证书时 遇到如下提示: 不能修改"System Roots"钥匙串 要更改根证书是否会被信任,请在"钥匙串访问"中打开它,然 ...

  2. 解决:设置中打开蓝牙,測试机不会自己主动搜索设备

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/huangyabin001/article/details/36027575 [操作步骤]:设置中打开 ...

  3. 此主机支持 AMD-V,但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V,或主机自更改此设置后从未重新启动,则 AMD-V 可能被禁用。 (1) 确认 BIOS/固

    前言 最近搭建虚拟机时报错: 错误信息如下: 此主机支持 AMD-V,但 AMD-V 处于禁用状态.如果已在 BIOS/固件设置中禁用 AMD-V,或主机自更改此设置后从未重新启动,则 AMD-V 可 ...

  4. ios 请在设置中打开相机权限_在iOS中请求摄像头权限对话框启动(Prime权限)

    权限底漆是为了避免一种情况,你的客户可能会拒绝一个关键功能接入的有效途径的应用程序. 在iOS上,只允许每个功能触发默认系统权限一次.权限启动是指应用程序通过模仿系统权限的警报"启动&quo ...

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

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

  6. iOS菜鸟学习——应用中打开其他应用

    我们来讨论一下,在iOS开发中,如何实现从app1打开app2. 基本的思路就是,可以为app2定义一个URL,在app1中通过打开这个URL来打开app2,在此过程中,可以传送一些参数.下面来讨论一 ...

  7. 启动虚拟机异常(完整版)——如果已在 BIOS/固件设置中禁用 Intel VT-x,或主机自更改此设置后从未重新启动,则Intel VT-x处于禁用状态

    "创建了Linux虚拟机",点击"开机"之后,报了这个错误!!! -----------------------笔记本电脑------------------- ...

  8. vmware如果已在BIOS/固件设置中禁用IntelVT-x,或主机自更改此设置后从未重新启动,则IntelVT-x

    以前装了个vmware,里面安装了Ubuntu Linux的系统,突然想研究下Docker,却发现虚拟机打不开了,提示'如果已在 BIOS/固件设置中禁用 Intel VT-x,或主机自更改此设置后从 ...

  9. 在服务器设置中smtp协议是指,在outlook的服务器设置中SMTP协议是指

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 在outlook的服务器设置中SMTP协议是指发送邮件服务器. Microsoft Office Outlook是微软办公软件套装 ...

  10. 如何在设置中打开qq位置服务器,QQ怎么设置显示地理位置?设置显示QQ地理位置的方法...

    大家都知道QQ是一款聊天工具,它给我们的生活工作带来了很多的便捷.最重要的一点就是使用功能和业务非常的丰富,有着良好性和稳固高效的系统运行.使用QQ能够及时的和好友进行交流,并有强大的隐藏和分组功能, ...

最新文章

  1. 问题八十八:Fibonacci数非递归解
  2. [jQuery] 根据表单的不同参数跳转不同的链接
  3. python 安卓app开发环境搭建_基于react-native的APP开发环境配置
  4. java实现数据库主键的更新_Java获取数据库自增主键表中插入数据的ID
  5. 推动数字化智能化转型 中关村数智经济发展论坛成功举办
  6. ofo 悄然搬离中关村;董明珠称向雷军学互联网营销;Chrome 77 发布 | 极客头条...
  7. 极度偷懒 - 实现算命程序中tabcontrol的“美化”
  8. 100套★商业源码★等你来下载(Delphi,VB,VC,PB,ASP,JSP)!!!
  9. 61850——Da模式、Do模式
  10. Ubuntu 10.04 安装 RTX 2009
  11. STM32-ESP8266wifi模块实现
  12. Java对接圆通电子面单下单接口
  13. 解决异常:Premature end of chunk coded message body: closing chunk expected
  14. 移动端一倍图,二倍图尺寸
  15. 大学生计算机基础学多久,大学生计算机基础学期总结
  16. 理解PeopleSoft HRMS人力资源管理系统
  17. 说说如果meta标签没有写charset属性,将会如何?
  18. win7找不到win10计算机图标,win7电脑桌面图标不见了怎么办
  19. 如何高效管理工作微信
  20. Java中int的取值范围

热门文章

  1. CodeForces - 379A
  2. compare的数组升序和降序
  3. 全国哀悼日 网站变灰代码集锦
  4. 专访丨华为云GaussDB苏光牛:发挥生态优势,培养应用型DBA
  5. Python爬取豆瓣电影信息并分析
  6. CTF warmup
  7. 第四节 二维连续型随机变量及分布、条件概率密度
  8. SQL中使用经纬度查询数据的写法
  9. 图像检测与分割标注文件XML/JSON/TXT一键批量转换编辑软件
  10. vue 使用iframe展示pdf文件