美文网首页iOS程序猿
iOS开发实战:获取手机各种权限状态

iOS开发实战:获取手机各种权限状态

作者: 文竹_自然 | 来源:发表于2019-07-31 17:25 被阅读0次

获取权限状态前,需要先在plist文件添加权限语句,有的还需要在Capabilities设置里打开对应开关。

以下是可能用到的库

下面是具体实现代码

//充电状态

+ (BOOL)NativePhoneBatteryState

{

    //打开电池的监听

    [UIDevice currentDevice].batteryMonitoringEnabled = YES;

    /*

     //battery的状态

     [UIDevice currentDevice].batteryState分为:

     UIDeviceBatteryStateUnknown,    未知

     UIDeviceBatteryStateUnplugged,  // 未充电

     UIDeviceBatteryStateCharging,    // 正在充电

     UIDeviceBatteryStateFull,            // 满电

     */

    //获取电池的状态

    UIDeviceBatteryState BatteryState = [UIDevice currentDevice].batteryState;

    switch(BatteryState) {

        case UIDeviceBatteryStateUnknown:

            returnNO;

            break;

        case UIDeviceBatteryStateCharging:

            returnYES;

            break;

        case UIDeviceBatteryStateFull:

            returnNO;

            break;

        default:

            returnNO;

            break;

    }

}

//网络状态

+ (BOOL)NativeGetNetworkState

