
在iOS开发中,我们通常将系统和麦克风称为“摄像机”和“麦克风”,但是这些权限都是用户可控制的. 如果APP没有调用这些手机资源的权限,但是我们没有判断力,我们会直接调用它们,这会引起问题.
当我在项目中开发IM记录功能时,我没有判断当前的APP是否具有响应权限,这导致记录失败(记录为0kb,长度为0毫秒). 为此,我在工具类中添加了麦克风权限判断方法. 当用户进行记录时,如果检测到未响应的麦克风权限,则会在电话的设置页面上提示用户打开麦克风权限. 使用权限时,只需直接记录即可.

- (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的访问许可ios 相机相册权限,因此我录制了视频的预览页,几乎是黑色的,什么也没有,也没有录制方法. 这给用户带来了非常糟糕的体验,因此,当我们调用系统资源时,必须首先确定我们是否具有适当的权限. 以下是我用于判断权限的代码:

- (BOOL)canRecordViedo
{
NSString *mediaType = AVMediaTypeVideo;
AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
return NO;
} else {
return YES;
}
}
实际上,该权限无需判断即可使用,因为在没有相册权限的情况下调用本地相册时,系统默认会弹出一个提醒页面,提示没有相册权限的用户进入设置在手机页面上设置该权限. 系统的这个页面仍然可以(不是很丑),所以我使用了系统的提示页面. 但是我仍然在工具类中实现了专辑许可的判断,这方便以后进行分类.

- (BOOL)albumAuthority
{
ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
if (author == kCLAuthorizationStatusRestricted || author ==kCLAuthorizationStatusDenied){
return NO;
} else {
return YES;
}
}
当用户使用定位功能时ios 相机相册权限,还涉及权限问题. 顺便说一句,我还实现了对功能许可的判断:

- (BOOL)locationAuthority
{
CLAuthorizationStatus status = [CLLocationManager authorizationStatus];
if (kCLAuthorizationStatusDenied == status || kCLAuthorizationStatusRestricted == status) {
return NO;
} else {
return YES;
}
}
调用系统资源时,首先必须确定我们是否具有相应的权限才能实现严格的代码.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-259735-1.html
懂不懂@Mr_凡先生
在那两个岛上大力兴建军事码头和军用机场吧
也是事实