11 ios 授权 相机 跳转_ios 如何跳转到设置相机权限 - CSDN
  • ios 跳转系统设置界面

    2018-02-14 10:15:09
    iOS开发中有时候有这样的需求:当用户设置不允许访问照片、麦克风和相机等系统权限的时候,这时需要直接跳转到系统的隐私界面进行设置。判断是否开启权限前面已经说过,我们需要在用户不允许访问的时候跳转,那么...

    iOS开发中有时候有这样的需求:当用户设置不允许访问照片、麦克风和相机等系统权限的时候,这时需要直接跳转到系统的隐私界面进行设置。

    判断是否开启权限

    前面已经说过,我们需要在用户不允许访问的时候跳转,那么首先我们就要判断一些是否已经开启系统相机权限了。

    照片权限检测

    需要:#import <AssetsLibrary/AssetsLibrary.h> //导入此类和AssetsLibrary.framework框架

    代码如下:

    int author = [ALAssetsLibrary authorizationStatus];
                NSLog(@"author type:%d",author);
                if(author == ALAuthorizationStatusRestricted || author == ALAuthorizationStatusDenied) {
                    // The user has explicitly denied permission for media capture.
                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"无法使用相册"
                                                                    message:@"请在iPhone的\"设置-隐私-照片\"中允许访问照片。"
                                                                   delegate:self
                                                          cancelButtonTitle:@"确定"
                                                          otherButtonTitles:nil];
                    [alert show];
                    return;

    ALAssetsLibrary类

    ALAssetsLibrary类是代表系统中整个资源库,使用它可以访问资源库中的资源和保存照片,视频等功能。

        //判断当前应用是否能访问相册资源
        /*
         typedef NS_ENUM(NSInteger, ALAuthorizationStatus) {
         ALAuthorizationStatusNotDetermined = 0, 用户尚未做出了选择这个应用程序的问候
         ALAuthorizationStatusRestricted,        此应用程序没有被授权访问的照片数据。可能是家长控制权限。
         ALAuthorizationStatusDenied,            用户已经明确否认了这一照片数据的应用程序访问.
         ALAuthorizationStatusAuthorized         用户已授权应用访问照片数据.
         }
         */

    访问摄像头

    需要:#import <AVFoundation/AVFoundation.h>

    代码如下:

    if(isIOS7AndLater) {
    
    NSString *mediaType = AVMediaTypeVideo;// Or AVMediaTypeAudio
            AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];
            NSLog(@"---cui--authStatus--------%d",authStatus);
            // This status is normally not visible—the AVCaptureDevice class methods for discovering devices do not return devices the user is restricted from accessing.
            if(authStatus ==AVAuthorizationStatusRestricted){
                NSLog(@"Restricted");
            }else if(authStatus == AVAuthorizationStatusDenied){
                // The user has explicitly denied permission for media capture.
                NSLog(@"Denied");     //应该是这个,如果不允许的话
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
                                                                message:@"请在设备的\"设置-隐私-相机\"中允许访问相机。"
                                                               delegate:self
                                                      cancelButtonTitle:@"确定"
                                                      otherButtonTitles:nil];
                [alert show];
                return;
            }
            else if(authStatus == AVAuthorizationStatusAuthorized){//允许访问
                // The user has explicitly granted permission for media capture, or explicit user permission is not necessary for the media type in question.
                NSLog(@"Authorized");
    
            }else if(authStatus == AVAuthorizationStatusNotDetermined){
                // Explicit user permission is required for media capture, but the user has not yet granted or denied such permission.
                [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
                    if(granted){//点击允许访问时调用
                        //用户明确许可与否,媒体需要捕获,但用户尚未授予或拒绝许可。
                        NSLog(@"Granted access to %@", mediaType);
                    }
                    else {
                        NSLog(@"Not granted access to %@", mediaType);
                    }
    
                }];
            }else {
                NSLog(@"Unknown authorization status");
            }
    }

    麦克风权限检测

    代码如下:

      //检测麦克风功能是否打开
        [[AVAudioSessionsharedInstance]requestRecordPermission:^(BOOL granted) {
            if (!granted)
            {
                [ViewUtilalertViewWithString:NSLocalizedString(@"麦克风功能未开启",nil)];
            }
            else
            {
    
                [selfrecord:sender];
            }
        }];

    如何跳转到系统设置界面

    判断权限是否设置之后就可以在相应的代理方法进行界面跳转了,那么如何进行跳转呢?

    首先要在项目中的info.plist中添加 URL types 并设置一项URL Schemes为prefs,如下图:


    1.jpg

    实现代码如下:

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];//url为具体路径

    以下是跳转到一些常用界面的代码

    隐私->照片界面

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Privacy&path=PHOTOS"]];

    隐私->相机界面

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Privacy&path=CAMERA"]];

    蓝牙设置界面

    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=Bluetooth"]];

    其他界面参数配置

    About — prefs:root=General&path=About

    Accessibility — prefs:root=General&path=ACCESSIBILITY

    Airplane Mode On — prefs:root=AIRPLANE_MODE

    Auto-Lock — prefs:root=General&path=AUTOLOCK

    Brightness — prefs:root=Brightness

    Bluetooth — prefs:root=General&path=Bluetooth

    Date & Time — prefs:root=General&path=DATE_AND_TIME

    FaceTime — prefs:root=FACETIME

    General — prefs:root=General

    Keyboard — prefs:root=General&path=Keyboard

    iCloud — prefs:root=CASTLE

    iCloud Storage & Backup — prefs:root=CASTLE&path=STORAGE_AND_BACKUP

    International — prefs:root=General&path=INTERNATIONAL

    Location Services — prefs:root=LOCATION_SERVICES

    Music — prefs:root=MUSIC

    Music Equalizer — prefs:root=MUSIC&path=EQ

    Music Volume Limit — prefs:root=MUSIC&path=VolumeLimit

    Network — prefs:root=General&path=Network

    Nike + iPod — prefs:root=NIKE_PLUS_IPOD

    Notes — prefs:root=NOTES

    Notification — prefs:root=NOTIFICATIONS_ID

    // 

    @"prefs:root=NOTIFICATIONS_ID&path=应用的boundleId"

    Phone — prefs:root=Phone

    Photos — prefs:root=Photos

    Profile — prefs:root=General&path=ManagedConfigurationList

    Reset — prefs:root=General&path=Reset

    Safari — prefs:root=Safari

    Siri — prefs:root=General&path=Assistant

    Sounds — prefs:root=Sounds

    Software Update — prefs:root=General&path=SOFTWARE_UPDATE_LINK

    Store — prefs:root=STORE

    Twitter — prefs:root=TWITTER

    Usage — prefs:root=General&path=USAGE

    VPN — prefs:root=General&path=Network/VPN

    Wallpaper — prefs:root=Wallpaper

    Wi-Fi — prefs:root=WIFI

    展开全文
  • iOS App跳转权限设置

    2019-04-12 18:26:31
    开启照相机 #import <AVFoundation/AVFoundation.h> - (void)getCameraJurisdiction { NSString *mediaType = AVMediaTypeVideo;// Or AVMediaTypeAudio ... AVAuthorizationStatus authStatus = [AVCaptur.....

    开启照相机

    #import <AVFoundation/AVFoundation.h>

    - (void)getCameraJurisdiction {

        NSString *mediaType = AVMediaTypeVideo;// Or AVMediaTypeAudio

        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];

        if(authStatus == AVAuthorizationStatusDenied){

            // The user has explicitly denied permission for media capture.

            NSLog(@"Denied");     //应该是这个,如果不允许的话

            UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请在设置中允许访问相机" preferredStyle:UIAlertControllerStyleAlert];

            //默认只有标题 没有操作的按钮:添加操作的按钮 UIAlertAction

            UIAlertAction *cancelBtn = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

                NSLog(@"取消");

            }];

            //添加确定

            UIAlertAction *sureBtn = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull   action) {

                NSLog(@"确定");

                [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

            }];

            //设置`确定`按钮的颜色

            [sureBtn setValue:[UIColor redColor] forKey:@"titleTextColor"];

            //将action添加到控制器

            [alertVc addAction:cancelBtn];

            [alertVc addAction :sureBtn];

            //展示

            [self presentViewController:alertVc animated:YES completion:nil];

        }

        else {

            self.isCameraCanPush = YES;

        }

    }

    开启麦克风

    - (void)getmMicrophone {

        //检测麦克风功能是否打开

        [[AVAudioSession sharedInstance]requestRecordPermission:^(BOOL granted) {

            if (!granted){

                NSLog(@"麦克风没开");

                UIAlertController *alertVc = [UIAlertController alertControllerWithTitle:@"温馨提示" message:@"请在设置中允许访问麦克风" preferredStyle:UIAlertControllerStyleAlert];

                //默认只有标题 没有操作的按钮:添加操作的按钮 UIAlertAction

                

                UIAlertAction *cancelBtn = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {

                    NSLog(@"取消");

                }];

                //添加确定

                UIAlertAction *sureBtn = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull   action) {

                    NSLog(@"确定");

                    [[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];

                }];

                //设置`确定`按钮的颜色

                [sureBtn setValue:[UIColor redColor] forKey:@"titleTextColor"];

                //将action添加到控制器

                [alertVc addAction:cancelBtn];

                [alertVc addAction :sureBtn];

                //展示

                [self presentViewController:alertVc animated:YES completion:nil];

            }else {

                self.isSoundCanPush = YES;

            }

        }];

    }

    标红为核心跳转方法,但是只支持iOS10 或以上,iOS10 以下处理 如下

    NSURL *url = [NSURL URLWithString:@"App-Prefs:root=Privacy&path=CAMERA"];

    if ([[UIApplication sharedApplication] canOpenURL:url]){

        if (@available(iOS 10.0, *)) {

            [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

        }else {

            [[UIApplication sharedApplication] openURL:url];

        }

    }

    上面这个相机方法 运气不好基本都得被拒绝,可以处理以下那个字符串,让苹果检测不出来 

     

     

     

    展开全文
  • NSString *mediaType = AVMediaTypeVideo;//读取媒体类型  AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:...//读取设备授权状态  [AVCaptureDevice requestAccessForMe...

       NSString *mediaType = AVMediaTypeVideo;//读取媒体类型
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];//读取设备授权状态
        [AVCaptureDevice requestAccessForMediaType:mediaType completionHandler:^(BOOL granted) {
            if (granted) {
                NSLog(@"允许了");
            }else
            {
                 NSLog(@"拒绝了");
            }
        }];

    展开全文
  • 判断相机权限是否被限制,需要导入 AVFoundation 类#import

    参考博客:http://www.2cto.com/kf/201501/370447.html

                      http://www.2cto.com/kf/201406/312257.html


     判断相机权限是否被限制

    需要导入   AVFoundation 类

    #import <AVFoundation/AVFoundation.h>

    //    iOS 判断应用是否有使用相机的权限
        
        NSString *mediaType = AVMediaTypeVideo;//读取媒体类型
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:mediaType];//读取设备授权状态
        if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied){
            NSString *errorStr = @"应用相机权限受限,请在设置中启用";
            [[HUDHelper getInstance] showErrorTipWithLabel:errorStr view:self.navigationController.view];
            return;
        }
    


    如果状态是一个枚举

    typedef NS_ENUM(NSInteger, AVAuthorizationStatus) {
    	AVAuthorizationStatusNotDetermined = 0,
    	AVAuthorizationStatusRestricted,
    	AVAuthorizationStatusDenied,
    	AVAuthorizationStatusAuthorized
    } NS_AVAILABLE_IOS(7_0);

    AVAuthorizationStatusNotDetermined
    用户还没有对应用程序授权进行操作

    AVAuthorizationStatusRestricted
    还没有授权访问的照片数据。

    AVAuthorizationStatusDenied
    用户拒绝对应用程序授权

    AVAuthorizationStatusAuthorized
    用户对应用程序授权



    另外,需要对相机进行判断是否被授权,而相册不需要判断是否授权。

    因为相机没有授权的话不能被使用。


    而相册的话,系统默认modol出界面提示

    就不需要我们进行判断,提示用户了。




    判断相机是否可以使用

    以下是参考方法:

    #pragma mark - 摄像头和相册相关的公共类
    // 判断设备是否有摄像头
    - (BOOL) isCameraAvailable{
        return [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera];
    }
    
    // 前面的摄像头是否可用
    - (BOOL) isFrontCameraAvailable{
        return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront];
    }
    
    // 后面的摄像头是否可用
    - (BOOL) isRearCameraAvailable{
        return [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear];
    }

    相应的我们需要判断用户的摄像头是否是坏的,以防程序crash

    if (![self isFrontCameraAvailable]) {
            //判断相机是否可用
            NSString *errorStr = @"相机出现问题,将跳转到相册选择照片";
            [[HUDHelper getInstance] showErrorTipWithLabel:errorStr view:self.navigationController.view];
            dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0*NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                [self openPhotoLibrary];
            });
            return;
        }

    摄像头坏了话,我们可以直接跳到  从相册中选择照片


    展开全文
  • 开始以为苹果不支持直接从应用跳转,需要用到私有API什么的,后来发现,这个功能其实非常好实现! 跳转设置蓝牙页面 let url = NSURL(string: "prefs:root=Bluetooth"); if UIApplication.sharedApplic

    之前做蓝牙小应用的时候有个需求是:进入app发现没有打开蓝牙,需要切换到系统设置页面的蓝牙中。开始以为苹果不支持直接从应用跳转,需要用到私有API什么的,后来发现,这个功能其实非常好实现!

    跳转设置蓝牙页面

            let url = NSURL(string: "prefs:root=Bluetooth");
            if UIApplication.sharedApplication().canOpenURL(url!) {
                UIApplication.sharedApplication().openURL(url!)
            }

    跳到更多设置页面

    除了跳到蓝牙设置页面,我们还可以跳到其他的设置页面,例如:定位服务、WiFi、FaceTime等等,都是可以的!我们只要把 prefs:root= 后面的值替换一下就可以了!

    下面是我在网上找到的参数列表,在iOS9.2,Swift2.0下亲测可用,需要自己拿:

    功能 URL
    关于本机 prefs:root=General&path=About
    辅助功能 prefs:root=General&path=ACCESSIBILITY
    飞行模式 prefs:root=AIRPLANE_MODE
    自动锁定 prefs:root=General&path=AUTOLOCK
    蓝牙 prefs:root=Bluetooth
    日期与时间 prefs:root=General&path=DATE_AND_TIME
    FaceTime prefs:root=FACETIME
    通用 prefs:root=General
    键盘 prefs:root=General&path=Keyboard
    iCloud prefs:root=CASTLE
    iCloud存储空间 prefs:root=CASTLE&path=STORAGE_AND_BACKUP
    语言与地区 prefs:root=General&path=INTERNATIONAL
    定位服务 prefs:root=LOCATION_SERVICES
    邮件、通讯录、日历 prefs:root=ACCOUNT_SETTINGS
    音乐 prefs:root=MUSIC
    音乐 prefs:root=MUSIC&path=EQ
    音乐 prefs:root=MUSIC&path=VolumeLimit
    备忘录 prefs:root=NOTES
    通知 prefs:root=NOTIFICATIONS_ID
    电话 prefs:root=Phone
    照片与相机 prefs:root=Photos
    描述文件 prefs:root=General&path=ManagedConfigurationList
    还原 prefs:root=General&path=Reset
    电话铃声 prefs:root=Sounds&path=Ringtone
    Safari prefs:root=Safari
    声音 prefs:root=Sounds
    软件更新 prefs:root=General&path=SOFTWARE_UPDATE_LINK
    App Store prefs:root=STORE
    Twitter prefs:root=TWITTER
    视频 prefs:root=VIDEO
    VPN prefs:root=General&path=VPN
    墙纸 prefs:root=Wallpaper
    WiFi prefs:root=WIFI
    个人热点 prefs:root=INTERNET_TETHERING


    文/MarkLin(简书作者)
    原文链接:http://www.jianshu.com/p/df41dffc43e5
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
    展开全文
  • 相机权限 1.1 使用说明 在合适的地方导入#import <AVFoundation/AVFoundation.h> 使用AVAuthorizationStatus类获取当前权限状态 在没有权限的情况下弹出alertView提示跳转。 1.2 代码示例 权限...
  • <!--相册--> <key>NSPhotoLibraryUsageDescription</key> <string>App需要您的同意,才能访问相册<...--相机--> <key>NSCameraUsageDescription</key&g...
  • &lt;!-- 相册 --&gt; &lt;key&gt;NSPhotoLibraryUsageDescription&lt;/key&...-- 相机 --&gt; &lt;key&gt;NSCameraUsageDescription&lt;/key&gt;
  • iOS授权集合,可同时请求多授权 支持授权 Camera: 相机 Microphone: 麦克风 PhoneLibrary: 相册 Contact: 通讯录 Calendar: 日历 Reminder: 提醒 LocationWhenInUse: 试用期间的定位 LocationAlways: 始终...
  • iOS开发中有时候会遇到这样一个需求,当 APP 中需要获取使用相机/相册等系统的权限时,而用户第一次却没有授权,当用户再次进入时,我们则需要提示用户去开启权限,并且直接跳到系统的设置界面授权。方法有2种 ...
  • iOS开发中有时候有这样的需求:当用户设置不允许访问照片、麦克风和相机等系统权限的时候,这时需要直接跳转到系统的隐私界面进行设置。 判断是否开启权限 前面已经说过,我们需要在用户不允许访问的时候跳转,...
  • ios 判断用户是否开启权限---并跳转设置 ios 判断用户是否开启权限---并跳转“系统设置” 1.判断 访问相册 或 相机 权限是否开启 2.检测是否开启定位 后面将持续更新 只有在应用请求过位置权限 ...
  • iOS6之后,app中使用照片(即自带相册)需要用户权限验证,所以我们可以做一个权限判断给出友好的提示或者界面效果。 相册判断需要导入  ALAuthorizationStatus author = [ALAssetsLibrary authorizationStatus...
  • 一、iOS应用权限检测在涉及到这个问题的时候,首先为了适配iOS10系统,我们必须首先在info.plist文件声明中将要用到的权限,否则将会引起崩溃如下: “This app has crashed because it attempted to access ...
  • 今天看到一个整理的比较齐全的iOS适配笔记。就转载记录一下。 转自掘金 一、iOS12(Xcode10) 1.1、升级Xcode10后项目报错 不允许多个info.plist Xcode10是默认选中的最新的New Build System(Default),在这个...
  • iOS开发中有时候有这样的需求:当用户设置不允许访问照片、麦克风和相机等系统权限的时候,这时需要直接跳转到系统的隐私界面进行设置。 判断是否开启权限 前面已经说过,我们需要在用户不允许访问的时候跳转...
1 2 3 4 5 ... 20
收藏数 1,191
精华内容 476
关键字:

11 ios 授权 相机 跳转