{

    Reachability *reach = [Reachability reachabilityWithHostName:@"www.baidu.com"];

    switch ([reach currentReachabilityStatus]) {

        case NotReachable:

            returnNO;

            break;

        case ReachableViaWiFi:

            returnYES;

            break;

        case ReachableViaWWAN:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//相册状态

+ (BOOL)NativeGetPhonePhoto{

    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

    if (status == PHAuthorizationStatusRestricted || status == PHAuthorizationStatusDenied || status == PHAuthorizationStatusNotDetermined)

    {

        returnNO;

    }else{

        returnYES;

    }

}

//相机状态

+ (BOOL)NativeGetPhoneCamera{

    AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

    if (status == AVAuthorizationStatusRestricted || status == AVAuthorizationStatusDenied || status == AVAuthorizationStatusNotDetermined)

    {

        returnNO;

    }else{

        returnYES;

    }

}

//定位状态

+ (BOOL)NativeGetPhoneLocation{

    if([CLLocationManager authorizationStatus] ==kCLAuthorizationStatusDenied || [CLLocationManager authorizationStatus] ==kCLAuthorizationStatusNotDetermined || [CLLocationManager authorizationStatus] ==kCLAuthorizationStatusRestricted) {

        returnNO;

    }else{

        returnYES;

    }

}

//麦克风状态

+ (BOOL)NativeGetPhoneMicrophone{

    AVAuthorizationStatus statusAudio = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];

    if(statusAudio == AVAuthorizationStatusDenied || statusAudio == AVAuthorizationStatusRestricted || statusAudio == AVAuthorizationStatusNotDetermined)

    {

        returnNO;

    }else{

        returnYES;

    }

}

//通讯录状态

+ (BOOL)NativeGetPhoneContacts{

    CNAuthorizationStatus status = [CNContactStore authorizationStatusForEntityType:CNEntityTypeContacts];

    switch(status) {

        case CNAuthorizationStatusNotDetermined:

           returnNO;

            break;

        case CNAuthorizationStatusRestricted:

            returnNO;

            break;

        case CNAuthorizationStatusDenied:

            returnNO;

            break;

        case CNAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//蓝牙状态

+ (BOOL)NativeGetPhoneBlue{

    CBPeripheralManagerAuthorizationStatus authStatus = [CBPeripheralManager authorizationStatus];

    switch(authStatus) {

        case CBPeripheralManagerAuthorizationStatusNotDetermined:

            returnNO;

            break;

        case CBPeripheralManagerAuthorizationStatusRestricted:

            returnNO;

            break;

        case CBPeripheralManagerAuthorizationStatusDenied:

            returnNO;

            break;

        case CBPeripheralManagerAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//日历状态

+ (BOOL)NativeGetPhoneCalendars{

    EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeEvent];

    switch(status) {

        case EKAuthorizationStatusNotDetermined:

            returnNO;

            break;

        case EKAuthorizationStatusRestricted:

            returnNO;

            break;

        case EKAuthorizationStatusDenied:

            returnNO;

            break;

        case EKAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

// Face ID状态

+ (BOOL)NativeGetPhoneFaceID{

    if ([UIDevice currentDevice].systemVersion.floatValue < 11.0f) {

        returnNO;

    }

    LAContext*authenticationContext = [[LAContextalloc]init];

    NSError*error =nil;

   staticBOOLfaceBool =NO;

    BOOL canEvaluatePolicy = [authenticationContext canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&error];

    if(canEvaluatePolicy) {

        if(authenticationContext.biometryType==LABiometryTypeFaceID) {

            [authenticationContextevaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:@"" reply:^(BOOL success, NSError * _Nullable error) {

                if(error) {}else{

                    if(success) {

                        faceBool =YES;

                    }else{

                        faceBool =NO;

                    }

                }

            }];

        }else{

            faceBool =NO;

        }

    }

    returnfaceBool;

}

//健康分享状态

+ (BOOL)NativeGetPhoneHealthShare{

    if ([HKHealthStore isHealthDataAvailable]) {

        HKHealthStore *healthStore = [[HKHealthStore alloc] init];

        HKQuantityType *heartRateType = [HKQuantityType quantityTypeForIdentifier:HKQuantityTypeIdentifierHeartRate];

        HKAuthorizationStatusstatus = [healthStoreauthorizationStatusForType:heartRateType];

        switch(status) {

            case HKAuthorizationStatusNotDetermined:

                returnNO;

                break;

            case HKAuthorizationStatusSharingDenied:

                returnNO;

                break;

            case HKAuthorizationStatusSharingAuthorized:

                returnYES;

                break;

            default:

                returnNO;

                break;

        }

    }else{

        returnNO;

    }

}

//媒体资料库状态

+ (BOOL)NativeGetPhoneAppleMusic{

    if ([UIDevice currentDevice].systemVersion.floatValue < 9.3f) {

       returnNO;

    }

    SKCloudServiceAuthorizationStatus status = [SKCloudServiceController authorizationStatus];

    switch(status) {

        case SKCloudServiceAuthorizationStatusNotDetermined:

            returnNO;

            break;

        case SKCloudServiceAuthorizationStatusRestricted:

            returnNO;

            break;

        case SKCloudServiceAuthorizationStatusDenied:

            returnNO;

            break;

        case SKCloudServiceAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//提醒事项状态

+ (BOOL)NativeGetPhoneReminders{

    EKAuthorizationStatus status = [EKEventStore authorizationStatusForEntityType:EKEntityTypeReminder];

    switch(status) {

        case EKAuthorizationStatusNotDetermined:

            returnNO;

            break;

        case EKAuthorizationStatusRestricted:

            returnNO;

            break;

        case EKAuthorizationStatusDenied:

            returnNO;

            break;

        case EKAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//Siri状态

+ (BOOL)NativeGetPhoneSiri{

    if ([UIDevice currentDevice].systemVersion.floatValue < 10.0f) {

       returnNO;

    }

    INSiriAuthorizationStatus status = [INPreferences siriAuthorizationStatus];

    switch(status) {

        case INSiriAuthorizationStatusNotDetermined:

            returnNO;

            break;

        case EKAuthorizationStatusRestricted:

            returnNO;

            break;

        case INSiriAuthorizationStatusDenied:

            returnNO;

            break;

        case INSiriAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//语音识别状态

+ (BOOL)NativeGetPhoneSpeechRecognition{

    if ([UIDevice currentDevice].systemVersion.floatValue < 10.0f) {

       returnNO;

    }

    SFSpeechRecognizerAuthorizationStatus status = [SFSpeechRecognizer authorizationStatus];

    switch(status) {

        case SFSpeechRecognizerAuthorizationStatusNotDetermined:

            returnNO;

            break;

        case SFSpeechRecognizerAuthorizationStatusRestricted:

            returnNO;

            break;

        case SFSpeechRecognizerAuthorizationStatusDenied:

            returnNO;

            break;

        case SFSpeechRecognizerAuthorizationStatusAuthorized:

            returnYES;

            break;

        default:

            returnNO;

            break;

    }

}

//推送状态

+ (BOOL)NativeGetPhonepush{

    return [UIApplication sharedApplication].isRegisteredForRemoteNotifications;;

}

相关文章

  • iOS开发实战:获取手机各种权限状态

    获取权限状态前,需要先在plist文件添加权限语句,有的还需要在Capabilities设置里打开对应开关。 以下...

  • 权限库升级了~

    关于权限相关的文章已经发了不少:iOS开发中的这些权限,你搞懂了吗?、如何获取iOS应用网络权限?、iOS开发中权...

  • 20170313 iOS 权限相关 : 判断与 跳转 设置

    iOS 常见错误(持续更新) iOS权限获取 摄像头与麦克风 iOS各种权限判断(相机,相册,定位,录音) ios...

  • iOS权限管理类

    PermissionManager 一个解决IOS权限库,只需传入权限类型,就可以 方便请求权限、获取权限状态。 ...

  • iOS unc0ver越狱

    前言 iOS越狱(iOS Jailbreaking)是获取iOS设备的Root权限的技术手段,作为iOS开发者,了...

  • iOS 10的权限设置

    iOS10的版本在获取手机权限的时候会要求开发者手动的去设置权限,否则就会报类似这样的错误: 大体意思就是这个Ap...

  • iOS 系统权限检测功能

    自从iOS8增加了权限需要征得用户同意后,后续iOS对权限的要求越来严格,记录一下各种权限的获取方法 1、定位权限...

  • 【iOS】自定义相机(二)权限获取

    在自定义相机的时候,肯定是需要获取相机权限、麦克风权限和相册写入权限。权限获取这个在iOS开发中十分常见了,具体操...

  • iOS开发实战:获取手机电量

    话不多说,直接上代码 - (NSString*)NativeToolPublicGetDeviceBatteryS...

  • iOS 有关WIFI讯息获取

    iOS 有关WIFI讯息获取 流量监测 获取wifi地址 获取wifi名称 从手机状态栏获取当前网络状态

网友评论

    本文标题:iOS开发实战:获取手机各种权限状态

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