zoukankan      html  css  js  c++  java
  • iOS-硬件授权检测【通讯录、相机、相册、日历、麦克风、定位授权】

    总结下几个常用到的获取手机权限,从iOS8以后,获取手机某种权限需要在info.plist文件中添加权限的描述文件

        <key>NSContactsUsageDescription</key>
        <string>App需要您的允许,才能访问通讯录</string>
        <key>NSBluetoothPeripheralUsageDescription</key>
        <string>App需要您的允许,才能访问蓝牙</string>
        <key>NSCalendarsUsageDescription</key>
        <string>App需要您的允许,才能访问日历</string>
        <key>NSCameraUsageDescription</key>
        <string>App需要您的允许,才能访问相机</string>
        <key>NSHealthUpdateUsageDescription</key>
        <string>App需要您的允许,才能访问健康更新 </string>
        <key>NSLocationAlwaysUsageDescription</key>
        <string></string>
        <key>NSLocationUsageDescription</key>
        <string>App需要您的允许,才能访问位置</string>
        <key>NSLocationWhenInUseUsageDescription</key>
        <string></string>
        <key>NSMicrophoneUsageDescription</key>
        <string>App需要您的允许,才能访问麦克风</string>
        <key>NSMotionUsageDescription</key>
        <string>App需要您的允许,才能访问运动与健身</string>
        <key>NSPhotoLibraryUsageDescription</key>
        <string>App需要您的允许,才能访问相册</string>
        <key>NSRemindersUsageDescription</key>
        <string>App需要您的允许,才能访问提醒事项</string>

         <!-- xcode9以后必须要加-->

         <key>NSPhotoLibraryAddUsageDescription</key>

         <string>App需要您的允许,才能访问相册</string>

     

    1.通讯录

    头文件

    #import <AddressBook/AddressBook.h>

    获取通讯录权限并请求授权

    - (void)addressAuthorization{
        ABAuthorizationStatus authStatus = ABAddressBookGetAuthorizationStatus();
        if (authStatus == kABAuthorizationStatusNotDetermined) {
            // 请求授权
            ABAddressBookRef ressBookRef = ABAddressBookCreate();
            ABAddressBookRequestAccessWithCompletion(ressBookRef, ^(bool granted, CFErrorRef error) {
                if (granted) {
                    NSLog(@"授权成功!");
                } else {
                    NSLog(@"授权失败!");
                }
            });
        }
        else if(authStatus == kABAuthorizationStatusRestricted || authStatus == kABAuthorizationStatusDenied) {
            // 未授权
            
        }
        else{
            // 已授权
        }
    }

    2.相机

    头文件

    #import <AVFoundation/AVFoundation.h>
    #import <AssetsLibrary/AssetsLibrary.h>

    获取相机权限(直接跳相机,在跳到相机时,会提示是否允许访问相机)

    - (void)cameraAuthorization{
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
        if (authStatus == ALAuthorizationStatusDenied||authStatus == ALAuthorizationStatusRestricted) {
            NSLog(@"未授权!");
            return ;
        }
    }

    3.相册

    头文件

    #import <AVFoundation/AVFoundation.h>
    #import <AssetsLibrary/AssetsLibrary.h>

    获取相册权限(直接跳相册,在跳到相册时,会提示是否允许访问相册)

    - (void)photoAuthorization{
        //判断是否已授权
        ALAuthorizationStatus authStatus = [ALAssetsLibrary authorizationStatus];
        if (authStatus == ALAuthorizationStatusDenied) {
            NSLog(@"未授权!");
            return;
        }
    }

    4.日历

    头文件

    #import <EventKit/EventKit.h>

    获取日历权限并请求授权

    -(void)calendarAuthorization{
        EKAuthorizationStatus authStatus = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];
        if (EKAuthorizationStatusNotDetermined == authStatus) {
            EKEventStore *event = [[EKEventStore alloc] init];
            //授权成功,执行后续操作
            [event requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
                if (granted) {
                    NSLog(@"授权成功!");
                } else {
                    NSLog(@"授权失败!");
                }
            }];
        }
        else if(authStatus == EKAuthorizationStatusRestricted || authStatus == EKAuthorizationStatusDenied) {
            // 未授权
            
        }
        else{
            // 已授权
        }
    }

    5.麦克风

    头文件

    获取麦克风权限并请求授权

    - (void)microphoneAuthorization{
        AVAuthorizationStatus authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];
        if (authStatus == AVAuthorizationStatusNotDetermined) {// 未询问用户是否授权
            //第一次询问用户是否进行授权
            [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
                if (granted) {
                     NSLog(@"授权成功!");
                }
                else {
                     NSLog(@"授权失败!");
                }
            }];
        }
        else if(authStatus == AVAuthorizationStatusRestricted || authStatus == AVAuthorizationStatusDenied) {
            // 未授权
           
        }
        else{
            // 已授权
        }
    }

    6.定位

    头文件

    #import <CoreLocation/CoreLocation.h>
    #import <LocalAuthentication/LocalAuthentication.h>

    获取定位权限(请求定位时,会提示是否允许访问位置)

    - (void)locationAuthorization{
        CLAuthorizationStatus authStatus = [CLLocationManager  authorizationStatus];
        //第一次询问用户是否进行授权
        if (kCLAuthorizationStatusNotDetermined == authStatus) {
            //[[[CLLocationManager alloc] init] requestWhenInUseAuthorization];
            //开始定位用户的位置
            //[self.locMgr startUpdatingLocation];
    
        }
        else if(authStatus == kCLAuthorizationStatusRestricted || authStatus == kCLAuthorizationStatusDenied) {
            // 未授权
        }
        else{
            // 已授权
        }
        
    }
  • 相关阅读:
    动态添加placeholder
    texworks编码问题
    c++ 小知识(不定期更新)
    写一个简单的 Makefile
    ubuntu 忘了密码
    遍历各种组合
    分形
    C++ 尾递归优化
    基于 QQBot 实现简易 QQ 机器人
    遇到问题:在函数中开辟动态内存(已解决)
  • 原文地址:https://www.cnblogs.com/wangkejia/p/7833506.html
Copyright © 2011-2022 走看看