我需要在我的应用内以编程方式打开设置。我搜遍了SO,但到处都有人说这是不可能的。但是今天我看到它在Facebook应用程序中实现了。 UIAlertView
上有一个按钮,当您点击它时,您可以打开“设置”。所以确实可以打开设置,我亲眼目睹了这一点。但是怎么做呢?有谁知道Facebook如何做到这一点?
答案 0 :(得分:137)
在iOS 8上,您可以通过编程方式打开设置!
以下是代码:
- (void)openSettings
{
BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
if (canOpenSettings) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}
如果您的应用拥有自己的设置套装,则会打开设置,显示您应用的设置。如果您的应用没有设置包,则会显示主设置页面。
答案 1 :(得分:53)
您不能,没有API调用来执行此操作。
只有系统对话框,来自Apple Frameworks的对话框才能打开设置应用程序。 在iOS 5中有一个应用程序URL方案来打开系统对话框,但Apple稍后将其删除。
随着iOS 8的推出,您可以在应用页面上打开设置对话框。
if (&UIApplicationOpenSettingsURLString != NULL) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
else {
// Present some dialog telling the user to open the settings app.
}
答案 2 :(得分:32)
在iOS 8上,您可以通过编程方式打开设置!
以下是“设置”应用中当前已知网址的列表:
- (void) openSettings
{
if (&UIApplicationOpenSettingsURLString != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}
- 首选项:根=通用及安培;路径=关于
- 首选项:根=通用及安培;路径= ACCESSIBILITY
- 首选项:根= AIRPLANE_MODE
- 首选项:根=通用及安培;路径= AUTOLOCK
- 首选项:根=通用及安培;路径= USAGE / CELLULAR_USAGE
- 首选项:根=亮度
- 首选项:根=通用及安培;路径=蓝牙
- 首选项:根=通用及安培;路径= DATE_AND_TIME
- 首选项:根= FACETIME
- 首选项:根=通用
- 首选项:根=通用及安培;路径=键盘
- 首选项:根= CASTLE
- 首选项:根=城堡&安培;路径= STORAGE_AND_BACKUP
- 首选项:根=通用及安培;路径= INTERNATIONAL
- 首选项:根= LOCATION_SERVICES
- 首选项:根= ACCOUNT_SETTINGS
- 首选项:根= MUSIC
- 首选项:根=音乐与安培;路径= EQ
- 首选项:根=音乐与安培;路径= VolumeLimit
- 首选项:根=通用及安培;路径=网络
- 首选项:根= NIKE_PLUS_IPOD
- 首选项:根= NOTES
- 首选项:根= NOTIFICATIONS_ID
- 首选项:根=电话
- 首选项:根=照片
- 首选项:根=通用及安培;路径= ManagedConfigurationList
- 首选项:根=通用及安培;路径=重置
- 首选项:根=声音和安培;路径=铃声
- 首选项:根= Safari浏览器
- 首选项:根=通用及安培;路径=助理
- 首选项:根=声音
- 首选项:根=通用及安培;路径= SOFTWARE_UPDATE_LINK
- 首选项:根= STORE
- 首选项:根= TWITTER
- 首选项:根=通用及安培;路径= USAGE
- 首选项:根= VIDEO
- 首选项:根=通用及安培;路径=网络/ VPN
- 首选项:根=壁纸
- 首选项:根= WIFI
- 首选项:根= INTERNET_TETHERING
答案 3 :(得分:19)
Vito Ziv在Swift中的回答。
String a = "12?34567";
String[] split = a.split("\\?");
System.out.println(split[0]);
答案 4 :(得分:13)
当您在Info.plist文件中将UIRequiresPersistentWiFi设置为YES并且用户启动您的问题时,此问题所指的Facebook应用中的警报是标准警报,iOS显示没有网络连接的应用程序。
总结这里的讨论:
答案 5 :(得分:10)
关于prefs:root=
和Prefs:root
的备忘录。
是的,由于今天prefs:root=
的{{1}}和App-Prefs:root
URL方案,我们的应用被 Apple拒绝了。它们是私有API。
对于Swift 4,
只有UIApplication.openSettingsURLString是公开的API,可以打开“设置”。
答案 6 :(得分:7)
if (&UIApplicationOpenSettingsURLString != NULL)
iOS 8+中的始终为TRUE。所以你可以像这样编辑
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}
(适用于iOS 10的新openURL)
答案 7 :(得分:4)
如果您想要打开应用程序设置,则需要使用UIApplicationOpenSettingsURLString编写方法。
fileprivate func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
}
如果您需要打开其中一个设置,则需要使用此功能
fileprivate func openSettings() {
UIApplication.shared.open(URL(string:"App-Prefs:root=General")!)
}
答案 8 :(得分:3)
要在iOS 8 and later
中打开我们自己的应用程序的设置,请使用以下代码。
- (void) openSettings
{
if(&UIApplicationOpenSettingsURLString != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}
有关参考和详细说明,请按照
答案 9 :(得分:1)
if (&UIApplicationOpenSettingsURLString != NULL) {
UIAlertView_Blocks *alertView = [[UIAlertView_Blocks alloc] initWithTitle:NSLocalizedString(@"Camera Access Denied", nil)
message:NSLocalizedString(@"You must allow camera access in Settings", nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"Cancel", nil)
otherButtonTitles:NSLocalizedString(@"Open Settings", nil), nil];
[alertView showWithDissmissBlock:^(NSInteger buttonIndex) {
if (alertView.cancelButtonIndex != buttonIndex) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}];
}
else {
UIAlertView_Blocks *alertView = [[UIAlertView_Blocks alloc] initWithTitle:NSLocalizedString(@"Camera Access Denied", nil)
message:NSLocalizedString(@"You must allow camera access in Settings > Privacy > Camera", nil)
delegate:nil
cancelButtonTitle:NSLocalizedString(@"OK", nil)
otherButtonTitles:nil, nil];
[alertView showWithDissmissBlock:^(NSInteger buttonIndex) {
}];
}
答案 10 :(得分:1)
以下是使用UIAlertController和UIAlertAction的Swift 3示例。
func showSettingsPopup() {
let alertVC = UIAlertController(title: "Notifications disabled", message: "Please, turn on notifications if you want to receive a reminder messages.", preferredStyle: .alert)
let close = UIAlertAction(title: "Close", style: .destructive, handler: { (action) in
print("close action handler")
})
let openSettings = UIAlertAction(title: "Open settings", style: .default, handler: { (action) in
guard let settingsUrl = URL(string: UIApplicationOpenSettingsURLString) else {
return
}
if UIApplication.shared.canOpenURL(settingsUrl) {
UIApplication.shared.open(settingsUrl, completionHandler: { (success) in
print("Settings are opened: \(success)")
})
}
})
alertVC.addAction(openSettings)
alertVC.addAction(close)
present(alertVC, animated: true, completion: nil)
}
答案 11 :(得分:0)
if #available(iOS 10.0, *) {
if let url = URL(string: "App-Prefs:root=Privacy") {
UIApplication.shared.open(url, completionHandler: .none)
}
} else {
// Fallback on earlier versions
}
在App中打开隐私设置
答案 12 :(得分:0)
不要使用prefs:
,只需使用App-Prefs:
if ([[UIApplication sharedApplication] canOpenURL: [NSURL URLWithString: @"App-Prefs:root=WIFI"]]) {
[[UIApplication sharedApplication] openURL: [NSURL URLWithString:@"App-Prefs:root=WIFI"]];
}
一切都在这里: https://medium.com/@thanhvtrn/how-to-open-settings-wifi-in-swift-on-ios-10-1d94cf2c2e60
答案 13 :(得分:0)
在这里给出的许多答案中,我看到使用“ App-Prefs:root”和“ prefs:root”,我们不应该在我们的应用程序中使用这些来打开设置应用程序。根据苹果公司的说法,这是一个非公开的URL方案,如果我们使用它,我们的应用程序将被拒绝。
答案 14 :(得分:-1)
SWIFT 3
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)