title: Map application isn't updating location until Google maps location has been updated
body: <p>I get the current location in my app only after the google maps is updated first, whereas if I don't update the Google maps, my app isn't able to get the current location.Here's my Java code:   </p>
  
  <p>MapsActivity.java</p>
  
  <pre><code>import android.location.Location;
  import android.support.v4.app.FragmentActivity;
  import android.os.Bundle;
  import android.view.View;
  import android.widget.ImageButton;
  import android.widget.Toast;
  import com.google.android.gms.common.ConnectionResult;
  import com.google.android.gms.common.api.GoogleApiClient;
  import com.google.android.gms.location.LocationServices;
  import com.google.android.gms.maps.CameraUpdateFactory;
  import com.google.android.gms.maps.GoogleMap;
  import com.google.android.gms.maps.OnMapReadyCallback;
  import com.google.android.gms.maps.SupportMapFragment;
  import com.google.android.gms.maps.model.LatLng;
  import com.google.android.gms.maps.model.Marker;
  import com.google.android.gms.maps.model.MarkerOptions;
  
  public class MapsActivity extends FragmentActivity implements
      OnMapReadyCallback,
      GoogleApiClient.ConnectionCallbacks,
      GoogleApiClient.OnConnectionFailedListener,
      GoogleMap.OnMarkerDragListener,
      GoogleMap.OnMapLongClickListener,
      View.OnClickListener{
  
  //Our Map
  private GoogleMap mMap;
  
  //To store longitude and latitude from map
  private double longitude;
  private double latitude;
  
  //Buttons
  private ImageButton buttonSave;
  private ImageButton buttonCurrent;
  private ImageButton buttonView;
  
  //Google ApiClient
  private GoogleApiClient googleApiClient;
  
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_maps);
      // 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);
  
      //Initializing googleapi client
      googleApiClient = new GoogleApiClient.Builder(this)
              .addConnectionCallbacks(this)
              .addOnConnectionFailedListener(this)
              .addApi(LocationServices.API)
              .build();
  
      //Initializing views and adding onclick listeners
      buttonSave = (ImageButton) findViewById(R.id.buttonSave);
      buttonCurrent = (ImageButton) findViewById(R.id.buttonCurrent);
      buttonView = (ImageButton) findViewById(R.id.buttonView);
      buttonSave.setOnClickListener(this);
      buttonCurrent.setOnClickListener(this);
      buttonView.setOnClickListener(this);
  }
  
  @Override
  protected void onStart() {
      googleApiClient.connect();
      super.onStart();
  }
  
  @Override
  protected void onStop() {
      googleApiClient.disconnect();
      super.onStop();
  }
  
  //Getting current location
  private void getCurrentLocation() {
      mMap.clear();
      //Creating a location object
      Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
      if (location != null) {
          //Getting longitude and latitude
          longitude = location.getLongitude();
          latitude = location.getLatitude();
  
          //moving the map to location
          moveMap();
      }
  }
  
  //Function to move the map
  private void moveMap() {
      //String to display current latitude and longitude
      String msg = latitude + ", "+longitude;
  
      //Creating a LatLng Object to store Coordinates
      LatLng latLng = new LatLng(latitude, longitude);
  
      //Adding marker to map
      mMap.addMarker(new MarkerOptions()
              .position(latLng) //setting position
              .draggable(true) //Making the marker draggable
              .title("Current Location")); //Adding a title
  
      //Moving the camera
      mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
  
      //Animating the camera
      mMap.animateCamera(CameraUpdateFactory.zoomTo(15));
  
      //Displaying current coordinates in toast
      Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
  }
  
  @Override
  public void onMapReady(GoogleMap googleMap) {
      mMap = googleMap;
      LatLng latLng = new LatLng(-34, 151);
      mMap.addMarker(new MarkerOptions().position(latLng).draggable(true));
      mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
      mMap.setOnMarkerDragListener(this);
      mMap.setOnMapLongClickListener(this);
  }
  
  @Override
  public void onConnected(Bundle bundle) {
      getCurrentLocation();
  }
  
  @Override
  public void onConnectionSuspended(int i) {
  
  }
  
  @Override
  public void onConnectionFailed(ConnectionResult connectionResult) {
  
  }
  
  @Override
  public void onMapLongClick(LatLng latLng) {
      //Clearing all the markers
      mMap.clear();
  
      //Adding a new marker to the current pressed position
      mMap.addMarker(new MarkerOptions()
              .position(latLng)
              .draggable(true));
  }
  
  @Override
  public void onMarkerDragStart(Marker marker) {
  
  }
  
  @Override
  public void onMarkerDrag(Marker marker) {
  
  }
  
  @Override
  public void onMarkerDragEnd(Marker marker) {
      //Getting the coordinates
      latitude = marker.getPosition().latitude;
      longitude = marker.getPosition().longitude;
  
      //Moving the map
      moveMap();
  }
  
  @Override
  public void onClick(View v) {
      if(v == buttonCurrent){
          getCurrentLocation();
          moveMap();
      }}}
  </code></pre>
  
  <p>Here Is My Manifest.</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.takecare"&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt;
  &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&gt;
  &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
  
  &lt;application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme"&gt;
  
      &lt;!--
           The API key for Google Maps-based APIs is defined as a string resource.
           (See the file "res/values/google_maps_api.xml").
           Note that the API key is linked to the encryption key used to sign the APK.
           You need a different API key for each encryption key, including the release key that is used to
           sign the APK for publishing.
           You can define the keys for the debug and release targets in src/debug/ and src/release/. 
      --&gt;
      &lt;meta-data
          android:name="com.google.android.geo.API_KEY"
          android:value="@string/google_maps_key" /&gt;
  
      &lt;activity
          android:name=".MapsActivity"
          android:label="@string/title_activity_maps"&gt;
          &lt;intent-filter&gt;
              &lt;action android:name="android.intent.action.MAIN" /&gt;
  
              &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
          &lt;/intent-filter&gt;
      &lt;/activity&gt;
  &lt;/application&gt;
  </code></pre>
  
  <p></p>
  
  <p>Here Is My App Gradle dependencies</p>
  
  <pre><code>compile 'com.android.support:appcompat-v7:24.1.1'
  compile 'com.android.support:design:24.1.1'
  compile 'com.android.support:support-v4:24.1.1'
  compile 'com.google.android.gms:play-services:9.4.0'
  compile 'com.google.android.gms:play-services-location:9.4.0'
  </code></pre>