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

时间:2014-05-23 08:08:52

标签: ios objective-c

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

15 个答案:

答案 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显示没有网络连接的应用程序。

总结这里的讨论:

    您可以使用
  • 没有网址来访问“设置”应用的根级别
  • 可以使用iOS 8中的 UIApplicationOpenSettingsURLString 将用户发送到设置应用的您应用的部分。
  • 您的应用可以显示与Facebook相同的提醒,通过将UIRequiresPersistentWiFi设置为YES,可以打开“设置”应用的根级别。

答案 5 :(得分:10)

关于prefs:root=Prefs:root的备忘录。

是的,由于今天prefs:root=的{​​{1}}和App-Prefs:root URL方案,我们的应用被 Apple拒绝了。它们是私有API。

Rejected by Apple


对于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");
}

有关参考和详细说明,请按照

Opening the Settings app programmatically in iOS 8

答案 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)!)