2017-08-07 168 views
3
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 10.0) 
{ 
    NSURL *URL = [NSURL URLWithString:@"App-prefs:root=Privacy&path=LOCATION"]; 
    [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];   
} 

此代碼適用於iOS 10.0至10.3.3 ,但是當我運行iOS 11(beta)的此代碼時,應用程序進入後臺,但設置頁面未打開。如何從iOS應用iOS 11測試版打開位置服務?

+0

「應用程序進入後臺」您的意思是應用程序崩潰? –

+0

查看我的回答 –

+0

應用程序沒有崩潰,我檢查了你的答案。請發現評論 –

回答

0

您應該檢查iOS是否可以打開您嘗試呼叫的URL。你可以用if([UIApplication sharedApplication] canOpenURL:URL]]){...}來做到這一點。如果iOS 11不能這樣做,則應該添加else語句來檢查iOS 11並設計新的解決方案。

+0

這意味着你的URL不會在iOS 11中工作,所以你將不得不尋找另一種方式。在另一個SO問題中,我發現你可以用'[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];'打開Settings應用程序。 [鏈接](https://stackoverflow.com/questions/5655674/opening-the-settings-app-from-another-app) – jbehrens94

+0

NSURL * URL = [NSURL URLWithString:@「App-Prefs:root = Privacy&path = LOCATION 「];如果([[UIApplication sharedApplication] canOpenURL:URL]){NSLog(@「can open」); }其他{NSLog(@「無法打開」); }返回「可以打開」。靜態應用程序不會導航到設置。 –

+0

你不明白我在說什麼:你需要用另一個解決方案替換'[NSURL URLWithString:@「App-Prefs:root = Privacy&path = LOCATION」],因爲顯然它不再工作。正確的NSURL是,我不知道,你將不得不逆向工程。 – jbehrens94

1

添加URL方案在Info.plist,通過將

項目 - > Targets->信息 - > URL類型 - >添加

輸入首選項URL Schemes下。

enter image description here

然後使用代碼:

 NSURL *URL = [NSURL URLWithString:@"App-Prefs:root=Privacy&path=LOCATION"]; 
     [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil]; 

它爲我的Xcode 9測試4(的iOS 11測試版)。
希望它有幫助!

+0

我已經在URL Schemes下添加了「prefs」。它在低於10OS 10.3.3的條件下正常工作。 您建議的代碼是: NSURL * URL = [NSURL URLWithString:@「App-Prefs:root = Privacy&path = LOCATION」]; [[UIApplication sharedApplication] openURL:URL選項:@ {} completionHandler:nil]; 我剛剛檢查,上面的解決方案給我同樣的問題。 應用程序進入背景狀態和iPhone的主屏幕。 –

+0

這對我最後的iOS 11工作。 – Todd

1

應用程序進入後臺,但設置頁面未打開。

這是Settings.app的崩潰。從iOS 11 Beta 7開始,崩潰已經修復。但它仍然無法打開具體路徑,如@「App-Prefs:root = Privacy & path = LOCATION」。

我想深入研究Settings.app的解碼代碼(其實就是Preferences.app)。似乎它仍然使用我們嘗試使用的上述方案,因爲我在解編碼中找到了相同形式的方案字符串。

而且它可能會添加一些SpringBoard中的權限控制來管理哪個進程可以正確打開設置中的特定路徑。

不管怎麼說,現在iOS中11我只能用

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

打開設置。

+0

希望它會在iOS 11穩定。 –

+0

@ShrikantPhadke它可能不會。根據Launcher開發者的應用程序開發人員的博客(https://cromulentlabs.wordpress.com/2017/08/22/on-upcoming-changes-in-ios-11/),Apple有意禁用第三方的這項「私人」功能開發人員。 – phoenixxyang

0

所有線索都指向了iOS開發人員尚未通知的錯誤或更改。它是beta 10,這仍然不起作用。最好猜一下,向蘋果提交一個錯誤報告。

相關問題