it-swarm.com.ru

Открытие приложения "Настройки" из другого приложения

Хорошо, я знаю, что есть много вопросов по этому поводу, но все они были много лет назад.

Так. Я знаю, что это возможно, потому что приложение Map делает это.

В приложении «Карта», если я отключаю локализацию для этого приложения, оно отправляет мне сообщение, и если я нажимаю «ОК», откроется «Приложение настроек» .. И мой вопрос: как это возможно? Как я могу открыть «Настройка приложения» из моего собственного приложения?

По сути, мне нужно сделать то же самое, если пользователь отключит расположение моего приложения, то я покажу ему сообщение, в котором говорится что-то, что откроет «Настройка приложения».

144
FelipeDev.-

Как упомянуто Каран Дуа это возможно теперь возможно в 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, нажав на запись в настройках приложения - Как?

Открыть приложение настроек?

iOS: вы делаете неправильные настройки

236
Joe

От @Yatheeshaless 's ответ :

Вы можете открыть приложение настроек программно в iOS8, но не в более ранних версиях iOS.

Swift:

   UIApplication.sharedApplication().openURL(NSURL(string:UIApplicationOpenSettingsURLString)!)

Swift 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]];
125
Karan Dua

ДА!! вы можете запустить экран настроек устройства, у меня протестировано на iOS 9.2

Шаг 1. нам нужно добавить схемы URL

Зайдите в Настройки проекта -> Информация -> Типы URL -> Добавить новые схемы URL

 enter image description here

Шаг 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.

Просто чтобы подтвердить, Я только что скачал сегодня утром и отключил службы определения местоположения, а затем запустил приложение, которое запрашивало у меня разрешение на определение местоположения, а затем появилось мое всплывающее окно с предупреждением, чтобы отправить меня на странице настроек -> страница служб определения местоположения -> Включено -> Вот и все !!

56
swiftBoy

Вы можете использовать это на iOS 5.0 и более поздних версиях: Это больше не работает.

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs://"]];
18
davidcann

Обновление iOS 10

Apple изменила метод открытия асинхронного потока в главном потоке. Однако теперь можно открывать настройки приложения только в собственных настройках.

[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];

iOS 9 обновление

Теперь можно перейти непосредственно в меню под-настроек. Тем не менее, схема URL должна быть создана. Это можно сделать двумя способами:

  1. XCode - вы найдете его в Target, Info, URL Scheme. Затем просто введите prefs.
  2. Непосредственно добавление в * -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"]];

13
guyromb

В Swift 3/iOS 10+ это выглядит сейчас

if let url = URL(string: "App-Prefs:root=LOCATION_SERVICES") {
    UIApplication.shared.open(url, completionHandler: .none)
}
4
Damo

Свифт 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)
}
4
Duy Doan

В 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 .

Это работало со мной, только когда настройки в фоновом режиме. Он перенаправит вас на настройки уведомлений вашего приложения, но если настройки не выполнялись в фоновом режиме, он просто перенаправит вас на настройки уведомлений в целом. 

3
ynamao

UIApplicationOpenSettingsURLString это будет работать, только если вы ранее разрешили любое разрешение. Например, Местоположение, Фото, Контакт, Доступ к push-уведомлениям. Так что, если у вас нет таких разрешений от пользователя:

Если iOS 10 или выше,

Он откроет настройки, но затем вылетит. Причина в настройках вашего приложения.

Ниже код откроет настройки вашего приложения в настройках iOS.

NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
if ([[UIApplication sharedApplication] canOpenURL:url]) {
    [[UIApplication sharedApplication] openURL:url];
}

Из-за недоступности устройства я не смог проверить это на iOS <10.

Кроме того, я мог найти ниже код из некоторого Gist, и он прекрасно работает на iOS 10. Но я не уверен, одобрит ли это команда проверки Apple или нет.

https://Gist.github.com/johnny77221/bcaa5384a242b64bfd0b8a715f48e69f

2
Hemang

Swift 4.0

«openURL» устарел в iOS 10.0: пожалуйста, используйте openURL: параметры: завершениеHandler: вместо

UIApplication.shared.open(URL.init(string: UIApplicationOpenSettingsURLString)! , options: [:], completionHandler: nil)
1
Harshil Kotecha

Вы можете использовать код ниже для этого.

[[UIApplication sharedApplication]openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
1
Som

Swift 4

Я предпочитаю открывать настройки более безопасным способом,

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}
1
Sazzad Hissain Khan

Swift Вы можете использовать следующую функцию, чтобы открыть приложение «Настройки» с помощью страницы Bluetooth.

func openSettingsApp(){
    if let settings = NSURL(string: "prefs:root=Bluetooth") {
        UIApplication.sharedApplication().openURL(settings)
    }
}

Опять же, это не откроет настройки приложения. Это откроет приложение настроек с Bluetooth, так как это глубокая связь с Bluetooth.

0
Alix

Протестировано с 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;
}
}

Удачного кодирования :)

0
Praveen Sharma