Abrir la aplicación de configuración desde otra aplicación

De acuerdo, sé que hay muchas preguntas al respecto, pero todas son de hace mucho tiempo.

Asi que. Sé que es posible porque la aplicación Map lo hace.

En la aplicación Mapa, si desactivo la localización de esta aplicación, me enviará un mensaje y, si presiono la tecla correcta, se abrirá la “Aplicación de configuración”. Y mi pregunta es, ¿cómo es esto posible? ¿Cómo puedo abrir la “Aplicación de configuración” desde mi propia aplicación?

Básicamente, tengo que hacer lo mismo, si el usuario desactiva la ubicación de mi aplicación, entonces le mostraré un mensaje que dice algo que abrirá la “Aplicación de configuración”

Realmente aprecio tus respuestas, lo digo en serio.

Como lo menciona Karan Dua, ahora es posible en iOS8 usando UIApplicationOpenSettingsURLString consulte la Documentación de Apple .

Ejemplo:

Swift 4.2 (BETA)

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

En Swift 3:

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

En Swift 2:

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

En Objective-C

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

Antes de iOS 8:

No puedes. Como dijiste, esto se ha cubierto muchas veces y la ventana emergente que te pide que actives los servicios de ubicación es proporcionada por Apple y no por la aplicación en sí. Es por eso que es capaz de abrir la aplicación de configuración.

Aquí hay algunas preguntas y artículos relacionados:

¿Es posible abrir la aplicación de configuración con OpenURL?

Progtwigndo la apertura de la aplicación de configuración (iPhone)

¿Cómo puedo abrir la aplicación de Configuración cuando el usuario presiona un botón?

iPhone: abrir el panel de preferencias de la aplicación desde la aplicación

Abra UIPickerView haciendo clic en una entrada en las preferencias de la aplicación – ¿Cómo?

Abra la aplicación de configuración?

iOS: estás haciendo ajustes incorrectos

De la respuesta de @Yatheeshaless :

Puede abrir la aplicación de configuración mediante progtwigción en iOS8, pero no en versiones anteriores de iOS.

Rápido:

  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 objective:

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

¡¡SÍ!! puede abrir la pantalla de Configuración del dispositivo, lo he probado en iOS 9.2

Paso 1. Necesitamos agregar esquemas de URL

Vaya a Configuración del proyecto -> Información -> Tipos de URL -> Agregar nuevos esquemas de URL

enter image description here

Paso 2. Inicie la configuración mediante progtwigción gracias a @davidcann

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

También podemos lanzar subpantallas como Música, Ubicación, etc. con solo usar el nombre propio

 [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=MUSIC"]]; 

Vea esta lista de nombres completos aquí compartida por Henri Normak


Actualizar:

Según el comentario, ¿todos quieren saber qué sucede después de este cambio en el estado de mi solicitud?

¡Así que YES!! I got successful update submission and application is available on store without any complain. YES!! I got successful update submission and application is available on store without any complain.

Solo para confirmar, acabo de descargar esta mañana e inhabilité los servicios de ubicación, y luego inicié la aplicación, que me pidió permiso de ubicación y luego mi ventana emergente de alerta estaba allí para enviarme las configuraciones -> página de servicios de ubicación -> Habilitado -> ¡¡Eso es!!

Puede usar esto en iOS 5.0 y versiones posteriores: esto ya no funciona.

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

Actualización de iOS 10

Apple cambió el método para abrir asincrónico en el hilo principal. Sin embargo, a partir de ahora solo es posible abrir la configuración de la aplicación en la configuración nativa.

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

Actualización de iOS 9

Ahora es posible ir directamente al menú de configuración secundaria. Sin embargo, se debe crear un esquema de URL. Se puede hacer usando dos formas:

  1. XCode: lo encontrará en Target, Info, URL Scheme. Luego, solo escriba prefs.
  2. Agregar directamente a * -Info.plist. Agregue lo siguiente: CFBundleURLTypes CFBundleTypeRole Editor CFBundleURLSchemes prefs

Entonces el código:

Rápido

UIApplication.sharedApplication().openURL(NSURL(string:"prefs:root=General&path=Keyboard")!)

C objective

[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"prefs:root=General&path=Keyboard"]];

En Swift 3 / iOS 10+ esto ahora se ve como

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

En Swift 3, todo lo que necesitaba era esto (aquí, por ejemplo, redirigir a las notificaciones de mi aplicación):

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

Fuente: phynet gist .

Esto funcionó conmigo solo cuando la configuración está en segundo plano. Te redirigirá a la configuración de notificaciones de tu aplicación, pero si la configuración no se ejecutó en segundo plano, simplemente te redireccionará a la configuración de notificaciones en general.

UIApplicationOpenSettingsURLString esto solo funcionará si previamente ha permitido algún permiso. Por ejemplo, ubicación, foto, contacto, acceso de notificación de inserción. Entonces, si no tiene ese (s) permiso (s) del usuario:

Si iOS 10 o superior ,

Abrirá la Configuración pero luego la bloqueará. El motivo es que no hay nada en la configuración de tu aplicación.

El siguiente código abrirá la configuración de su aplicación dentro de la configuración de iOS.

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

Debido a la falta de disponibilidad del dispositivo, no pude verificar esto en iOS <10.

Además, pude encontrar el código a continuación de algunos elementos esenciales y también funciona bien en iOS 10. Pero no estoy seguro si esto será aprobado por el equipo de revisión de Apple o no.

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

Puede usar el siguiente código para ello.

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

SWIFT 4.0

‘openURL’ ha quedado obsoleto en iOS 10.0: utilice openURL: options: completionHandler: en su lugar

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

Swift 4

Prefiero abrir la configuración de una manera más segura,

 if let settingUrl = URL(string:UIApplicationOpenSettingsURLString) { UIApplication.shared.open(settingUrl) } else { print("Setting URL invalid") } 

Swift Puede usar la siguiente función para abrir la aplicación de configuración con la página de Bluetooth

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

De nuevo, esto no abriría la configuración de la aplicación. Esto abriría la aplicación de configuración con Bluetooth, ya que es un enlace profundo a bluetooth.

Probado con iOS 10. Trabajando

 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; } } 

Happy Coding 🙂

Agrega esto a tu clase,

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

Llamar así,

 YourClass.showSettingsAlert("App would like to access camera", message: "App would like to access camera desc", onVC: fromViewController, onCancel: { print("canceled") }) 
Intereting Posts