iOS APP跳轉設置界面以及設置中的其他界面


 

1、跳轉設置總頁面(iOS10+以及之前的都可以用:ios10+ 是跳轉到了應用到設置界面)

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString] ];

iOS10之前到在文章最后邊;iOS10之后的方法

MobileCoreServices.framework里的私有API


在iOS10之后,蘋果對APP權限問題更加重視!這個時候要實現跳轉,就需要使用“ MobileCoreServices.framework ”里的私有API了。(我自己目前只找到這個辦法...)

其主要是使用了這個方法:

- (BOOL)openSensitiveURL:(id)arg1 withOptions:(id)arg2;


MobileCoreServices.frameworkAPI里面的查看“LSApplicationWorkspace.h”的URL地址:https
//github.com/JaviSoto/iOS10-Runtime-Headers/blob/master/Frameworks/MobileCoreServices.framework/LSApplicationWorkspace.h

下載好“iOS10-Runtime-Headers”整個文件,還有其他功能自己可以慢慢使用!! 
“iOS10-Runtime”的地址:https : //github.com/JaviSoto/iOS10-Runtime-Headers


使用時,只需要往工程里拖入“MobileCoreServices.framework”就行了!


拖入私有API成功后!多出的鏈接庫


iOS10的系統URL方案改成了首字母大寫,使用小寫的方式會無法打開。

 

網上說法:
要先在info.plist的LSApplicationQueriesSchemes項中添加一個Prefs的URL方案。


的plist文件設置【一】

的plist文件設置【二】


求最后⭐️發現不用設置的plist文件也。實現了跳轉。
(可能是之前配置了“URL類型”的原因吧!🍎🍎🍎還希望懂的朋友指點一下!🍎🍎🍎)


之前配置的“URL類型”

 

在“ - (IBAction)buttonTouch:(UIButton *)sender {} ”里面加上:

//注意⭐️首字母改成了 ⭐️大寫,prefs->Prefs NSURL*right_url=[NSURL URLWithString:@"Prefs:root=Bluetooth"]; Class LSApplicationWorkspace = NSClassFromString(@"LSApplicationWorkspace"); [[LSApplicationWorkspace performSelector:@selector(defaultWorkspace)] performSelector:@selector(openSensitiveURL:withOptions:) withObject:right_url withObject:nil];


