最近在寫一個widget的小項目。功能是在通知欄上快速設置一些系統設置,比如wifi,藍牙,低電量模式。不過就遇到了下面咱們要討論的問題。如何跳轉?那么網上有很多資料。不過90%都是一樣的,另外10%又是一模一樣的。想找個東西太難。所以我要在這里面整理一下,這就是我寫這篇文章的意義。
跳轉方式一覽
目標 | URL |
---|---|
電池電量 | Prefs:root=BATTERY_USAGE |
VPN | Prefs:root=General&path=VPN (網上有很多寫的是prefs:root=General&path=Network/VPN,就用我寫的那個,親測可用) |
個人熱點 | Prefs:root=INTERNET_TETHERING |
飛行模式 | Prefs:root=AIRPLANE_MODE |
鎖定 | Prefs:root=General&path=AUTOLOCK |
亮度 | prefs:root=Brightness |
時間設置 | Prefs:root=General&path=DATE_AND_TIME |
iCloud | Prefs:root=CASTLE |
iCloud備份 | Prefs:root=CASTLE&path=STORAGE_AND_BACKUP |
通用設置 | Prefs:root=General |
存儲空間 | Prefs:root=General&path=STORAGE_ICLOUD_USAGE/DEVICE_STORAGE |
蜂窩數據 | Prefs:root=MOBILE_DATA_SETTINGS_ID |
Wi-Fi 設置 | Prefs:root=WIFI |
藍牙設置 | Prefs:root=Bluetooth |
定位設置 | Prefs:root=Privacy&path=LOCATION |
輔助功能 | Prefs:root=General&path=ACCESSIBILITY |
關于手機 | Prefs:root=General&path=About |
鍵盤設置 | Prefs:root=General&path=Keyboard |
顯示設置 | Prefs:root=DISPLAY |
語言設置 | prefs:root=General&path=INTERNATIONAL |
聲音設置 | Prefs:root=Sounds |
App Store 設置 | Prefs:root=STORE |
墻紙設置 | Prefs:root=Wallpaper |
music | prefs:root=MUSIC |
Nike + iPod | prefs:root=NIKE_PLUS_IPOD |
Notes | prefs:root=NOTES |
Safari | prefs:root=Safari |
Siri | prefs:root=General&path=Assistant |
系統更新 | prefs:root=General&path=SOFTWARE_UPDATE_LINK |
打開電話 | Mobilephone:// |
世界時鐘 | Clock-worldclock:// |
鬧鐘 | Clock-alarm:// |
秒表 | Clock-stopwatch:// |
倒計時 | Clock-timer:// |
打開相冊 | Photos:// |
FaceTime | Prefs:root=FACETIME |
使用方式
在程序中,iOS 9 8 7 可以用以下方式來打開設置。
NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url]; // iOS 9 的跳轉
}
當然也可以這樣(iOS10 9 8 7 可以用這種方式)(這方法雖然iOS 10也可以用但是并不能去到藍牙、WIFI、電池,只能去到自身應用的系統設置。)
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
下面的方法是iOS10 新增的api
NSURL *url = [NSURL URLWithString:@"prefs:root=WIFI"];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
如果你是通知欄應用(如pin,Launcher)在iOS 10通知欄Widget可以像iOS 9正常跳轉,Pin、Launcher,都可以通過簡單地設置 URL Scheme 實現此功能,你可以繼續在通知中心直接跳轉至系統設置的特定頁面,比如蜂窩數據、WiFi、定位等等。只需將原來的 prefs 開頭改成 Prefs 即可。
需要注意的是,這個功能只在通知中心的 Today Widget(即插件)有效,在應用中則無法直接跳轉設置。
(如果你的是通知欄類應用可以用此辦法解決,iOS 10 可用)
NSURL*url=[NSURL URLWithString:@"Prefs:root=WIFI"];
[self.extensionContext openURL:url completionHandler:^(BOOL success) {
}];