Stay organized with collections Save and categorize content based on your preferences.
public class SettingsClient extends GoogleApi<Api.ApiOptions.NoOptions>

The main entry point for interacting with the location settings-enabler APIs.

This API makes it easy for an app to ensure that the device's system settings are properly configured for the app's location needs.

When making a request to location services, the device's system settings may be in a state that prevents an app from obtaining the location data that it needs. For example, GPS or Wi-Fi scanning may be switched off. This intent makes it easy to:

  • Determine if the relevant system settings are enabled on the device to carry out the desired location request.
  • Optionally, invoke a dialog that allows the user to enable the necessary location settings with a single tap.

To use this API, first create a LocationSettingsRequest.Builder and add all of the LocationRequests that the app will be using:

 LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()

If the client is using BLE scans to derive location, it can request that BLE be enabled by calling LocationSettingsRequest.Builder.setNeedBle(boolean):


Then check whether current location settings are satisfied:

 Task<LocationSettingsResponse> result =

When the Task completes, the client can check the location settings by looking at the status code from the LocationSettingsResponse object. The client can also retrieve the current state of the relevant location settings by calling LocationSettingsResponse.getLocationSettingsStates():

 task.addOnCompleteListener(new OnCompleteListener<LocationSettingsResponse>() {
     public void onComplete(Task<LocationSettingsResponse> task) {
         try {
             LocationSettingsResponse response = task.getResult(ApiException.class);
             // All location settings are satisfied. The client can initialize location
             // requests here.
         } catch (ApiException exception) {
             switch (exception.getStatusCode()) {
                 case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                     // Location settings are not satisfied. But could be fixed by showing the
                     // user a dialog.
                     try {
                         // Cast to a resolvable exception.
                         ResolvableApiException resolvable = (ResolvableApiException) exception;
                         // Show the dialog by calling startResolutionForResult(),
                         // and check the result in onActivityResult().
                     } catch (SendIntentException e) {
                         // Ignore the error.
                     } catch (ClassCastException e) {
                         // Ignore, should be an impossible error.
                 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.

If the status code is CommonStatusCodes.RESOLUTION_REQUIRED, the client can call ResolvableApiException.startResolutionForResult(Activity, int) to bring up a dialog, asking for the user's permission to modify the location settings to satisfy those requests. The result of the dialog will be returned via Activity.onActivityResult(int, int, Intent). If the client is interested in which location providers are available, it can retrieve a LocationSettingsStates from the Intent by calling LocationSettingsStates.fromIntent(Intent):

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
     final LocationSettingsStates states = LocationSettingsStates.fromIntent(intent);
     switch (requestCode) {
             switch (resultCode) {
                 case Activity.RESULT_OK:
                     // All required changes were successfully made
                 case Activity.RESULT_CANCELED:
                     // The user was asked to change settings, but chose not to

Public Method Summary

checkLocationSettings(LocationSettingsRequest locationSettingsRequest)
Checks if the relevant system settings are enabled on the device to carry out the desired location requests.

Inherited Method Summary

Public Methods

public Task<LocationSettingsResponse> checkLocationSettings (LocationSettingsRequest locationSettingsRequest)

Checks if the relevant system settings are enabled on the device to carry out the desired location requests.

locationSettingsRequest an object that contains all the location requirements that the client is interested in.