跳转到设置界面的很好的简书的文章
此文章为转载,原文地址: https://www.jianshu.com/p/b44f309feca0
首先,跳转到系统设置界面的跳转函数主要有两个:
iOS10之前我们可以使用
[[UIApplication sharedApplication]openURL:url];
在iOS10之后苹果推荐我们使用
[[UIApplication sharedApplication]openURL:urloptions:@{}completionHandler:^(BOOLsuccess) {}];
示例代码:
if([[UIApplicationsharedApplication] canOpenURL:url]) { [[UIApplicationsharedApplication] openURL:url];}或if([[UIApplicationsharedApplication] canOpenURL:url]) { [[UIApplicationsharedApplication] openURL:url options:@{} completionHandler:^(BOOLsuccess) { }];}
说完如何跳转再来说一下url如何设置:
对于跳转的url,不同系统版本的设置方式也是不同的,主要分为三个阶段:
iOS7.0及以前
iOS8.0和iOS9.0
iOS10.0及以后
⚠️:2018.6.1更新:苹果已经禁用prefs:root=跳转方式,不要再用了!不要再用了!不要再用了!
prefs:root=在苹果审核中已经被列为私有API,所以在接下来的文章中有关使用prefs:root=跳转的仅作为了解
iOS7.0及以前
iOS7.0及以前,我们只能跳转到系统的设置页,并且可以跳转到指定的设置项页面(比如系统的“通知”设置页、系统的“WIFI”设置页),但是无法跳转到具体应用的设置页。
比如我们希望跳转到系统的“通知”设置页
我们的url就应该设置成
NSURL* url = [NSURLURLWithString:@"prefs:root=NOTIFICATIONS_ID"];
并且我们需要在URL Types添加 一个叫prefs的URL Schemes,如图:
除了跳转到系统的“通知”设置页,其他的页面跳转url列在下面👇:
prefs:root=General&path=Aboutprefs:root=General&path=ACCESSIBILITYprefs:root=AIRPLANE_MODEprefs:root=General&path=AUTOLOCKprefs:root=General&path=USAGE/CELLULAR_USAGEprefs:root=Brightnessprefs:root=General&path=Bluetoothprefs:root=General&path=DATE_AND_TIMEprefs:root=FACETIMEprefs:root=Generalprefs:root=General&path=Keyboardprefs:root=CASTLEprefs:root=CASTLE&path=STORAGE_AND_BACKUPprefs:root=General&path=INTERNATIONALprefs:root=LOCATION_SERVICESprefs:root=ACCOUNT_SETTINGSprefs:root=MUSICprefs:root=MUSIC&path=EQprefs:root=MUSIC&path=VolumeLimitprefs:root=General&path=Networkprefs:root=NIKE_PLUS_IPODprefs:root=NOTESprefs:root=NOTIFICATIONS_IDprefs:root=Phoneprefs:root=Photosprefs:root=General&path=ManagedConfigurationListprefs:root=General&path=Resetprefs:root=Sounds&path=Ringtoneprefs:root=Safariprefs:root=General&path=Assistantprefs:root=Soundsprefs:root=General&path=SOFTWARE_UPDATE_LINKprefs:root=STOREprefs:root=TWITTERprefs:root=General&path=USAGEprefs:root=VIDEOprefs:root=General&path=Network/VPNprefs:root=Wallpaperprefs:root=WIFIprefs:root=INTERNET_TETHERING
iOS8.0 和 iOS9.0
在iOS8.0到iOS9.0的阶段,除了支持上面提到的跳转“系统设置”的路径跳转方式,又新增了一种通过设置bundleID跳转到具体应用的设置方式:
url设置如下
NSURL* url = [NSURLURLWithString:@"prefs:root=你的bundleID"];// 如果在iOS7.0及以前使用,只跳转到系统的设置页,并不会跳转到具体应用的设置页
或者,用iOS8.0开始提供的一种简便方式
NSURL* url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];// UIApplicationOpenSettingsURLString是从iOS8.0开始提供的
iOS10.0及以后
iOS10.0以后只支持UIApplicationOpenSettingsURLString这种方式了,并且不支持跳转到系统的设置页了。
NSURL* url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];
prefs:root=bundleID和prefs:root=服务都不再支持,调用不会有任何反应!
完整的示例代码:
//废弃 /* iOS7/8/9使用prefs:root=的时候不要忘记在URL type中添加一个prefs值 *///废弃 CGFloat systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];//废弃 if (systemVersion < 8.0) { // iOS7.0及以前//废弃 NSURL * url = [NSURL URLWithString:@"prefs:root=NOTIFICATIONS_ID"];//废弃 if ([[UIApplication sharedApplication] canOpenURL:url]) {//废弃 [[UIApplication sharedApplication] openURL:url];//废弃 }//废弃 }elseif(systemVersion >=8.0&& systemVersion <10.0) {// iOS8.0 和 iOS9.0//废弃 NSURL * url = [NSURL URLWithString:@"prefs:root=NOTIFICATIONS_ID"];或NSURL* url = [NSURLURLWithString:@"prefs:root=com.app.app"]; 或NSURL* url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];if([[UIApplicationsharedApplication] canOpenURL:url]) { [[UIApplicationsharedApplication] openURL:url]; } }elseif(systemVersion >=10.0) {// iOS10.0及以后NSURL* url = [NSURLURLWithString:UIApplicationOpenSettingsURLString];if([[UIApplicationsharedApplication] canOpenURL:url]) {if(@available(iOS10.0, *)) { [[UIApplicationsharedApplication] openURL:url options:@{} completionHandler:^(BOOLsuccess) { }]; } }}