Как открыть настройки программно, как в приложении Facebook?

Мне нужно программно открыть Настройки из моего приложения. Я искал через SO, но везде люди говорят, что это невозможно. Но сегодня я увидел, что это реализовано в приложении Facebook. На UIAlertView есть кнопка, и когда вы щелкаете по ней, вы открываете настройки. Так что это действительно возможно открыть настройки, я был свидетелем этого сам. Но как это сделать? Кто-нибудь знает, как это делает Facebook?

73 голоса | спросил Andrey Chernukha 23 Maypm14 2014, 12:08:52

13 ответов


0

Вы не можете, для этого нет вызова 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.
}
ответил rckoenes 23 Maypm14 2014, 12:11:45
0

В iOS 8 вы можете открыть Настройки программно!

Вот код:

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

Если у вашего приложения есть собственный пакет настроек, откроются настройки с настройками вашего приложения. Если в вашем приложении нет набора настроек, будет показана страница основных настроек.

ответил Vito Ziv 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2014 11:09:27 +0400 2014, 11:09:27
0

Ответ Вито Зива в Swift.

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

}
ответил Anoroah 9 +03002015-10-09T15:04:52+03:00312015bEurope/MoscowFri, 09 Oct 2015 15:04:52 +0300 2015, 15:04:52
0

Оповещение в приложении Facebook, к которому относится этот вопрос, является стандартным предупреждением, которое iOS отображает самостоятельно , когда вы устанавливаете UIRequiresPersistentWiFi для YES в ваших файлах Info.plist и файлах пользователя. ваше приложение без подключения к сети.

Подведем итоги обсуждения здесь:

  • Нет URL-адреса , который можно использовать для перехода на корневой уровень приложения "Настройки".
  • Вы можете отправить пользователя в раздел своего приложения приложения "Настройки", используя UIApplicationOpenSettingsURLString в iOS 8.
  • Ваше приложение может отображать то же предупреждение, что и Facebook , которое открывает корневой уровень приложения "Настройки", если для параметра UIRequiresPersistentWiFi установлено значение YES.
ответил Richard Venable 18 J000000Saturday15 2015, 00:25:54
0

Памятка о prefs:root= и Prefs:root.

Да, наше приложение было отклонено Apple из-за prefs:root= и App-Prefs:root Схема URL сегодня (2018-06-29). Они являются частным API.

 Отклонено Apple


Для Swift 4,

Только UIApplication.openSettingsURLString является открытым API для открытия настроек.

ответил AechoLiu 29 J0000006Europe/Moscow 2018, 04:28:48
0
 if (&UIApplicationOpenSettingsURLString != NULL)

в iOS 8+ всегда ИСТИНА. Таким образом, вы можете редактировать так

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];

if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
}

(с новым openURL для iOS 10)

ответил Joannes 25 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowSun, 25 Sep 2016 11:35:27 +0300 2016, 11:35:27
0

Если вы хотите открыть настройки приложения, вам нужен метод write с UIApplicationOpenSettingsURLString.

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

Если вам нужно открыть одну из многих настроек, вам нужно использовать эту функцию

fileprivate func openSettings() {
  UIApplication.shared.open(URL(string:"App-Prefs:root=General")!)
}
ответил user1064264 16 FebruaryEurope/MoscowbThu, 16 Feb 2017 22:38:10 +0300000000pmThu, 16 Feb 2017 22:38:10 +030017 2017, 22:38:10
0

Чтобы открыть настройки нашего собственного приложения в 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

ответил Aamir 10 FebruaryEurope/MoscowbWed, 10 Feb 2016 08:52:03 +0300000000amWed, 10 Feb 2016 08:52:03 +030016 2016, 08:52:03
0
 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) {
            }];
        }
ответил IvanovDeveloper 19 Jam1000000amTue, 19 Jan 2016 11:26:45 +030016 2016, 11:26:45
0

Вот пример Swift 3 с UIAlertController и UIAlertAction.

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)
}
ответил Anvar Azizov 30 J000000Sunday17 2017, 17:05:50
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
    }

Открытие настроек конфиденциальности в приложении

ответил Hemanshu Liya 27 PMpThu, 27 Apr 2017 14:52:50 +030052Thursday 2017, 14:52:50
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 /как открывающейся-настройки-WiFi-в-скор-на-КСН-10-1d94cf2c2e60

ответил Nikola Markovic 16 J000000Sunday17 2017, 07:24:57
0

SWIFT 3

UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)
ответил BennyTheNerd 17 Maypm17 2017, 21:36:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132