iOS14增加了精確位置開關(guān),當(dāng)獲取定位權(quán)限,用戶關(guān)閉了精確位置
比如獲取當(dāng)前連接的WiFi信息的時候,會無法獲取
1. 在info.plist中設(shè)置對應(yīng)場景的key和value
key用于申請該場景的精確位置權(quán)限,value用于申請權(quán)限時的描述
<key>NSLocationTemporaryUsageDescriptionDictionary</key>
<dict>
<key>wifiListPurposeKey</key>
<string>應(yīng)用需要精確位置獲取附近WiFi信息,用于配置設(shè)備網(wǎng)絡(luò)</string>
</dict>
wifiListPurposeKey在后續(xù)場景申請權(quán)限時用到,必須保持一致
2. 獲取當(dāng)前精確位置開關(guān)狀態(tài)
#import <CoreLocation/CoreLocation.h>
- (void)preciseSwitch:(void(^)(BOOL))complete {
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
if (@available(iOS 14.0, *)) {
CLAccuracyAuthorization accuracy = [locationManager accuracyAuthorization];
if (accuracy == CLAccuracyAuthorizationFullAccuracy) {
if (complete) {
complete(YES);
}
} else {
if (complete) {
complete(NO);
}
[locationManager requestTemporaryFullAccuracyAuthorizationWithPurposeKey:@"wifiListPurposeKey"
completion:^(NSError * _Nullable error) {
}];
}
} else {
if (complete) {
complete(YES);
}
}
}
-
這邊做個版本保護,只有14以上才需要判斷開關(guān)狀態(tài)。
- (void)requestTemporaryFullAccuracyAuthorizationWithPurposeKey:(NSString *)purposeKey completion:(void(^ _Nullable)(NSError * _Nullable))completion
-
需要注意的是這里的completion并不是用戶選擇授權(quán)后的回調(diào),應(yīng)該是授權(quán)過程的中異常回調(diào),而不是用戶選擇的回調(diào).
-
如果需要在用戶選擇授權(quán)后處理邏輯,可以考慮在監(jiān)聽這個UIApplicationDidBecomeActiveNotification事件,在這里去處理。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];