title: How to enable location setting through allow button
body: <p>I am creating an app, i want to turn on location settings when press on allow button. when my app starts first it works properly going to the current location but when i close the app and start again it not get on to the current location. So please help me using my source code.....</p>
  
  <pre><code>public class MapsActivity extends FragmentActivity implements OnMapReadyCallback,
      GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,
      LocationListener {
  
  private GoogleMap mMap;
  GoogleApiClient mGoogleApiClient;
  Location mLastLocation;
  Marker mCurrLocationMarker;
  LocationRequest mLocationRequest;
  protected static final int REQUEST_CHECK_SETTINGS = 0x1;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_maps);
  
      if (android.os.Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) {
          checkLocationPermission();
      }
      // Obtain the SupportMapFragment and get notified when the map is ready to be used.
      SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
              .findFragmentById(R.id.map);
      mapFragment.getMapAsync(this);
  
      createLocationRequest();
  }
  
  private void createLocationRequest() {
      if (mGoogleApiClient == null) {
          mGoogleApiClient = new GoogleApiClient.Builder(getBaseContext())
                  .addApi(LocationServices.API)
                  .addConnectionCallbacks(this)
                  .addOnConnectionFailedListener(this).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&lt;LocationSettingsResult&gt; result =
                  LocationServices.SettingsApi.checkLocationSettings(mGoogleApiClient, builder.build());
  
          result.setResultCallback(new ResultCallback&lt;LocationSettingsResult&gt;() {
              @Override
              public void onResult(LocationSettingsResult result) {
                  final Status status = result.getStatus();
                  final LocationSettingsStates states =
                          result.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 this can be fixed
                          // by showing the user a dialog.
                          try {
                              // Show the dialog by calling startResolutionForResult(),
                              // and check the result in onActivityResult().
                              status.startResolutionForResult(
                                      MapsActivity.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
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      switch (requestCode) {
  // Check for the integer request code originally supplied to startResolutionForResult().
          case REQUEST_CHECK_SETTINGS:
              switch (resultCode) {
                  case Activity.RESULT_OK:
                      startLocationUpdates();
                      break;
                  case Activity.RESULT_CANCELED:
                      //settingsrequest();//keep asking if imp or do whatever
                      break;
              }
              break;
      }
  }
  
  private void startLocationUpdates() {
      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &amp;&amp; ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
          // TODO: Consider calling
          //    ActivityCompat#requestPermissions
          // here to request the missing permissions, and then overriding
          //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
          //                                          int[] grantResults)
          // to handle the case where the user grants the permission. See the documentation
          // for ActivityCompat#requestPermissions for more details.
          return;
      }
      LocationServices.FusedLocationApi.requestLocationUpdates(
              mGoogleApiClient, mLocationRequest, this);
  }
  
  
  public static final int MY_PERMISSIONS_REQUEST_LOCATION = 99;
  public boolean checkLocationPermission() {
      if(ContextCompat.checkSelfPermission(this,
              Manifest.permission.ACCESS_FINE_LOCATION)
              != PackageManager.PERMISSION_GRANTED){
  
          if(ActivityCompat.shouldShowRequestPermissionRationale(this,
                  Manifest.permission.ACCESS_FINE_LOCATION)){
  
              ActivityCompat.requestPermissions(this,
                      new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                      MY_PERMISSIONS_REQUEST_LOCATION);
          }else {
              ActivityCompat.requestPermissions(this,
                      new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                      MY_PERMISSIONS_REQUEST_LOCATION);
          }
          return false;
      }else{
          return true;
      }
  
  }
  
  
  @Override
  public void onConnected(Bundle bundle) {
  
      /*mLocationRequest = new LocationRequest();
      mLocationRequest.setInterval(1000);
      mLocationRequest.setFastestInterval(1000);
      mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
  
      if (ContextCompat.checkSelfPermission(this,
              Manifest.permission.ACCESS_FINE_LOCATION)==PackageManager.PERMISSION_GRANTED){
  //            LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this);
      }*/
      if(checkLocationPermission()){
          startLocationUpdates();
          LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest,this);
      }
  
  }
  
  @Override
  public void onConnectionSuspended(int i) {
  
  }
  
  @Override
  public void onLocationChanged(Location location) {
      mLastLocation = location;
      if(mCurrLocationMarker != null){
          mCurrLocationMarker.remove();
      }
  
      LatLng latLng = new LatLng(location.getLatitude(),location.getLongitude());
      MarkerOptions markerOption = new MarkerOptions();
      markerOption.position(latLng);
      markerOption.title("Current Position");
      markerOption.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
      mCurrLocationMarker = mMap.addMarker(markerOption);
  
      mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
      mMap.animateCamera(CameraUpdateFactory.zoomTo(11));
      CameraPosition cameraPosition = new CameraPosition.Builder().target(latLng).zoom(14).build();
  
      mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
  
      if(mGoogleApiClient != null){
          LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,this);
      }
  
  }
  
  @Override
  public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  
  }
  
  @Override
  public void onMapReady(GoogleMap googleMap) {
      mMap = googleMap;
  
  
      if(Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M){
          if (ContextCompat.checkSelfPermission(this,
                  Manifest.permission.ACCESS_FINE_LOCATION)
                  ==PackageManager.PERMISSION_GRANTED){
              buildGoogleApiClient();
              mMap.setMyLocationEnabled(true);
  
          }
      }
      else {
          buildGoogleApiClient();
          mMap.setMyLocationEnabled(true);
      }
  
  }
  
  protected synchronized void buildGoogleApiClient() {
      mGoogleApiClient = new GoogleApiClient.Builder(this)
              .addConnectionCallbacks(this)
              .addOnConnectionFailedListener(this)
              .addApi(LocationServices.API)
              .build();
      mGoogleApiClient.connect();
  }
  
  @Override
  public void onRequestPermissionsResult(int requestCode,
                                         String permissions[], int[] grantResult){
      switch (requestCode){
          case MY_PERMISSIONS_REQUEST_LOCATION: {
  
              if(grantResult.length &gt; 0
                      &amp;&amp; grantResult[0] == PackageManager.PERMISSION_GRANTED){
                  if(ContextCompat.checkSelfPermission(this,
                          Manifest.permission.ACCESS_FINE_LOCATION)
                          == PackageManager.PERMISSION_GRANTED) {
                      if(mGoogleApiClient == null){
                          buildGoogleApiClient();
                      }
                      mMap.setMyLocationEnabled(true);
                  }
  
              }else {
                  Toast.makeText(this, "permisison denied", Toast.LENGTH_LONG).show();
              }
              return;
          }
  
      }
  }
  }  
  </code></pre>
  
  <p>Please help me...
  Thanks </p>