I have an application with an explicit user interaction that makes use of the user's current location. If the user denies access to location services, I would still like subsequent uses to prompt the user to go to settings and re-enable location services for my app.
The behavior I want is that of the built-in Maps app:
- Reset location warnings in Settings > General > Reset > Reset Location Warnings.
- Start Maps app.
- Tap Current Location button in lower left corner.
- Maps prompts with ""Maps" Would Like to Use Your Current Location" | "Don't Allow" | "Allow".
- Choose "Don't Allow" option.
- Tap Current Location button in lower left corner again.
- Maps prompts with "Turn On Location Services to Allow "Maps" to Determine Your Location" | "Settings" | "Cancel".
In my own app, the same basic flow results in my CLLocationManagerDelegate -locationManager:didFailWithError: method being called with a kCLErrorDenied error at the final step and the user is not given the option to open the Settings app to correct it.
I could display my own alert in response to the error, but it would not have the ability to launch the Settings app like the alert that the OS can provide as used by the built-in Maps app.
Is there something in the CLLocationManager class I am missing that would be able to give me this behavior?
According to Apple's Docs on the locationServicesEnabled method.
So cant you just start location services updates any way to cause the alert to be prompted?
Here is the swift 3 implementation of the code provided by Markus and bjc.
Swift 3 extension for creating settings alert controller:
import Foundation
Update:
As of iOS 8, there is now the constant
UIApplicationOpenSettingsURLString
which represents a URL that, when opened, opens the Settings app to your application's settings (where the user can then re-enable location services).Original:
There is no way for you to do this. Your only real option is to display an alert informing the user that your application requires location services, and instructing them to manually go to the Settings app and turn it on.
With iOS8, you can finally link user to Settings app via openURL. For example, you can create a UIAlertView with a single button that takes user to the Settings app:
In your UIAlertView delegate:
latest swift version based on answers above.