Мне нужно открыть программы программно из моего приложения. Я искал SO, но везде люди говорят, что это невозможно. Но сегодня я увидел, что он реализован в приложении Facebook. Там кнопка на UIAlertView
, и когда вы нажмете на нее, вы откроете Настройки. Так что действительно можно открыть Настройки, я сам это видел. Но как это сделать? Кто-нибудь знает, как это делает Facebook?
Как открыть Настройки программно, как в приложении Facebook?
Ответ 1
Вы не можете, для вызова API нет.
Только системные диалоги, диалоги из Apple Framework, могут открыть приложение настроек. В 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
На iOS 8 вы можете программно открывать настройки!
Вот код:
- (void)openSettings
{
BOOL canOpenSettings = (&UIApplicationOpenSettingsURLString != NULL);
if (canOpenSettings) {
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url];
}
}
Если ваше приложение имеет собственный набор настроек, настройки будут открыты, показывая настройки ваших приложений. Если ваше приложение не имеет набора настроек, будет отображаться страница основных настроек.
Ответ 3
На iOS 8 вы можете программно открывать настройки!
Вот список известных в настоящее время URL-адресов в приложении "Настройки":
- (void) openSettings
{
if (&UIApplicationOpenSettingsURLString != nil)
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
else
NSLog(@"UIApplicationOpenSettingsURLString is not available in current iOS version");
}
- префы: корень = General & путь = О
- префы: корень = General & путь = ДОСТУПНОСТИ
- префы: корень = AIRPLANE_MODE
- префы: корень = General & путь = AUTOLOCK
- префы: корень = General & путь = USAGE/CELLULAR_USAGE
- префы: корень = Яркость
- префы: корень = General & путь = Bluetooth
- префы: корень = General & путь = DATE_AND_TIME
- префы: корень = FaceTime
- префы: корень = Общие
- префы: корень = General & путь = Клавиатура
- префы: корень = ЗАМОК
- префы: корень = ЗАМОК & путь = STORAGE_AND_BACKUP
- префы: корень = General & путь = INTERNATIONAL
- префы: корень = LOCATION_SERVICES
- префы: корень = ACCOUNT_SETTINGS
- префы: корень = МУЗЫКА
- префы: корень = МУЗЫКА & путь = EQ
- префы: корень = МУЗЫКА & путь = VolumeLimit
- префы: корень = General & путь = сети
- префы: корень = NIKE_PLUS_IPOD
- Prefs: корень = ПРИМЕЧАНИЯ
- префы: корень = NOTIFICATIONS_ID
- префы: корень = Телефон
- префы: корневые = Фотографии
- префы: корень = General & путь = ManagedConfigurationList
- префы: корень = General & путь = Reset
- префы: корень = Звуки & путь = Мелодия
- префы: корень = Safari
- префы: корень = General & путь = Assistant
- префы: корень = Звуки
- префы: корень = General & путь = SOFTWARE_UPDATE_LINK
- префы: корень = STORE
- префы: корень = TWITTER
- префы: корень = General & путь = ИСПОЛЬЗОВАНИЕ
- префы: корень = ВИДЕО
- префы: корень = General & путь = Сеть /VPN
- префы: корень = обои
- префы: корень = WIFI
- префы: корень = INTERNET_TETHERING
Ответ 4
Ответ Вито Зива в Свифт.
func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, completionHandler: nil)
}
Ответ 5
Предупреждение в приложении Facebook, на которое ссылается этот вопрос, - это стандартное предупреждение , которое iOS отображает сам, когда вы устанавливаете UIRequiresPersistentWiFi в YES в ваших файлах Info.plist, и пользователь запускает ваше приложение без сетевого подключения.
Подводя итог обсуждению здесь:
- Нет URL-адреса, который можно использовать для доступа к корневому уровню приложения "Настройки" .
- Вы можете отправить пользователя в свой раздел приложения в приложении "Настройки" , используя UIApplicationOpenSettingsURLString в iOS 8.
- Ваше приложение может отображать те же предупреждения, что и Facebook, что открывает корневой уровень приложения "Настройки" , установив UIRequiresPersistentWiFi в "YES".
Ответ 6
Памятка о prefs:root=
и Prefs:root
.
Да, наше приложение было отклонено Apple из-за prefs:root=
и App-Prefs:root
схема URL сегодня (2018-06-29)
. Они являются частным API.
Для Swift 4,
Только UIApplication.openSettingsURLString является открытым API для открытия настроек.
Ответ 7
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)
Ответ 8
Если вам нужны открытые параметры приложения, вам нужен метод записи с помощью UIApplicationOpenSettingsURLString.
fileprivate func openSettings() {
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!)
}
Если вам нужно открыть одну из многих настроек, вам нужно использовать эту функцию
fileprivate func openSettings() {
UIApplication.shared.open(URL(string:"App-Prefs:root=General")!)
}
Ответ 9
Чтобы открыть настройки нашего собственного приложения в 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");
}
Для справки и подробного описания, пожалуйста, следуйте
Ответ 10
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) {
}];
}
Ответ 11
Вот пример 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)
}
Ответ 12
Если вы используете Swift 3, это синтаксис
UIApplication.shared.open(URL(string: UIApplicationOpenSettingsURLString)!, options: [:]) { (success) in
if success {
print("settings opened");
}
}
Ответ 13
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
}
Открытие настроек конфиденциальности в приложении
Ответ 14
Вместо использования 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
Ответ 15
какие-либо объективные решения этой проблемы?
Ответ 16
Во многих ответах, приведенных здесь, я вижу использование "App-Prefs: root", "prefs: root", мы не должны использовать их в наших приложениях, чтобы открыть приложение настроек. Согласно Apple, это непубличная схема URL, и если мы ее используем, наше приложение будет отклонено.
Ответ 17
SWIFT 3
UIApplication.shared.openURL(URL(string: UIApplicationOpenSettingsURLString)!)