iOS开发各种权限问题(相机,录制等)

电脑杂谈  发布时间:2020-06-27 02:05:49  来源:网络整理

ios 相机相册权限_ios 调用相机相册_ios调用系统相机相册

在iOS开发中,我们通常将系统和麦克风称为“摄像机”和“麦克风”,但是这些权限都是用户可控制的. 如果APP没有调用这些手机资源的权限,但是我们没有判断力,我们会直接调用它们,这会引起问题.

当我在项目中开发IM记录功能时,我没有判断当前的APP是否具有响应权限,这导致记录失败(记录为0kb,长度为0毫秒). 为此,我在工具类中添加了麦克风权限判断方法. 当用户进行记录时,如果检测到未响应的麦克风权限,则会在电话的设置页面上提示用户打开麦克风权限. 使用权限时,只需直接记录即可.

ios调用系统相机相册_ios 调用相机相册_ios 相机相册权限

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

ios 相机相册权限_ios 调用相机相册_ios调用系统相机相册

- (BOOL)canRecordViedo
{
    NSString *mediaType = AVMediaTypeVideo;
    AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
    if (authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
        return NO;
    } else {
        return YES;
    }
}

实际上,该权限无需判断即可使用,因为在没有相册权限的情况下调用本地相册时,系统默认会弹出一个提醒页面,提示没有相册权限的用户进入设置在手机页面上设置该权限. 系统的这个页面仍然可以(不是很丑),所以我使用了系统的提示页面. 但是我仍然在工具类中实现了专辑许可的判断,这方便以后进行分类.

ios调用系统相机相册_ios 调用相机相册_ios 相机相册权限

- (BOOL)albumAuthority
{
    ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus];
    if (author == kCLAuthorizationStatusRestricted || author ==kCLAuthorizationStatusDenied){
        return NO;
    } else {
        return YES;
    }
}

当用户使用定位功能时ios 相机相册权限,还涉及权限问题. 顺便说一句,我还实现了对功能许可的判断:

ios 相机相册权限_ios 调用相机相册_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_凡先生

      • 史莹芳
        史莹芳

        在那两个岛上大力兴建军事码头和军用机场吧

      热点图片
      拼命载入中...