Android: Check if Location Services Enabled using Fused Location Provider
Solution 1
See SettingsApi: check your location request then ensure that the device's system settings are properly configured for the app's location needs.
Solution 2
This android developer training tutorial could help - here's the basics:
Code to run in your Activity onCreate():
// Create an instance of GoogleAPIClient.
if (mGoogleApiClient == null) {
mGoogleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
}
mGoogleApiClient.connect();
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(10000);
mLocationRequest.setFastestInterval(5000);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(mLocationRequest);
PendingResult<LocationSettingsResult> result =
LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
result.setResultCallback(new ResultCallback<LocationSettingsResult>() {
@Override
public void onResult(LocationSettingsResult locationSettingsResult) {
final Status status = locationSettingsResult.getStatus();
final LocationSettingsStates LS_state = locationSettingsResult.getLocationSettingsStates();
switch (status.getStatusCode()) {
case LocationSettingsStatusCodes.SUCCESS:
// All location settings are satisfied. The client can initialize location
// requests here.
break;
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
// Location settings are not satisfied. But could be fixed by showing the user
// a dialog.
try {
// Show the dialog by calling startResolutionForResult(),
// and check the result in onActivityResult().
status.startResolutionForResult(LocationByGPS.this, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException e) {
// Ignore the error.
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
// Location settings are not satisfied. However, we have no way to fix the
// settings so we won't show the dialog.
break;
}
}
});
Override this Method:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final LocationSettingsStates states = LocationSettingsStates.fromIntent(data);
switch (requestCode) {
case REQUEST_CHECK_SETTINGS:
switch (resultCode) {
case Activity.RESULT_OK:
// All required changes were successfully made
GetUserLocation();//FINALLY YOUR OWN METHOD TO GET YOUR USER LOCATION HERE
break;
case Activity.RESULT_CANCELED:
// The user was asked to change settings, but chose not to
break;
default:
break;
}
break;
}
}
Remember to Implement these in your class:
public class MyClass extends AppCompatActivity implements
ActivityCompat.OnRequestPermissionsResultCallback,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener{
protected static final int REQUEST_CHECK_SETTINGS = 0x1;
/*
your code i.e. with the above code etc....
*/
}
Good explanation here in this Google developer link.
Cheers!
Solution 3
As now in 2020
Latest , Best and shortest way is
public boolean isLocationEnabled()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
// This is new method provided in API 28
LocationManager lm = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
return lm.isLocationEnabled();
} else {
// This is Deprecated in API 28
int mode = Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
Settings.Secure.LOCATION_MODE_OFF);
return (mode != Settings.Secure.LOCATION_MODE_OFF);
}
}
Solution 4
You can also check like this:
LocationManager service = (LocationManager) getSystemService(LOCATION_SERVICE);
boolean isEnabled = service.isProviderEnabled(LocationManager.GPS_PROVIDER);
![Josu Garcia de Albizu](https://i.stack.imgur.com/j1bxU.png?s=256&g=1)
Josu Garcia de Albizu
Mobile SW Engineer. Facing the life creatively
Updated on July 05, 2022Comments
-
Josu Garcia de Albizu almost 2 years
According to the Android documentation:
The Google Location Services API, part of Google Play Services, provides a more powerful, high-level framework that automatically handles location providers, user movement, and location accuracy than the platform location API in
android.location
.But using the fused location provider (from location APIs in Google Play services) I do not know how to check if the user has the location enabled or disabled.
Using the old
android.location
it was easy:locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
But I don´t want to use both Google Play Services fused location provider and old android location.
How could I check if the location is enabled by the user using the Fused Location Provider?
Thanks in advance.
-
S bruce over 8 yearsI have edited my answer by adding code and another useful link.
-
Mogsdad over 8 yearsLooks good - I did a bit of cleanup and fixed your links, but otherwise that's a solid answer. Thanks for taking the advice, and good luck!
-
Nabeel K about 8 yearswhere is LocationByGPS.this ?
-
scai over 7 yearsYou even fixed several errors contained in the official Android Developer tutorial, awesome.
-
scai over 7 years@NabeelK This is the outer class, probably your SomethingActivity class. See the official tutorial.
-
mehmet over 7 yearsit is clear answer. but it look check location only in create method. is that possible to check this in every time in app. or where sould be added to check everytime location enable or not. if not show dialog
-
S bruce over 7 yearsThe example code here is to help you see how the concept works. You can always customise as needed in your implementation. If you are always gonna need to implement after onCreate() then you can create and call it from a custom method or class.
-
Akash Bisariya almost 7 yearsI need to check these setting on a background service.How to get result on service for this.
-
Ravi Yadav over 6 yearsI have implemented SettingsClient here :github.com/askfortricks/FusedLocationProviderClient as the SettingsApi is deprecated now.
-
Aliton Oliveira over 4 yearsHow to enable gps without redirecting the user to configurations? I mean, pop up an alertDialog or snackBar to enable GPS when user clicks on "OK" button.
-
TeKo almost 4 years
LocationManagerCompat.isLocationEnabled(context.getSystemService(Context.LOCATION_SERVICE) as LocationManager)
So you don't have to check the SDK Version.