如何在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)!)