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


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

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

в приложении Map если я отключу локализацию для этого приложения, он отправит мне сообщение, и если я нажму OK, откроется приложение "Настройки". И мой вопрос в том, как это возможно? Как я могу открыть "приложение Настройки" из моего собственного приложения?

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

Я очень ценю ваши ответы, я серьезно.

15 134

15 ответов:

как отметил Каран Дуе это теперь возможно в iOS8 используя UIApplicationOpenSettingsURLString посмотреть документация Apple.

пример:

Swift 4.2 (BETA)

UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)

В Swift 3:

UIApplication.shared.open(URL(string:UIApplicationOpenSettingsURLString)!)

В Swift 2:

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

В Объективе-C

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

до iOS 8:

вы не можете. Как вы сказали, это было покрыто много раз, и что всплывающее окно с просьбой включить службы определения местоположения поставляется Apple, а не самим приложением. Именно поэтому он может открыть приложение настроек.

вот несколько связанных вопросов и статей:

можно ли открыть приложение Настройки с помощью openURL?

программное открытие приложения Настройки (iPhone)

как я могу открыть приложение Настройки, когда пользователь нажимает кнопку?

iPhone: открытие панели настроек приложения из приложения

откройте UIPickerView, нажав на запись в настройках приложения-как?

Откройте приложение Настройки?

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

С @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 (BETA):

if let url = NSURL(string: UIApplication.openSettingsURLString) as URL? {
    UIApplication.shared.open(url, options: [:], completionHandler: nil)
}

Цель-C:

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

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

Шаг 1. нам нужно добавить схемы 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.

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

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

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

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

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

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

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

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

  1. XCode-вы найдете его в Target, Info, URL Scheme. Затем просто введите префы.
  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")!)

С

[[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)
}

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

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

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

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

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

ниже код откроет настройки приложения внутри настройки iOS.

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

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

кроме того, я мог бы найти ниже код из некоторых gist и он отлично работает на iOS 10, а также. Но я не уверен, одобрит ли это команда Apple review или нет.

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

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

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

SWIFT 4.0

'openURL был устаревшим в iOS 10.0: пожалуйста, используйте openURL:options:completionHandler: instead

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

Swift 4

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

if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) {

    UIApplication.shared.open(settingUrl)
}
else {
    print("Setting URL invalid")
}

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

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

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

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

Удачи В Кодировании :)

добавить это в свой класс

 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")
})