从另一个应用程序打开设置应用程序
好的,我知道这个问题有很多,但是他们都是很久以前的事了。
所以。 我知道这是可能的,因为地图应用程序。
在地图应用程序,如果我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。 可以用两种方法来完成:
- XCode – 你可以在Target,Info,URL Scheme中find它。 然后,只需input首选项。
- 直接添加到* -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") })