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

获取权限状态前,需要先在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;;

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容