Открытие приложения "Настройки" из другого приложения
Хорошо, я знаю, что есть много вопросов по этому поводу, но все они были много лет назад.
Так. Я знаю, что это возможно, потому что приложение Map делает это.
В приложении "Карта", если я отключаю локализацию для этого приложения, оно отправляет мне сообщение, и если я нажимаю "ОК", откроется "Приложение настроек". И мой вопрос, как это возможно? Как открыть "Настройка приложения" из моего собственного приложения?
По сути, мне нужно сделать то же самое, если пользователь отключит расположение моего приложения, то я покажу ему сообщение о чем-то, что откроет "Настройка приложения".
Я действительно ценю ваши ответы, я имею в виду это.
19 ответов
Как упомянул Каран Дуа, теперь это возможно в iOS8, используя UIApplicationOpenSettingsURLString
см . документацию Apple.
Пример:
Swift 4.2 (бета)
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)
В Swift 3:
UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)
В Swift 2:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
В Objective-C
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
До iOS 8:
Ты не можешь. Как вы сказали, это уже неоднократно освещалось, и это всплывающее окно с просьбой включить службы определения местоположения предоставляется Apple, а не самим приложением. Именно поэтому он может открыть приложение настроек.
Вот несколько связанных вопросов и статей:
Можно ли открыть приложение настроек с помощью openURL?
Программно открыть приложение настроек (iPhone)
Как открыть приложение "Настройки", когда пользователь нажимает кнопку?
iPhone: Открытие панели настроек приложения из приложения
Откройте UIPickerView, нажав на запись в настройках приложения - Как?
Из Yatheesha B L:
Вы можете открыть приложение настроек программно в iOS8, но не в более ранних версиях iOS.
Swift:
UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)
Свифт 4:
if let url = NSURL(string: UIApplicationOpenSettingsURLString) as URL? {
UIApplication.shared.openURL(url)
}
Swift 4.2 (бета):
if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
}
Objective-C:
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
ДА!! Вы можете запустить экран настроек устройства, я протестировал на iOS 9.2
Шаг 1. нам нужно добавить схемы URL
Зайдите в Настройки проекта -> Информация -> Типы URL -> Добавить новые схемы URL
Шаг 2. Запустите настройки программно благодаря davidcann
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
Также мы можем запускать подэкраны, такие как "Музыка", "Местоположение" и т. Д., Просто используя правильное имя.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]];
Смотрите этот полный список имен здесь, поделенный Анри Нормак
Обновить:
В соответствии с комментарием каждый хочет знать, что происходит после этого изменения в моем статусе подачи заявки?
Так YES!! I got successful update submission and application is available on store without any complain.
Просто чтобы подтвердить, я только что скачал сегодня утром и отключил службы определения местоположения, а затем запустил приложение, которое запрашивало у меня разрешение на определение местоположения, а затем появилось мое всплывающее окно с предупреждением, чтобы отправить мне настройки -> страница служб определения местоположения -> Включено -> Это оно!!
Похоже, вы можете использовать prefs:<area>
URL-адрес, чтобы открыть настройки и перейти в определенные области. Apple может изменить их и сломать ваше приложение, поэтому всегда проверяйте, можете ли вы их открыть.
В этой статье они перечислили некоторые из них для iOS 13.1:
URL-адреса настроек
iCloud
- iCloud:
prefs:root=CASTLE
- Резервное копирование iCloud:
prefs:root=CASTLE&path=BACKUP
Беспроводное радио
- Вай фай:
prefs:root=WIFI
- Блютус:
prefs:root=Bluetooth
- Сотовый:
prefs:root=MOBILE_DATA_SETTINGS_ID
Персональная точка доступа
- Персональная точка доступа:
prefs:root=INTERNET_TETHERING
- Личная точка доступа ⇾ Семейный доступ:
prefs:root=INTERNET_TETHERING&path=Family%20Sharing
- Персональная точка доступа ⇾ Пароль Wi-Fi:
prefs:root=INTERNET_TETHERING&path=Wi-Fi%20Password
VPN
- VPN:
prefs:root=General&path=VPN
Уведомления
- Уведомления:
prefs:root=NOTIFICATIONS_ID
- Уведомления ⇾ Предложения Siri:
prefs:root=NOTIFICATIONS_ID&path=Siri%20Suggestions
Звуки
- Звуки:
prefs:root=Sounds
- Рингтон:
prefs:root=Sounds&path=Ringtone
Не беспокоить
- Не беспокоить:
prefs:root=DO_NOT_DISTURB
- Не беспокоить ⇾ Разрешить звонки от:
prefs:root=DO_NOT_DISTURB&path=Allow%20Calls%20From
Экранное время
- Экранное время:
prefs:root=SCREEN_TIME
- Время экрана ⇾ Время простоя:
prefs:root=SCREEN_TIME&path=DOWNTIME
- Время экрана ⇾ Ограничения приложения:
prefs:root=SCREEN_TIME&path=APP_LIMITS
- Экранное время ⇾ Разрешено всегда:
prefs:root=SCREEN_TIME&path=ALWAYS_ALLOWED
Генеральная
- Генеральная:
prefs:root=General
- Общие ⇾ О нас:
prefs:root=General&path=About
- Общие ⇾ Обновление программного обеспечения:
prefs:root=General&path=SOFTWARE_UPDATE_LINK
- Общие ⇾ CarPlay:
prefs:root=General&path=CARPLAY
- Общие ⇾ Обновление фонового приложения:
prefs:root=General&path=AUTO_CONTENT_DOWNLOAD
- Общие ⇾ Многозадачность (только для iPad):
prefs:root=General&path=MULTITASKING
- Общие ⇾ Дата и время:
prefs:root=General&path=DATE_AND_TIME
- Общие ⇾ Клавиатура:
prefs:root=General&path=Keyboard
- Общие ⇾ Клавиатура ⇾ Клавиатуры:
prefs:root=General&path=Keyboard/KEYBOARDS
- Общие ⇾ Клавиатура ⇾ Аппаратная клавиатура:
prefs:root=General&path=Keyboard/Hardware%20Keyboard
- Общие ⇾ Клавиатура ⇾ Замена текста:
prefs:root=General&path=Keyboard/USER_DICTIONARY
- Общие ⇾ Клавиатура ⇾ Одноручная клавиатура:
prefs:root=General&path=Keyboard/ReachableKeyboard
- Общие ⇾ Язык и регион:
prefs:root=General&path=INTERNATIONAL
- Общий ⇾ Словарь:
prefs:root=General&path=DICTIONARY
- Общие ⇾ Профили:
prefs:root=General&path=ManagedConfigurationList
- Общие ⇾ Сброс:
prefs:root=General&path=Reset
Центр управления
- Центр управления:
prefs:root=ControlCenter
- Центр управления ⇾ Настройка элементов управления:
prefs:root=ControlCenter&path=CUSTOMIZE_CONTROLS
Дисплей
- Дисплей:
prefs:root=DISPLAY
- Дисплей ⇾ Автоблокировка:
prefs:root=DISPLAY&path=AUTOLOCK
- Дисплей ⇾ Размер текста:
prefs:root=DISPLAY&path=TEXT_SIZE
Доступность
- Доступность:
prefs:root=ACCESSIBILITY
Обои на стену
- Обои на стену:
prefs:root=Wallpaper
Siri
- Siri:
prefs:root=SIRI
Яблочный карандаш
- Apple Pencil (только для iPad):
prefs:root=Pencil
Face ID
- Face ID:
prefs:root=PASSCODE
Экстренный SOS
- Экстренный SOS:
prefs:root=EMERGENCY_SOS
Аккумулятор
- Аккумулятор:
prefs:root=BATTERY_USAGE
- Аккумулятор ⇾ Состояние аккумулятора (только для iPhone):
prefs:root=BATTERY_USAGE&path=BATTERY_HEALTH
Конфиденциальность
- Конфиденциальность:
prefs:root=Privacy
- Конфиденциальность ⇾ Службы геолокации:
prefs:root=Privacy&path=LOCATION
- Конфиденциальность ⇾ Контакты:
prefs:root=Privacy&path=CONTACTS
- Конфиденциальность ⇾ Календари:
prefs:root=Privacy&path=CALENDARS
- Конфиденциальность ⇾ Напоминания:
prefs:root=Privacy&path=REMINDERS
- Конфиденциальность ⇾ Фото:
prefs:root=Privacy&path=PHOTOS
- Конфиденциальность ⇾ Микрофон:
prefs:root=Privacy&path=MICROPHONE
- Конфиденциальность ⇾ Распознавание речи:
prefs:root=Privacy&path=SPEECH_RECOGNITION
- Конфиденциальность ⇾ Камера:
prefs:root=Privacy&path=CAMERA
- Конфиденциальность ⇾ Движение:
prefs:root=Privacy&path=MOTION\
Магазин приложений
- Магазин приложений:
prefs:root=STORE
- Магазин приложений ⇾ Загрузки приложений:
prefs:root=STORE&path=App%20Downloads
- Магазин приложений ⇾ Автозапуск видео:
prefs:root=STORE&path=Video%20Autoplay
Кошелек
- Кошелек:
prefs:root=PASSBOOK
Пароли и учетные записи
- Пароли и учетные записи:
prefs:root=ACCOUNTS_AND_PASSWORDS
- Пароли и учетные записи ⇾ Получить новые данные:
prefs:root=ACCOUNTS_AND_PASSWORDS&path=FETCH_NEW_DATA
- Пароли и учетные записи ⇾ Добавить учетную запись:
prefs:root=ACCOUNTS_AND_PASSWORDS&path=ADD_ACCOUNT
Почта
- Почта:
prefs:root=MAIL
- Почта ⇾ Предварительный просмотр:
prefs:root=MAIL&path=Preview
- Почта ⇾ Параметры смахивания:
prefs:root=MAIL&path=Swipe%20Options
- Почта ⇾ Уведомления:
prefs:root=MAIL&path=NOTIFICATIONS
- Почта ⇾ Заблокировано:
prefs:root=MAIL&path=Blocked
- Почта ⇾ Действие с отключенной цепочкой:
prefs:root=MAIL&path=Muted%20Thread%20Action
- Почта ⇾ Параметры заблокированного отправителя:
prefs:root=MAIL&path=Blocked%20Sender%20Options
- Почта ⇾ Отметить Адреса:
prefs:root=MAIL&path=Mark%20Addresses
- Почта ⇾ Повышение уровня котировки:
prefs:root=MAIL&path=Increase%20Quote%20Level
- Почта ⇾ Включите вложения с ответами:
prefs:root=MAIL&path=Include%20Attachments%20with%20Replies
- Почта ⇾ Подпись:
prefs:root=MAIL&path=Signature
- Почта ⇾ Учетная запись по умолчанию:
prefs:root=MAIL&path=Default%20Account
Контакты
- Контакты:
prefs:root=CONTACTS
Календарь
- Календарь:
prefs:root=CALENDAR
- Календарь ⇾ Альтернативные календари:
prefs:root=CALENDAR&path=Alternate%20Calendars
- Календарь ⇾ Синхронизация:
prefs:root=CALENDAR&path=Sync
- Календарь ⇾ Время оповещения по умолчанию:
prefs:root=CALENDAR&path=Default%20Alert%20Times
- Календарь ⇾ Календарь по умолчанию:
prefs:root=CALENDAR&path=Default%20Calendar
Примечания
- Примечания:
prefs:root=NOTES
- Примечания ⇾ Учетная запись по умолчанию:
prefs:root=NOTES&path=Default%20Account
- Примечания ⇾ Пароль:
prefs:root=NOTES&path=Password
- Заметки ⇾ Сортировать заметки по:
prefs:root=NOTES&path=Sort%20Notes%20By
- Заметки ⇾ Новые заметки начинаются с:
prefs:root=NOTES&path=New%20Notes%20Start%20With
- Примечания ⇾ Сортировка отмеченных элементов:
prefs:root=NOTES&path=Sort%20Checked%20Items
- Примечания ⇾ Линии и сетки:
prefs:root=NOTES&path=Lines%20%26%20Grids
- Заметки ⇾ Доступ к заметкам с экрана блокировки:
prefs:root=NOTES&path=Access%20Notes%20from%20Lock%20Screen
Напоминания
- Напоминания:
prefs:root=REMINDERS
- Напоминания ⇾ Список по умолчанию:
prefs:root=REMINDERS&path=DEFAULT_LIST
Голосовые заметки
- Голосовые заметки:
prefs:root=VOICE_MEMOS
Телефон
- Телефон:
prefs:root=Phone
Сообщения
- Сообщения:
prefs:root=MESSAGES
FaceTime
- FaceTime:
prefs:root=FACETIME
Карты
- Карты:
prefs:root=MAPS
- Карты ⇾ Вождение и навигация:
prefs:root=MAPS&path=Driving%20%26%20Navigation
- Карты ⇾ Транспорт:
prefs:root=MAPS&path=Transit
Компас
- Компас:
prefs:root=COMPASS
Измерение
- Мера:
prefs:root=MEASURE
Сафари
- Сафари:
prefs:root=SAFARI
- Safari ⇾ Блокировщики контента:
prefs:root=SAFARI&path=Content%20Blockers
- Safari ⇾ Загрузки:
prefs:root=SAFARI&path=DOWNLOADS
- Safari ⇾ Закрыть вкладки:
prefs:root=SAFARI&path=Close%20Tabs
- Safari ⇾ Очистить историю и данные:
prefs:root=SAFARI&path=CLEAR_HISTORY_AND_DATA
- Safari ⇾ Масштаб страницы:
prefs:root=SAFARI&path=Page%20Zoom
- Safari ⇾ Запросить веб-сайт рабочего стола:
prefs:root=SAFARI&path=Request%20Desktop%20Website
- Safari ⇾ Читатель:
prefs:root=SAFARI&path=Reader
- Safari ⇾ Камера:
prefs:root=SAFARI&path=Camera
- Safari ⇾ Микрофон:
prefs:root=SAFARI&path=Microphone
- Safari ⇾ Расположение:
prefs:root=SAFARI&path=Location
- Safari ⇾ Дополнительно:
prefs:root=SAFARI&path=ADVANCED
Новости
- Новости:
prefs:root=NEWS
Здоровье
- Здоровье:
prefs:root=HEALTH
Ярлыки
- Горячие клавиши:
prefs:root=SHORTCUTS
Музыка
- Музыка:
prefs:root=MUSIC
- Музыка ⇾ Сотовые данные:
prefs:root=MUSIC&path=com.apple.Music:CellularData
- Музыка ⇾ Оптимизировать хранилище:
prefs:root=MUSIC&path=com.apple.Music:OptimizeStorage
- Музыка ⇾ EQ:
prefs:root=MUSIC&path=com.apple.Music:EQ
- Музыка ⇾ Ограничение громкости:
prefs:root=MUSIC&path=com.apple.Music:VolumeLimit
Телевизор
- Настройки ⇾ ТВ:
prefs:root=TVAPP
Фотографии
- Фотографии:
prefs:root=Photos
Камера
- Камера:
prefs:root=CAMERA
- Камера ⇾ Запись видео:
prefs:root=CAMERA&path=Record%20Video
- Камера ⇾ Замедленная запись:
prefs:root=CAMERA&path=Record%20Slo-mo
Книги
- Книги:
prefs:root=IBOOKS
Игровой центр
- Игровой центр:
prefs:root=GAMECENTER
Вы можете использовать это на iOS 5.0 и более поздних версиях: это больше не работает.
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
обновление iOS 10
Apple изменила метод, чтобы открыть асинхронный в главном потоке. Однако теперь можно открывать настройки приложения только в собственных настройках.
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
iOS 9 обновление
Теперь можно перейти непосредственно в меню под-настроек. Тем не менее, схема URL должна быть создана. Это можно сделать двумя способами:
- XCode - вы найдете его в Target, Info, URL Scheme. Затем просто введите prefs.
- Непосредственно добавление в *-Info.plist. Добавьте следующее:
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleTypeRole</key> <string>Editor</string> <key>CFBundleURLSchemes</key> <array> <string>prefs</string> </array> </dict> </array>
Тогда код:
стриж
UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)
Objective-C
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];
В Swift 3 / iOS 10+ это выглядит сейчас
if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
UIApplication.shared.open(url, completionHandler: .none)
}
Свифт 3:
guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return}
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, options: [:], completionHandler: nil)
} else {
// Fallback on earlier versions
UIApplication.shared.openURL(url)
}
В Swift 3 все, что мне нужно, это (здесь, например, перенаправление на уведомления моего приложения):
if let url = URL(string: "App-Prefs:root=NOTIFICATIONS_ID&path=your app bundleID") {
if #available(iOS 10.0, *) {
UIApplication.shared.open(url, completionHandler: .none)
} else {
// Fallback on earlier versions
}
}
Источник: phynet gist.
Это работало со мной только когда настройки в фоновом режиме. Он перенаправит вас к настройкам уведомлений вашего приложения, но если настройки не выполнялись в фоновом режиме, он просто перенаправит вас к настройкам уведомлений в целом.
В качестве
openURL(_:)
устарела после iOS 10.0, используйте
open(_:options:completionHandler:)
вместо.
if let settingsUrl = URL(string: UIApplication.openSettingsURLString) {
UIApplication.shared.open(settingsUrl, options: [:]) { completed in
if !completed {
print("Failed opening")
}
}
}
UIApplicationOpenSettingsURLString
это будет работать, только если вы ранее разрешили любое разрешение. Например, Местоположение, Фото, Контакт, Доступ к push-уведомлениям. Так что, если у вас нет таких разрешений от пользователя:
Если iOS 10 или выше,
Он откроет настройки, но затем вылетит. Причина в настройках вашего приложения.
Ниже код откроет настройки вашего приложения в настройках iOS.
NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
}
Из-за недоступности устройства я не смог проверить это на iOS < 10.
Кроме того, я мог найти ниже код из некоторого гист, и он прекрасно работает на iOS 10, а также. Но я не уверен, одобрит ли это команда проверки Apple или нет.
https://gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f
Вы можете использовать код ниже для этого.
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
Swift 4
Я предпочитаю открывать настройки более безопасным способом,
if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {
UIApplication.shared.open(settingUrl)
}
else {
print("Setting URL invalid")
}
В iOS 16 вы можете использовать openSettingsURLString .
if let url = URL(string: UIApplication. openSettingsURLString) {
await UIApplication.shared.open(url)
}
Протестировано с iOS 10. Работа
NSArray* urlStrings = @[@"prefs:root=WIFI", @"App-Prefs:root=WIFI"];
for(NSString* urlString in urlStrings){
NSURL* url = [NSURL URLWithString:urlString];
if([[UIApplication sharedApplication] canOpenURL:url]){
[[UIApplication sharedApplication] openURL:url];
break;
}
}
Удачного кодирования:)
SWIFT 4.0
'openURL' устарел в iOS 10.0: используйте openURL: параметры: завершение, а вместо:
UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
Swift Вы можете использовать следующую функцию, чтобы открыть приложение "Настройки" с помощью страницы Bluetooth.
func openSettingsApp(){
if let settings = NSURL(string: "prefs:root=Bluetooth") {
UIApplication.sharedApplication().openURL(settings)
}
}
Опять же, это не откроет настройки приложения. Это откроет приложение настроек с Bluetooth, так как это глубокая связь с Bluetooth.
Чтобы добавить к принятому ответу: (из документации разработчика Apple) "Когда вы открываете URL-адрес, созданный из этой строки (openSettingsURLString), система запускает приложение" Настройки "и отображает пользовательские настройки приложения, если они есть". Итак, если вы хотите открыть настройки для своего приложения, создайте свой собственный файл Settings.bundle.
Добавьте это в свой класс,
public class func showSettingsAlert(title:String,message:String,onVC viewController:UIViewController,onCancel:(()->())?){
YourClass.show2ButtonsAlert(onVC: viewController, title: title, message: message, button1Title: "Settings", button2Title: "Cancel", onButton1Click: {
if let settingsURL = NSURL(string: UIApplicationOpenSettingsURLString){
UIApplication.sharedApplication().openURL(settingsURL)
}
}, onButton2Click: {
onCancel?()
})
}
public class func show2ButtonsAlert(onVC viewController:UIViewController,title:String,message:String,button1Title:String,button2Title:String,onButton1Click:(()->())?,onButton2Click:(()->())?){
dispatch_async(dispatch_get_main_queue()) {
let alert : UIAlertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: button1Title, style:.Default, handler: { (action:UIAlertAction) in
onButton1Click?()
}))
alert.addAction(UIAlertAction(title: button2Title, style:.Default, handler: { (action:UIAlertAction) in
onButton2Click?()
}))
viewController.presentViewController(alert, animated: true, completion: nil)
}
}
Звони так,
YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: {
print("canceled")
})