iOS開(kāi)發(fā)實(shí)戰(zhàn):獲取手機(jī)各種權(quán)限狀態(tài)

獲取權(quán)限狀態(tài)前枫疆,需要先在plist文件添加權(quán)限語(yǔ)句爵川,有的還需要在Capabilities設(shè)置里打開(kāi)對(duì)應(yīng)開(kāi)關(guān)。

以下是可能用到的庫(kù)


下面是具體實(shí)現(xiàn)代碼

//充電狀態(tài)

+ (BOOL)NativePhoneBatteryState

{

? ? //打開(kāi)電池的監(jiān)聽(tīng)

? ? [UIDevice currentDevice].batteryMonitoringEnabled = YES;

? ? /*

?? ? //battery的狀態(tài)


?? ? [UIDevice currentDevice].batteryState分為:




?? ? UIDeviceBatteryStateUnknown,? ? 未知


?? ? UIDeviceBatteryStateUnplugged,? // 未充電


?? ? UIDeviceBatteryStateCharging,? ? // 正在充電


?? ? UIDeviceBatteryStateFull,? ? ? ? ? ? // 滿電

?? ? */

? ? //獲取電池的狀態(tài)

? ? UIDeviceBatteryState BatteryState = [UIDevice currentDevice].batteryState;

? ? switch(BatteryState) {

? ? ? ? case UIDeviceBatteryStateUnknown:

? ? ? ? ? ? returnNO;

? ? ? ? ? ? break;


? ? ? ? case UIDeviceBatteryStateCharging:

? ? ? ? ? ? returnYES;

? ? ? ? ? ? break;

? ? ? ? case UIDeviceBatteryStateFull:

? ? ? ? ? ? returnNO;

? ? ? ? ? ? break;


? ? ? ? default:

? ? ? ? ? ? returnNO;

? ? ? ? ? ? break;

? ? }


}

//網(wǎng)絡(luò)狀態(tài)

+ (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;

? ? }

}

//相冊(cè)狀態(tài)

+ (BOOL)NativeGetPhonePhoto{

? ? PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

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

? ? {

? ? ? ? returnNO;

? ? }else{

? ? ? ? returnYES;

? ? }

}

//相機(jī)狀態(tài)

+ (BOOL)NativeGetPhoneCamera{

? ? AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];

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

? ? {

? ? ? ? returnNO;

? ? }else{

? ? ? ? returnYES;

? ? }

}

//定位狀態(tài)

+ (BOOL)NativeGetPhoneLocation{

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


? ? ? ? returnNO;

? ? }else{

? ? ? ? returnYES;

? ? }

}

//麥克風(fēng)狀態(tài)

+ (BOOL)NativeGetPhoneMicrophone{

? ? AVAuthorizationStatus statusAudio = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio];

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

? ? {

? ? ? ? returnNO;

? ? }else{

? ? ? ? returnYES;

? ? }

}

//通訊錄狀態(tài)

+ (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;

? ? }


}

//藍(lán)牙狀態(tài)

+ (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;

? ? }

}

//日歷狀態(tài)

+ (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狀態(tài)

+ (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;


}

//健康分享狀態(tài)

+ (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;

? ? }


}

//媒體資料庫(kù)狀態(tài)

+ (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;

? ? }

}

//提醒事項(xiàng)狀態(tài)

+ (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狀態(tài)

+ (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;

? ? }


}

//語(yǔ)音識(shí)別狀態(tài)

+ (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;

? ? }

}

//推送狀態(tài)

+ (BOOL)NativeGetPhonepush{

? ? return [UIApplication sharedApplication].isRegisteredForRemoteNotifications;;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末息楔,一起剝皮案震驚了整個(gè)濱河市寝贡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌值依,老刑警劉巖圃泡,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異愿险,居然都是意外死亡颇蜡,警方通過(guò)查閱死者的電腦和手機(jī)价说,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)风秤,“玉大人鳖目,你說(shuō)我怎么就攤上這事$拖遥” “怎么了领迈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)碍沐。 經(jīng)常有香客問(wèn)我狸捅,道長(zhǎng),這世上最難降的妖魔是什么累提? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任尘喝,我火速辦了婚禮,結(jié)果婚禮上斋陪,老公的妹妹穿的比我還像新娘瞧省。我一直安慰自己,他們只是感情好鳍贾,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布鞍匾。 她就那樣靜靜地躺著,像睡著了一般骑科。 火紅的嫁衣襯著肌膚如雪橡淑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天咆爽,我揣著相機(jī)與錄音梁棠,去河邊找鬼。 笑死斗埂,一個(gè)胖子當(dāng)著我的面吹牛符糊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播呛凶,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼男娄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了漾稀?” 一聲冷哼從身側(cè)響起模闲,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崭捍,沒(méi)想到半個(gè)月后尸折,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡殷蛇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年实夹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了橄浓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡亮航,死狀恐怖荸实,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情塞赂,我是刑警寧澤泪勒,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布昼蛀,位于F島的核電站宴猾,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叼旋。R本人自食惡果不足惜仇哆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望夫植。 院中可真熱鬧讹剔,春花似錦、人聲如沸详民。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)沈跨。三九已至由捎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間饿凛,已是汗流浹背狞玛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涧窒,地道東北人心肪。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像纠吴,于是被迫代替她去往敵國(guó)和親硬鞍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容