iOS开发各种权限问题(相机、录音等)
来源:互联网 发布:em算法 q函数 编辑:程序博客网 时间:2024/06/08 19:46
起因
在iOS开发中我们经常会调用系统相机和麦克风,但是这些权限都是用户可以控制的,当APP没有权限调用这些手机资源,但是我们没有判断,直接去调用了,这样会出现问题。
麦克风权限
我在项目中开发IM的录音功能的时候,没有判断当前APP是否拥有响应的权限,导致录制失败(录制出来是0kb,长度也是0毫秒)。为此我在工具类中,添加了麦克风权限的判断方法,当用户去录音的时候,如果检测到没有响应的麦克风权限,则提示用户到手机的设置页面打开麦克风的权限,当用权限的时候直接录制就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
- (BOOL)canRecord
{
__block BOOL bCanRecord = YES;
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0"] != NSOrderedAscending)
{
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
if ([audioSession respondsToSelector:@selector(requestRecordPermission:)]) {
[audioSession performSelector:@selector(requestRecordPermission:) withObject:^(BOOL granted) {
bCanRecord = granted;
}];
}
}
return bCanRecord;
}
相机权限
同样在开发IM的小视屏(和微信小视屏一样)功能的时候也遇到了同样的问题,在没有判断相机权限的前提下,我手动关掉了APP的相机访问权限,则我录制视频的时候的预览页黑乎乎一片,什么也没有,同样没办法录制,这给用户的体验非常差,所以当我们调用系统资源的时候,一定要先判断是否拥有相应的权限。以下是我的判断相机权限的代码:
1
2
3
4
5
6
7
8
9
10
- (BOOL)canRecordViedo
{
NSString *mediaType = AVMediaTypeVideo;
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
return NO;
} else {
return YES;
}
}
相册权限
其实该权限不去判断也可以,因为当你没有相册权限而去调用本机相册的时候,系统默认会pop出一个提示的页面,提示用户,没有相册权限,去手机的设置页面设置该权限。系统的这个页面还是可以的(不丑),所以我就用了系统的提示页面了。但是我还是在工具类中实现了相册权限的判断,方便以后归类。
1
2
3
4
5
6
7
8
9
- (BOOL)albumAuthority
{
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
if (author == kCLAuthorizationStatusRestricted || author ==kCLAuthorizationStatusDenied){
return NO;
} else {
return YES;
}
}
定位权限
当用户用到定位的功能的时候,也涉及到权限的问题,我顺便也实现了该功能权限的判断:
1
2
3
4
5
6
7
8
9
- (BOOL)locationAuthority
{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (kCLAuthorizationStatusDenied == status || kCLAuthorizationStatusRestricted == status) {
return NO;
} else {
return YES;
}
}
总结
当我们调用系统资源的时候,一定要先判断是否拥有相应的权限,做到代码的严谨性。
原文链接:http://coderperson.com/2016/08/02/iOS-authorization/
0 0
- iOS开发各种权限问题(相机、录音等)
- iOS开发各种权限问题(相机、录音等)
- iOS各种权限判断(相机,相册,定位,录音)
- iOS开发-权限问题如:相机权限,联网权限,定位权限等
- iOS 解决iOS10相册、相机、麦克风等权限使用问题
- iOS 10 设备权限问题(相机,相册等)
- iOS中 iOS10 调用相机相册等权限崩溃问题
- iOS中 iOS10 相机相册等权限崩溃问题
- 关于部分国产手机的相机录音等权限判断
- iOS开发 iOS10访问权限的配置(解决访问奔溃问题,包括相册/相机等)
- iOS 开发相机,相册权限问题,代码总结
- iOS相机,相册等访问权限
- ios判断相册,相机,麦克风等权限
- IOS开发 录音权限访问-AVAudioSession
- ios10相机 相册等权限问题
- iOS 10 开发之权限Crash 相机相册等权限的使用、检测并引导用户开启权限
- iOS调用相册、相机、上传等问题
- iOS调用相册、相机、上传等问题
- 解决Andriod软键盘出现把原来的布局给顶上去的方法(转)
- 最养眼的女神级别程序员妹子
- android对输入法的操作
- Oculus cv1安装教程以及在Unity环境手柄的开发
- PreferenceActivity使用方法
- iOS开发各种权限问题(相机、录音等)
- C++ STL中set容器总结
- 关于jQuery中经常用到的attr函数和after函数
- 安卓中引入GreenDAO数据库框架,包括封装好的数据库操作工具类
- 数据存储—读取Assets中的数据test
- 《新闻阅读器》总结”三“ ImageLoader
- Android Style理解
- Runnable和Callable的区别
- Spring利用MultipartFile接收FormData对象上传文件(可接收AJAX上传的包含多文件的复杂表单内容)