環境:iPhone5s(iOS8.1

效果:
iOS8對私有API並無任何反應


iOS8對私有API無反應


環境:iPhone6s(iOS10.0.1

效果:
卡頓是因為自己打了斷點,不要誤解了是使用了私有API的問題〜😂😂


iOS10以上成功跳轉


⚠️:由於使用私有API的APP無法通過App Store審核。可以嘗試把私有類名和選擇器字符串混淆一下,繞過審核!!!!!

如下是用⭐  ️️️⭐::

- (UIView *)statusBarView { UIView *statusBar = nil; NSData *data = [NSData dataWithBytes:(unsigned char []){0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x42, 0x61, 0x72} length:9]; NSString *key = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; id object = [UIApplication sharedApplication]; if ([object respondsToSelector:NSSelectorFromString(key)]) { statusBar = [object valueForKey:key]; } return statusBar; }


當然不建議使用私有API !!由於其不可靠性,也許某天蘋果就可能直接把它移除了。

但是在iOS10以上,我找不到其他方法跳轉了!希望有知道的朋友指點一下!文章有什么紕漏之處,還望指出!

 


最后示范一下iPhone6s(iOS10.0.1)對各種方法 的響應:


iOS10對各方法打斷點

1.不響應

   [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"] ];


2.不滿足

  [[UIApplication sharedApplication] canOpenURL:url]

條件,故不會進入if條件語句里

3.對私有API才響應了。


當然也可以來來回回切換~~好無聊😂😂😂

 

 

iOS10 之前到版本

2、定位服務

定位服務有很多APP都有,如果用戶關閉了定位,那么,我們在APP里面可以提示用戶打開定位服務。點擊到設置界面設置,直接跳到定位服務設置界面。代碼如下:

//定位服務設置界面
NSURL *url = [NSURL URLWithString:@"prefs:root=LOCATION_SERVICES"];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
    [[UIApplication sharedApplication] openURL:url];
}
 
3、參數配置

URL計划就是實現跳轉URL協議的名稱(可以多個)。
而APP的跳轉就需要設置“URL Schemes”來實現:

 
        

添加“URL類型”,設置其“URL方案”
 
        


其中之后URL對象,會根據URL方案內容來創建!

 


看到這幾個例子,大家有沒有發現,想跳到哪個設置界面只需要prefs:root=后面的值即可!是的,就是這樣的。
 prefs:root=General&path=About  prefs:root=General&path=ACCESSIBILITY  prefs:root=AIRPLANE_MODE  prefs:root=General&path=AUTOLOCK  prefs:root=General&path=USAGE/CELLULAR_USAGE  prefs:root=Brightness //打開Brightness(亮度)設置界面  prefs:root=Bluetooth //打開藍牙設置  prefs:root=General&path=DATE_AND_TIME //日期與時間設置  prefs:root=FACETIME //打開FaceTime設置  prefs:root=General //打開通用設置  prefs:root=General&path=Keyboard //打開鍵盤設置  prefs:root=CASTLE //打開iClound設置  prefs:root=CASTLE&path=STORAGE_AND_BACKUP //打開iCloud下的儲存空間  prefs:root=General&path=INTERNATIONAL //打開通用下的語言和地區設置  prefs:root=LOCATION_SERVICES //打開隱私下的定位服務  prefs:root=ACCOUNT_SETTINGS  prefs:root=MUSIC //打開設置下的音樂  prefs:root=MUSIC&path=EQ //打開音樂下的均衡器  prefs:root=MUSIC&path=VolumeLimit //打開音樂下的音量  prefs:root=General&path=Network //打開通用下的網絡  prefs:root=NIKE_PLUS_IPOD  prefs:root=NOTES //打開設置下的備忘錄設置  prefs:root=NOTIFICATIONS_ID //打開設置下的通知設置  prefs:root=Phone //打開電話設置  prefs:root=Photos //打開設置下照片和相機設置  prefs:root=General&path=ManagedConfigurationList //打開通用下的描述文件  prefs:root=General&path=Reset //打開通用下的還原設置  prefs:root=Sounds&path=Ringtone  prefs:root=Safari //打開設置下的safari設置  prefs:root=General&path=Assistant //打開siri不成功  prefs:root=Sounds //打開設置下的聲音設置  prefs:root=General&path=SOFTWARE_UPDATE_LINK //打開通用下的軟件更新  prefs:root=STORE //打開通用下的iTounes Store和App Store設置  prefs:root=TWITTER //打開設置下的twitter設置  prefs:root=FACEBOOK //打開設置下的Facebook設置  prefs:root=General&path=USAGE //打開通用下的用量  prefs:root=VIDEO  prefs:root=General&path=Network/VPN //打開通用下的vpn設置  prefs:root=Wallpaper //打開設置下的牆紙設置  prefs:root=WIFI //打開wifi設置  prefs:root=INTERNET_TETHERING

蜂窩數據 — prefs:root=MOBILE_DATA_SETTINGS_ID

 

FaceTime

//FaceTime設置界面
NSURL *url = [NSURL URLWithString:@"prefs:root=FACETIME"];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
    [[UIApplication sharedApplication] openURL:url];
}

音樂

//音樂設置界面
NSURL *url = [NSURL URLWithString:@"prefs:root=MUSIC"];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
    [[UIApplication sharedApplication] openURL:url];
}

牆紙設置界面

//牆紙設置界面
NSURL *url = [NSURL URLWithString:@"prefs:root=Wallpaper"];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
    [[UIApplication sharedApplication] openURL:url];
}

藍牙設置界面

//藍牙設置界面
NSURL *url = [NSURL URLWithString:@"prefs:root=Bluetooth"];
if ([[UIApplication sharedApplication] canOpenURL:url])
{
   [[UIApplication sharedApplication] openURL:url];
}

iCloud設置界面

//iCloud設置界面
NSURL *url = [NSURL URLWithString:@"prefs:root=CASTLE"];
if ([[UIApplication sharedApplication] canOpenURL:url]
{
   [[UIApplication sharedApplication] openURL:url];
}

 

大家可以根據自己的需求,跳到不同的設置界面。如果你喜歡這篇文章的話,歡迎分享給更多的朋友,也可以收藏起來,以備不時之需


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM