一、感言

新年伊始,万象更新,一转眼,就2019年了。

作为一个科班生,从事移动端开发好几年了,回顾曾经的摸爬滚打,兢兢业业,严格的来说,多少算是入行了。

过去成绩如何暂且不说,新的一年,我当加倍努力,凤凰涅槃,浴火重生。

二、介绍

在项目中,多媒体的使用非常常见,那么,询问设备的权限必不可少。

优点:这么做极大的增强了用户体验,友好地告知用户去开启权限。

例如:相机的使用权限、相册的使用权限、麦克风的使用权限等

三、代码

1、相机的使用权限 (导入 #import <AVFoundation/AVFoundation.h>)

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){
[self showAlertMessage:@"该设备不支持相机功能"];
return;
} AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
[self showAlertMessage:@"应用相机权限受限,请在设置中启用"];
return;
} UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];

2、相册的使用权限(导入  #import<Photos/PHPhotoLibrary.h>)

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {
[self showAlertMessage:@"该设备不支持相册功能~"];
return;
} PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied){
[self showAlertMessage:@"应用相册权限受限,请在设置中启用"];
return;
} UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
picker.delegate = self;
[self presentViewController:picker animated:YES completion:nil];

3、麦克风的使用权限(导入 #import <AVFoundation/AVFoundation.h>)

AVAuthorizationStatus audioAuthStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];

if (audioAuthStatus == AVAuthorizationStatusNotDetermined) {  //未询问用户是否授权
//第一次询问用户是否进行授权,只会调用一次
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL granted) {
if (!granted) {
dispatch_async(dispatch_get_main_queue(), ^{ //手动禁止了授权
[self showAlertMessage:@"您已禁用了麦克风,请到设置中开启后重试~"];
});
}
}];
}
else if (audioAuthStatus == AVAuthorizationStatusAuthorized) { //麦克风已开启
[[RecordUtility shareRecordUtility] startRecord]; //开始录音
}
else{ //未授权
[self showAlertMessage:@"您未开启麦克风权限,请到设置中开启后重试~"];
}

注意:跳转到设置中开启权限(CCBlcokAlertView是继承自UIAlertView的alertView,自己自定义一下吧,简单)

-(void)showAlertMessage:(NSString *)message{
CCBlockAlertView *alertView = [[CCBlockAlertView alloc] initWithTitle:@"提示" message:message delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil];
alertView.delegate = alertView;
alertView.blockAlertViewDidDismissWithButtonIndex = ^(CCBlockAlertView *blockAlertView, int buttonIndex) {
if (buttonIndex == ) { // 点击了去设置,跳转设置
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
}
};
[alertView show];
}

最新文章

  1. html5页面结构
  2. Reactor 模式的简单实现
  3. 基于AgileEAS.NET SOA 平台SAAS架构技术的开源分销ERP系统-SmartERP.NET下载配置说明
  4. Win10开机提示Resume from Hibernation该怎么办?
  5. CAPI学习心得
  6. Fire!(BFS)
  7. Ubuntu下解压rar文件的方法
  8. java设计模式和设计原则
  9. SQLServer 索引总结
  10. Maven项目热部署,修改代码后不用重启tomcat服务器
  11. eclipse自身导致的项目问题:上边提示需要移除无用包,下边类提示需要导入包。
  12. Node、TS、Koa学习笔记
  13. 【php】下载站系统Simple Down v5.5.1 xss跨站漏洞分析
  14. python第五十课——多态性
  15. hdu4749 kmp改进
  16. Android--字符串和16进制相互转化(解决中文乱码)
  17. 个人技术博客(1/2)android布局技巧
  18. bzoj千题计划163:bzoj1060: [ZJOI2007]时态同步
  19. 摘:用ADO操作数据库的方法步骤
  20. vim:关于映射和跳出括号

热门文章

  1. iOS更改tabbar图片渲染 —不让tabbat有蓝色的渲染 并修改文字
  2. 在VS2015 RC打开CTP中创建的工程
  3. U3D 扩展方法 &amp; Dotween &amp; tolua
  4. 基于ubuntu和windows连接
  5. select2的基本用法
  6. jQuery Ajax(load,post,get,ajax)用法与详解
  7. ASP.Net数据导出Excel的几种方法
  8. linux vim taglist config
  9. [oc] instancetype vs id for Objective-C 【转】
  10. javascript动画效果之透明度
  11. Java读取excel表格
  12. javascript高级程序设计第三章的一些笔记
  13. iOS学习笔记--Quartz2D
  14. 【NPR】铅笔画
  15. 抓包工具Charles安装时需要注意的地方
  16. Ubuntu16下Hive 安装
  17. ubuntu下file_get_contents返回空字符串
  18. redis清除缓存和连接远程服务器
  19. Orchard模块开发全接触4:深度改造前台
  20. Linux 常用小命令