在iOS開發(fā)過程中席里,有時會遇到需要跳轉到系統(tǒng)設置頁面检盼,讓用戶來打開權限的需求,今天說一下我在打開系統(tǒng)設置頁面中遇到的問題
在我使用下面代碼跳轉設置頁面打開定位信息時庭砍,跳轉到的設置頁面沒有定位選項
if ( [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedAlways
&& [CLLocationManager authorizationStatus] != kCLAuthorizationStatusAuthorizedWhenInUse) {
[self alertMessage:@"請求打開定位權限\n應用需要定位權限以提供地圖服務" cancelTitle:@"放棄" confirmTitle:@"設置" confirmBlock:^{
NSURL * url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
};
}];
}
后測試發(fā)現只有iOS10至iOS12系統(tǒng)中出現了這個問題,iOS13沒有問題混埠,
解決辦法!
因為我是在首頁使用了百度地圖的獲取定位方法怠缸,所以沒有觸發(fā)iOS系統(tǒng)自身的定位系統(tǒng),所以需要觸發(fā)iOS自身的CLLocationManager,當iOS系統(tǒng)的定位權限被觸發(fā)后钳宪,再次使用UIApplicationOpenSettingsURLString跳轉揭北,應用內就會出現定位選項
tips
iOS10 之前是跳轉不到設置頁面詳情頁的
網上所說的Prefer URL_TYPE方式會被當做私有方法拒絕上架
更新分割線-2021年11月2日, 跳轉之前先check請求
func checkCameraPermission(for mediaType: AVMediaType, callback: @escaping (Bool) -> Void) {
let status = AVCaptureDevice.authorizationStatus(for: mediaType)
switch status {
case .notDetermined:
AVCaptureDevice.requestAccess(for: mediaType) { granted in
DispatchQueue.main.async {
callback(granted)
}
}
case .authorized:
callback(true)
case .restricted, .denied:
callback(false)
@unknown default:
callback(false)
}
}