文章目录
  1. 1. 起因
  2. 2. 麦克风权限
  3. 3. 相机权限
  4. 4. 相册权限
  5. 5. 定位权限
  6. 6. 总结
  7. 7. 号外

起因


在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;
}
}

总结


当我们调用系统资源的时候,一定要先判断是否拥有相应的权限,做到代码的严谨性。

号外


扫码关注下面二维码,干货不断:
二维码

文章目录
  1. 1. 起因
  2. 2. 麦克风权限
  3. 3. 相机权限
  4. 4. 相册权限
  5. 5. 定位权限
  6. 6. 总结
  7. 7. 号外