如何在Facebook应用程序中以编程方式打开设置?

我需要从我的应用程序中以编程方式打开设置。 我搜遍了,但到处都有人说这是不可能的。 但今天我看到它在Facebook应用程序中实现。 UIAlertView上有一个button,当你点击它时你打开设置。 所以确实这是可以打开设置,我亲眼目睹了这一点。 但是怎么做呢? 有谁知道Facebook如何做到这一点?

你不能,没有API调用来做到这一点。

只有Apple Frameworks的系统对话框,对话框才能打开设置应用程序。 在iOS 5中有一个应用程序的URLscheme来打开系统对话框,但苹果后来删除它。


随着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. } 

在iOS 8上,您可以通过编程方式打开设置!

这里是代码:

 - (void)openSettings { BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL); if (canOpenSettings) { NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString]; [[UIApplication sharedApplication] openURL:url]; } } 

如果您的应用具有自己的设置包,则会打开显示应用设置的设置。 如果您的应用程序没有设置包,则会显示主要设置页面。

在iOS 8上,您可以通过编程方式打开设置!

以下是“设置”应用中当前已知url的列表:

 - (void) openSettings { if (&UIApplicationOpenSettingsURLString != nil) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; else NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version"); } 
  • 首选项:根=通用及path=关于
  • 首选项:根=通用及path= ACCESSIBILITY
  • 首选项:根= AIRPLANE_MODE
  • 首选项:根=通用及path= AUTOLOCK
  • 首选项:根=通用及path= USAGE / CELLULAR_USAGE
  • 首选项:根=亮度
  • 首选项:根=通用及path=蓝牙
  • 首选项:根=通用及path= DATE_AND_TIME
  • 首选项:根= FACETIME
  • 首选项:根=通用
  • 首选项:根=通用及path=键盘
  • 首选项:根= CASTLE
  • 首选项:根=城堡&path= STORAGE_AND_BACKUP
  • 首选项:根=通用及path= INTERNATIONAL
  • 首选项:根= LOCATION_SERVICES
  • 首选项:根= ACCOUNT_SETTINGS
  • 首选项:根= MUSIC
  • 首选项:根=音乐与path= EQ
  • 首选项:根=音乐与path= VolumeLimit
  • 首选项:根=通用及path=networking
  • 首选项:根= NIKE_PLUS_IPOD
  • 首选项:根= NOTES
  • 首选项:根= NOTIFICATIONS_ID
  • 首选项:根=电话
  • 首选项:根=照片
  • 首选项:根=通用及path= ManagedConfigurationList
  • 首选项:根=通用及path=复位
  • 首选项:根=声音和path=铃声
  • 首选项:根= Safari浏览器
  • 首选项:根=通用及path=助理
  • 首选项:根=声音
  • 首选项:根=通用及path= SOFTWARE_UPDATE_LINK
  • 首选项:根= STORE
  • 首选项:根= TWITTER
  • 首选项:根=通用及path= USAGE
  • 首选项:根= VIDEO
  • 首选项:根=通用及path=networking/ VPN
  • 首选项:根=壁纸
  • 首选项:根= WIFI
  • 首选项:根= INTERNET_TETHERING

Vito Ziv在Swift的回答。

 func openSettings() { UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil) } 

这个问题所指的Facebook应用程序中的警报是当您在Info.plist文件中将UIRequiresPersistentWiFi设置为YES并且用户在没有networking连接的情况下启动您的应用程序时,iOS显示标准警报

总结这里的讨论:

  • 没有可用于转到“设置”应用的根级别url
  • 可以使用iOS 8中的UIApplicationOpenSettingsURLString将用户发送到设置应用程序的应用程序部分
  • 您的应用程序可以显示与Facebook相同的警报 ,通过将UIRequiresPersistentWiFi设置为YES来打开“设置”应用程序的根级别。
  if (&UIApplicationOpenSettingsURLString != NULL) 

在iOS 8+中始终为TRUE。 所以你可以像这样编辑

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

(使用新的openURL for iOS 10)

如果您想要打开应用程序设置,则需要使用UIApplicationOpenSettingsURLString的写入方法。

 fileprivate func openSettings() { UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!) } 

如果你需要打开许多设置中的一个,你需要使用这个function

 fileprivate func openSettings() { UIApplication.shared.open(URL(string:"App-Prefs:root=General")!) } 

要在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"); } 

以下为参考和详细说明

在iOS 8中以编程方式打开“设置”应用程序

  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) { }]; } 

如果你正在使用Swift 3,这是语法

 UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:]) { (success) in if success { print("settings opened"); } } 
 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中打开隐私设置

而不是使用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

这是一个带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) } 

SWIFT 3

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