I have an android app that uses location. But I noticed that if users disable the \'Access to my location\' in Settings > Location access, nothing works anymore. How can I check
An alternative way to do that without using Settings.Secure
and without scanning all location providers would be to do:
LocationManager locationManager = (LocationManager) getContext().getSystemService(Context.LOCATION_SERVICE);
int providersCount = locationManager.getProviders(true).size(); // Listing enabled providers only
if (providersCount == 0) {
// No location providers at all, location is off
}
Unfortunately, it seems the using of Settings.Secure.LOCATION_PROVIDERS_ALLOWED
is deprecated since API 19.
A new way to do that would be:
int locationMode = Settings.Secure.getInt(
getContentResolver(),
Settings.Secure.LOCATION_MODE,
Settings.Secure.LOCATION_MODE_OFF // Default value if not found
);
if (locationMode == Settings.Secure.LOCATION_MODE_OFF) {
// Location is off
}
You can check it like that:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) // Return a boolean
EDIT:
If you want to check the network provider:
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER) // Return a boolean
EDIT 2:
If you want to open the settings, you can use this intent:
Intent intent = new Intent(android.provider.Settings.ACTION_LOCATION_SOURCE_SETTINGS);
may be this will be useful check this site it discusses about location service
http://www.scotthelme.co.uk/android-location-services/
There are two ways to check location, 1-using GPS 2-using network provider its better to check both service are enabled or not.For that use this method :)
public boolean checkServices(){
//check location service
LocationManager locationManager = (LocationManager)getActivity().getSystemService(Context.LOCATION_SERVICE);
if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) &&
locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
return true;
}
}