如何从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,这仍然不起作用。 最好猜一下,向苹果提交一个错误报告。