如何从iOS应用程序iOS 11testing版打开位置服务?
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(testing版),应用程序进入后台,但设置页面不会打开。
在Info.plist
添加URLscheme,转到
项目 – >目标 – >信息 – > URLtypes – >添加
在URL Schemes
下input首选项 。
然后使用代码:
NSURL *URL = [NSURL URLWithString:@"App-Prefs:root=Privacy&path=LOCATION"]; [[UIApplication sharedApplication] openURL:URL options:@{} completionHandler:nil];
它为我工作Xcode 9testing版4(iOS 11testing版)。
希望能帮助到你!
您应该检查iOS是否可以打开您尝试拨打的url。 你可以用if([UIApplication sharedApplication] canOpenURL:URL]]){...}
来做到这一点。 如果iOS 11不能这样做,则应该添加一个else
语句来检查iOS 11并devise一个新的解决scheme。
应用程序进入后台,但设置页面不会打开。
这是Settings.app的崩溃。 从iOS 11 Beta 7开始,崩溃已经修复。 但它仍然不能打开具体的path,如@“App-Prefs:root = Privacy&path = LOCATION”。
我试图深入到Settings.app的解码代码(其实是Preferences.app)。 似乎仍然使用上面我们尝试使用的scheme,因为我在解编码中find了相同forms的schemestring。
而且可能会在SpringBoard中添加一些权限控制来pipe理哪些进程可以正确打开设置中的特定path。
无论如何,现在在iOS 11我只能使用
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
打开设置。
所有的线索都指向了一个iOS bug或者开发者没有得到通知的改变。 它是beta 10,这仍然不起作用。 最好猜一下,向苹果提交一个错误报告。