美文网首页iOS开发知识小集
ios 相关权限设置授权 与 检测是否开启

ios 相关权限设置授权 与 检测是否开启

作者: 藤王俊采 | 来源:发表于2019-03-29 12:05 被阅读2次

    在做ios 的不同功能的时候可能要寻求 ios系统爸爸很多的权限授权才可以完成。

    然而在很多情况下有很多人有肯能会误点到,或者 主动未授权,那么相应的功能就无法开启了。但是有大多数用户是不知道的,作为一个优秀的程序员,为了更好用户体验,这个时候我们就需要检测相关权限是否授权,如果未授权要给与提示,去设置。

    之前只要在系统上删除app再重新安装的时候,就会再次询问是否授权的操作。但最近随着系统更新发现各种权限只在第一次安装app的时候询问一次后,就不会再次询问了。这样以前卸载重装可以解决的问题就不行了,这个时候就更需要我们来提醒用户授权问题。

    所以接下来总结一下相关权限的授权,检测是否授权,以及提示去设置的操作。

    一 照相机权限

    第一步 在 info.plist 文件中添加照相机权限,并在后面说明原因,系统询问授权前会显示给用户

    1545373553953.jpg

    第二步 在代码中询问授权

    
    //相机权限
    
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
    
        if (authStatus ==AVAuthorizationStatusRestricted ||//此应用程序没有被授权访问的照片数据。可能是家长控制权限
    
            authStatus ==AVAuthorizationStatusDenied)  //用户已经明确否认了这一照片数据的应用程序访问
    
        {
    
            // 无权限 引导去开启 操作 写这里
    
        }
    
    
    
    

    二 照片权限 (选取照片 或者 存储图片)

    1 第一步 同上在 在 info.plist 文件中添加照片权限,并在后面说明用途,系统询问授权前会显示给用户

    1545374125780.jpg

    2 代码询问

    
    [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
    
    
    
            dispatch_async(dispatch_get_main_queue(), ^{
    
                if ((status == PHAuthorizationStatusRestricted) || (status == PHAuthorizationStatusDenied) || (status == PHAuthorizationStatusNotDetermined))
    
                {
    
                // 提示询问逻辑 在这里写
    
                    UIAlertController * alertVC  =  [UIAlertController alertControllerWithTitle:@"" message:@"照片权限未开启" preferredStyle:UIAlertControllerStyleAlert];
    
    
    
                    UIAlertAction * goAction = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
    
    
                        NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    
                        if ([[UIApplication sharedApplication]canOpenURL:url]) {
    
                            [[UIApplication sharedApplication]openURL:url];
    
                        }
    
                    }];
    
    
    
                    UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    
    
    
                    [alertVC addAction:cancelAction];
    
                    [alertVC addAction:goAction];
    
    
    
    
    
                    [self presentViewController:alertVC animated:true completion:nil];
    
                }else{
    
    
    
                    [self shutterCamera];
    
                }
    
            });
    
        }];
    
    

    三 麦克风 权限

    1 第一步 同上在 在 info.plist 文件中添加麦克风权限,并在后面说明用途,系统询问授权前会显示给用户

    1545374550135.jpg

    2 第二步 代码开启询问

    
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
    
    
    
    
    
            AVAudioSessionRecordPermission permissionStatus = [[AVAudioSession sharedInstance] recordPermission];
    
    
    
            switch (permissionStatus) {
    
                case AVAudioSessionRecordPermissionUndetermined:{
    
                    NSLog(@"第一次调用,是否允许麦克风弹框");
    
                    [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
    
                        if (granted) {
    
                            // 第一次询问授权成功
    
                        }
    
                        else {
    
                            // 第一次询问授权失败
    
                        }
    
                    }];
    
                    break;
    
                }
    
                case AVAudioSessionRecordPermissionDenied:
    
                  // 授权失败 在这里做提示,去设置操作
    
    
    
                    break;
    
                case AVAudioSessionRecordPermissionGranted:
    
                    // 授权成功
    
                    break;
    
                default:
    
                    break;
    
            }
    
            if(permissionStatus == AVAudioSessionRecordPermissionUndetermined) return;
    
        }
    
    

    四 语音识别权限

    1 第一步 同上在 在 info.plist 文件中添加 语音识别权限,并在后面说明用途,系统询问授权前会显示给用户

    1545374701153.jpg

    2 第二步 代码开启

    语音识别是从 ios 10.0 开始兼容的,所以在 ios 系统低于10。0时记得提示用户更新系统才可以使用此功能。

    
    if (@available(iOS 10.0, *)) {
    
    
    
            [SFSpeechRecognizer requestAuthorization:^(SFSpeechRecognizerAuthorizationStatus status) {
    
                dispatch_async(dispatch_get_main_queue(), ^{
    
                    switch (status) {
    
                        case SFSpeechRecognizerAuthorizationStatusNotDetermined:
    
                        case SFSpeechRecognizerAuthorizationStatusDenied:
    
                        case SFSpeechRecognizerAuthorizationStatusRestricted:
    
                          //授权失败
    
                            break;
    
    
    
                        case SFSpeechRecognizerAuthorizationStatusAuthorized:
    
                          // 授权成功
    
                            break;
    
                        default:
    
                            break;
    
                    }
    
                });
    
            }];
    
        } else {
    
            NSlog(@"@"系统版本过低,不支持翻译"")
    
    
    
        }
    
    

    五 后台播放权限

    1 app进入后台的 进行后台播放

    注意:记得在工程中打开发后台播放功能 否则不会后台播放

    1545300365959.jpg

    六 定位权限

    1 第一步 infor.plist 中添加定位权限,并说明用途

    1545375269455.jpg

    2 代码判断是否具有定位权限

    
    //定位服务是否可用
    
            BOOL enable=[CLLocationManager locationServicesEnabled];
    
            //是否具有定位权限
    
            int status=[CLLocationManager authorizationStatus];
    
    
    
            if (status == 2) {
    
    
    
            // 在这里做提示 去开启的操作
    
    
    
            } else if(!enable || status<3){
    
                //请求权限
    
                [_locationManager requestWhenInUseAuthorization];
    
            }
    
    

    最后 去设置

    
    UIAlertController * alertVC  =  [UIAlertController alertControllerWithTitle:@"" message:@"某某权限未开启,无法进行。。。。。" preferredStyle:UIAlertControllerStyleAlert];
    
    
    
            UIAlertAction * goAction = [UIAlertAction actionWithTitle:@"去设置" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    
    
    
                NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
    
                if ([[UIApplication sharedApplication]canOpenURL:url]) {
    
                    [[UIApplication sharedApplication]openURL:url];
    
                }
    
            }];
    
    
    
            UIAlertAction * cancelAction = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];
    
    
    
            [alertVC addAction:cancelAction];
    
            [alertVC addAction:goAction];
    
    
    
    
    
            [self presentViewController:alertVC animated:true completion:nil];
    
    

    相关文章

      网友评论

        本文标题:ios 相关权限设置授权 与 检测是否开启

        本文链接:https://www.haomeiwen.com/subject/koclbqtx.html