美文网首页IOSbugiOS网络技术iOS技术帖
iOS 应用内跳转到系统设置

iOS 应用内跳转到系统设置

作者: 一只长毛猫 | 来源:发表于2016-09-10 17:20 被阅读6922次

    设置跳转有三种方式,每一种的使用场景都不同。 并且你在写Demo测试跳转到系统中自己应用下面设置的时候,你的应用要提前至少申请了某一个权限,如(通知,定位等)。否则,会引起崩溃。

    方式一:prefs:root=某项服务

    方式二:prefs:root=bundleID

    方式三: UIApplicationOpenSettingsURLString 

    本篇针对iOS7、iOS8、iOS9、iOS10,来介绍其中区别。

    一、跳转方法 

    iOS系统版本 < 10.0 

    if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

        [[UIApplicationsharedApplication]openURL:url];

    }

    iOS系统版本 >=  10.0

    if( [[UIApplicationsharedApplication]canOpenURL:url] ) {

         [[UIApplicationsharedApplication]openURL:url options:@{}completionHandler:^(BOOL        success) {

         }];

    }

    可以看出,跳转方法非常简单。本文重点讲解url 怎么设置

    二、跳转到哪里去?(系统的设置,系统中自己应用下面的设置)

     version <= iOS7 ,  只能跳转到 系统设置页面

    NSURL *url= [NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];

    跳转到:  隐私-定位服务。 

    方式一:prefs:root=某项服务

    蜂窝网路:prefs:root=MOBILE_DATA_SETTINGS_ID

    Wi-Fi: prefs:root=WIFI

    音乐:prefs:root=MUSIC

    这种跳转方式,都是跳转到系统的设置界面。

    version >= iOS8,支持跳转到自己应用设置

    方式二 : prefs:root=bundleID ,bundleID是你工程的唯一ID

    局限性:只支持iOS8,iOS9系统,在iOS10系统上,不会跳转。 在iOS7系统上,仅仅只是跳转到设置应用,不推荐使用。

    方式三:

    NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

    UIApplicationOpenSettingsURLString字段,是在iOS8上才提供的,支持iOS8,iOS9,iOS10系统,推荐使用。

    version >= iOS10,支持跳转到自己应用设置,不支持跳转到系统设置

    只认 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; 跳转。

    而 prefs:root=bundleID 和 prefs:root=服务 都将不起作用。

    总结一下: 

    方式一:prefs:root=某项服务        适用于 小于 iOS10的系统;

    方式二:prefs:root=bundleID       适用于 大于等于iOS8系统,小于iOS10的系统

    方式三,UIApplicationOpenSettingsURLString    适用于 大于等于iOS8的系统

    相关文章

      网友评论

      • 红袖吾狗:我有点不明白。UIApplicationOpenSettingsURLString 这个key应该是说跳到当前应用的设置界面,为什么不像作者那样注册通知就跳转失败呢。难道是说这个跳转必须有实际意义?比如说跳过去可以修改通知,声音,字体大小等等。否则就会失败?
        云逸枫林:@Cranz 我试了一下, 如果什么权限都没申请就跳转 就会闪一下设置界面然后回到桌面. 如果申请了某个权限 再次跳转就可以跳转到当前应用的设置界面了(我试验的是申请位置权限)
      • BBBBean:没有跳转到允许相机访问啊
      • 一粒榛子:层主,你好,我现在要支持 ios8,9,10,是不是 ios10不能跳转到 wifi,蓝牙,亮度,声音去啊
      • 一只长毛猫:您好,openURL:options:completionHandler: 经过我严格的测试,并且成功的调用。 苹果只是规定options不能为nil, 但是可以为空。 Options are specified in the section below for openURL options. An empty options dictionary will result in the same behavior as the older openURL call,aside from the fact that this is asynchronous and calls the completion handler rather than returning a result. 如果你的options是空的,那么就和你调用老的openURL方法是一样的, 唯一的区别是新的方法是异步调用,并且执行一个代码块,而老的方法是同步的,并且直接返回一个BOOL值。
        Lol刀妹:@夜下独灯明 你这个英文是看的官方文档么
        Lol刀妹:@夜下独灯明 options为空APP崩溃,iOS9下。
        一只长毛猫:@Jimmy001 第一步: 新建一个工程,在viewDidLoad里 申请通知权限
        if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 8) {
        UIUserNotificationSettings *notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
        }
        else {
        [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
        }
        第二步:在viewDidLoad里新建一个按钮,关联btnClicked方法
        第三部:在方法中写跳转代码
        -(void)btnClicked
        {
        NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
        if([[UIApplication sharedApplication]canOpenURL:url]){
        [[UIApplication sharedApplication]openURL:url options:@{} completionHandler:^(BOOL success) {

        }];
        }
        }

        测试环境 iOS10 + Xcode8.0
      • L_Glenn:iOS10 里面的openURL方法已经启用,改成,openURL:options:completionHandler:  ,而且写明了,options字典不能为空!估计楼主也没解决,就放上去了,建议,都自己测一下。
        ef094a8ffec9:key用这个UIApplicationOpenURLOptionsSourceApplicationKey
      • 佛克斯:iOS不能跳到wifi设置界面了吗?只能跳到APP的设置里面去了?
        佛克斯:@夜下独灯明 是失效了,貌似iOS10不支持跳转到系统设置了
        一只长毛猫:@佛克斯 iOS10上,下面的方法跳转失效。
        NSURL *url= [NSURL URLWithString:@"prefs:root=WIFI"];
        if([[UIApplication sharedApplication]canOpenURL:url]){

        [[UIApplication sharedApplication]openURL:url options:@{} completionHandler:^(BOOL success) {

        }];

        }
      • d513dc76ce95:请教一下..iOS10中 [[UIApplicationsharedApplication]openURL:url options:@{}completionHandler:^(BOOL success) {

        }];
        第二个参数 options 是干什么的啊? 字典里都可以写一些什么啊?

      本文标题:iOS 应用内跳转到系统设置

      本文链接:https://www.haomeiwen.com/subject/vqiyettx.html