从另一个应用程序打开设置应用程序

好的,我知道这个问题有很多,但是他们都是很久以前的事了。

所以。 我知道这是可能的,因为地图应用程序。

在地图应用程序,如果我closures这个应用程序的本地化,它给我一个消息,如果我按好,“设置应用程序”将打开。 而我的问题是,这怎么可能? 如何从我自己的应用程序打开“设置应用程序”?

基本上我需要做同样的事情,如果用户closures我的应用程序的位置,然后我会告诉他一个消息说,将打开“设置应用程序”

我真的很感激你的答案,我的意思是。

正如Karan Dua所提到的, 现在iOS8中可以使用UIApplicationOpenSettingsURLString查看Apple的文档 。

例:

在Swift 3:

 UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!) 

在Swift 2中:

 UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!) 

在Objective-C中

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

在iOS 8之前:

你不能。 正如你所说,这已经被覆盖了很多次,popup要求你打开位置服务是由苹果提供,而不是由应用程序本身。 这就是为什么它能够打开设置应用程序。

以下是一些相关的问题和文章:

是否可以使用openURL打开设置应用程序?

以编程方式打开设置应用程序(iPhone)

如何在用户按下button时打开“设置”应用程序?

iPhone:从应用程序打开应用程序首选项面板

点击应用程序首选项中的条目打开UIPickerView – 如何?

打开设置应用程序?

iOS:你正在做设置错误

来自@Yatheeshaless的回答 :

您可以在iOS8中以编程方式打开设置应用程序,但不能在早期版本的iOS中打开。

在Swift中:

  UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!) 

在Objective-C中

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

是!! 您可以启动“设备设置”屏幕,我已经在iOS 9.2上进行了testing

第1步,我们需要添加URLscheme

转到项目设置 – >信息 – > URLtypes – >添加新的URLscheme

在这里输入图像描述

第2步。以编程方式启动设置感谢@davidcann

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]]; 

此外,我们还可以通过使用专有名称启动音乐,位置等子屏幕

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

看到这里由亨利Normak共享的全名列表


更新:

根据评论,每个人都想知道在我的申请提交状态发生这种变化后会发生什么?

所以YES!! I got successful update submission and application is available on store without any complain. YES!! I got successful update submission and application is available on store without any complain.

只是确认,我刚刚下载今天早上,并禁用位置服务,然后启动应用程序,它要求我的位置权限,然后我的警报popup窗口在那里给我发送设置 – >位置服务页面 – >启用 – >而已!!

您可以在iOS 5.0及更高版本上使用此function:这不再有效。

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]]; 

iOS 10更新

苹果改变了在主线程上打开asynchronous的方法。 但是,从现在开始,只能在本机设置中打开应用程序设置。

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

iOS 9更新

现在可以直接进入子设置菜单。 但是,必须创build一个URLscheme。 可以用两种方法来完成:

  1. XCode – 你可以在Target,Info,URL Scheme中find它。 然后,只需input首选项。
  2. 直接添加到* -Info.plist。 添加以下内容: <key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>

那么代码:

迅速

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)

Objective-C的

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];

在Swift 3 / iOS 10+中,现在看起来像

 if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") { UIApplication.shared.open(url, completionHandler: .none) } 

在Swift 3中,我需要的是这个(这里例如redirect到我的应用程序通知):

 if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") { if #available(iOS 10.0, *) { UIApplication.shared.open(url, completionHandler: .none) } else { // Fallback on earlier versions } } 

来源: phynet gist 。

只有当设置在后台,这才和我一起工作。 它会将您redirect到您的应用程序通知设置,但是如果设置未在后台运行,则只会将您redirect到通知设置。

UIApplicationOpenSettingsURLString这只会在你以前允许任何权限时才起作用。 例如位置,照片,联系人,推送通知访问。 所以,如果你没有这样的用户的权限:

如果iOS 10或以上

它会打开设置,但然后崩溃。 原因是,你的应用程序没有任何设置。

以下代码将在iOS设置中打开您的应用程序设置。

 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url]; } 

由于设备不可用,我无法在iOS上检查这个<10。

此外,我可以从一些要点find下面的代码,它也适用于iOS 10。 但是我不确定这是否会被苹果审查小组批准。

https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f

Swift 3:

 guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return} if #available(iOS 10.0, *) { UIApplication.shared.open(url, options: [:], completionHandler: nil) } else { // Fallback on earlier versions UIApplication.shared.openURL(url) } 

你可以使用下面的代码。

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

Swift您可以使用以下function通过蓝牙页面打开设置应用程序

 func openSettingsApp(){ if let settings = NSURL(string: "prefs:root=Bluetooth") { UIApplication.sharedApplication().openURL(settings) } } 

再次,这将不会打开应用程序的设置。 这将打开与蓝牙的设置应用程序,因为这是深入链接到蓝牙。

testing与iOS 10.工作

 NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"]; for(NSString* urlString in urlStrings){ NSURL* url = [NSURL URLWithString:urlString]; if([[UIApplication sharedApplication] canOpenURL:url]){ [[UIApplication sharedApplication] openURL:url]; break; } } 

快乐编码:)

添加到你的class级,

  public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){ YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: { if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){ UIApplication.sharedApplication().openURL(settingsURL) } }, onButton2Click: { onCancel?() }) } public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){ dispatch_async(dispatch_get_main_queue()) { let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert) alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in onButton1Click?() })) alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in onButton2Click?() })) viewController.presentViewController(alert, animated: true, completion: nil) } } 

像这样打电话,

 YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: { print("canceled") })