title: Changing Location Settings
body: <p>I am working on an application that needs user's location. I cannot get the location if the user turn the location setting off. Therefore, I follow the android training to prompt the location setting dialog to let the user turn the location setting on: 
  <a href="https://developer.android.com/training/location/change-location-settings.html" rel="nofollow noreferrer">https://developer.android.com/training/location/change-location-settings.html</a></p>
  
  <pre><code>public static void settingsRequest(final Activity activity) {
          LocationRequest mLocationRequest = new LocationRequest();
          mLocationRequest.setInterval(10000);
          mLocationRequest.setFastestInterval(5000);
          mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
  
          LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
                  .addLocationRequest(mLocationRequest);
          builder.setAlwaysShow(true);
  
          SettingsClient client = LocationServices.getSettingsClient(activity);
          Task&lt;LocationSettingsResponse&gt; task = client.checkLocationSettings(builder.build());
  
          task.addOnSuccessListener(activity, new OnSuccessListener&lt;LocationSettingsResponse&gt;() {
              @Override
              public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                  // All location settings are satisfied. The client can initialize
                  // location requests here.
                  // ...
              }
          });
  
          task.addOnFailureListener(activity, new OnFailureListener() {
              @Override
              public void onFailure(@NonNull Exception e) {
                  int statusCode = ((ApiException) e).getStatusCode();
                  switch (statusCode) {
                      case CommonStatusCodes.RESOLUTION_REQUIRED:
                          // Location settings are not satisfied, but this can be fixed
                          // by showing the user a dialog.
                          try {
                              // Show the dialog by calling startResolutionForResult(),
                              // and check the result in onActivityResult().
                              ResolvableApiException resolvable = (ResolvableApiException) e;
                              resolvable.startResolutionForResult(activity,
                                      REQUEST_CHECK_SETTINGS);
                          } catch (IntentSender.SendIntentException sendEx) {
                              // 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;
                  }
              }
          });
      }
  </code></pre>
  
  <p>If the location setting is off, the dialog is shown but the problem is that when user touches outside the dialog, the dialog disappears. How can I prevent that? (sth like setCanceledOnTouchOutside(false) )?</p>
  
  <p>note that location setting dialog is not my custom dialog. So I cannot set setCancelable(false)
  The dialog shows when these code is exccuted</p>
  
  <pre><code>// Show the dialog by calling startResolutionForResult(),
                              // and check the result in onActivityResult().
                              ResolvableApiException resolvable = (ResolvableApiException) e;
                              resolvable.startResolutionForResult(activity,
                                      REQUEST_CHECK_SETTINGS);
  </code></pre>