iOS 跳转系统设置不显示定位或者相册

在iOS开发过程中,有时会遇到需要跳转到系统设置页面,让用户来打开权限的需求,今天说一下我在打开系统设置页面中遇到的问题

在我使用下面代码跳转设置页面打开定位信息时,跳转到的设置页面没有定位选项

image.png
    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];
            };
        }];

    }

后测试发现只有iOS10至iOS12系统中出现了这个问题,iOS13没有问题,

解决办法!

因为我是在首页使用了百度地图的获取定位方法,所以没有触发iOS系统自身的定位系统,所以需要触发iOS自身的CLLocationManager,当iOS系统的定位权限被触发后,再次使用UIApplicationOpenSettingsURLString跳转,应用内就会出现定位选项

1351600137187_.pic_hd.jpg

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)
        }
    }

你可能感兴趣的:(iOS 跳转系统设置不显示定位或者相册)