title: How to continuously move marker same as google default current location marker on google map android
body: <pre><code>  package com.jaygandhi.map3;
  
   import android.Manifest;
   import android.content.pm.PackageManager;
   import android.location.Location;
   import android.os.Build;
   import android.support.v4.app.ActivityCompat;
   import android.support.v4.app.FragmentActivity;
   import android.os.Bundle;
   import android.support.v4.content.ContextCompat;
   import android.support.v7.app.AppCompatActivity;
   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.LocationListener;
   import com.google.android.gms.location.LocationRequest;
   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.BitmapDescriptorFactory;
   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 AppCompatActivity
          implements OnMapReadyCallback,
          GoogleApiClient.ConnectionCallbacks,
          GoogleApiClient.OnConnectionFailedListener,
          LocationListener
  {
  
      GoogleMap mGoogleMap;
      SupportMapFragment mapFrag;
      LocationRequest mLocationRequest;
      GoogleApiClient mGoogleApiClient;
      Location mLastLocation;
      Marker mCurrLocationMarker;
  
      @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();
          }
  
          mapFrag = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
          mapFrag.getMapAsync(this);
      }
  
      @Override
      public void onPause() {
          super.onPause();
  
          //stop location updates when Activity is no longer active
          if (mGoogleApiClient != null) {
              LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
          }
      }
  
      @Override
      public void onMapReady(GoogleMap googleMap)
      {
          mGoogleMap=googleMap;
          mGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
  
          //Initialize Google Play Services
          if (android.os.Build.VERSION.SDK_INT &gt;= Build.VERSION_CODES.M) {
              if (ContextCompat.checkSelfPermission(this,
                      Manifest.permission.ACCESS_FINE_LOCATION)
                      == PackageManager.PERMISSION_GRANTED) {
                  buildGoogleApiClient();
                  mGoogleMap.setMyLocationEnabled(true);
              }
          }
          else {
              buildGoogleApiClient();
              mGoogleMap.setMyLocationEnabled(true);
          }
      }
  
      protected synchronized void buildGoogleApiClient() {
          mGoogleApiClient = new GoogleApiClient.Builder(this)
                  .addConnectionCallbacks(this)
                  .addOnConnectionFailedListener(this)
                  .addApi(LocationServices.API)
                  .build();
          mGoogleApiClient.connect();
      }
  
      @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);
  
          }
      }
  
      @Override
      public void onConnectionSuspended(int i) {}
  
      @Override
      public void onConnectionFailed(ConnectionResult connectionResult) {}
  
      @Override
      public void onLocationChanged(Location location)
      {
          mLastLocation = location;
          if (mCurrLocationMarker != null)
          {
              mCurrLocationMarker.remove();
          }
  
          //Place current location marker
          LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude());
          MarkerOptions markerOptions = new MarkerOptions();
          markerOptions.position(latLng);
          markerOptions.title("Current Position");
          markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
          mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);
  
          //move map camera
          mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
          mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));
  
          if (mGoogleApiClient != null)
          {
              LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, 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) {
  
              // Should we show an explanation?
              if (ActivityCompat.shouldShowRequestPermissionRationale(this,
                      Manifest.permission.ACCESS_FINE_LOCATION)) {
  
                  // Show an expanation to the user *asynchronously* -- don't block
                  // this thread waiting for the user's response! After the user
                  // sees the explanation, try again to request the permission.
  
                  //Prompt the user once explanation has been shown
                  ActivityCompat.requestPermissions(this,
                          new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                          MY_PERMISSIONS_REQUEST_LOCATION);
  
  
              } else {
                  // No explanation needed, we can request the permission.
                  ActivityCompat.requestPermissions(this,
                          new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
                          MY_PERMISSIONS_REQUEST_LOCATION);
              }
              return false;
          } else {
              return true;
          }
      }
  
      @Override
      public void onRequestPermissionsResult(int requestCode,
                                             String permissions[], int[] grantResults) {
          switch (requestCode) {
              case MY_PERMISSIONS_REQUEST_LOCATION: {
                  // If request is cancelled, the result arrays are empty.
                  if (grantResults.length &gt; 0
                          &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  
                      // permission was granted, yay! Do the
                      // contacts-related task you need to do.
                      if (ContextCompat.checkSelfPermission(this,
                              Manifest.permission.ACCESS_FINE_LOCATION)
                              == PackageManager.PERMISSION_GRANTED) {
  
                          if (mGoogleApiClient == null) {
                              buildGoogleApiClient();
                          }
                          mGoogleMap.setMyLocationEnabled(true);
                      }
  
                  } else {
  
                      // permission denied, boo! Disable the
                      // functionality that depends on this permission.
                      Toast.makeText(this, "permission denied", Toast.LENGTH_LONG).show();
                  }
                  return;
              }
  
              // other 'case' lines to check for other
              // permissions this app might request
          }
      }
  
  }
  </code></pre>
  
  <p>This code I get from different answer but it did not update in real time. </p>
  
  <p>I tried this code but when maps loads first time marker show current location but when my location is changed marker do not move to new location.</p>