How to continuously move marker same as google default current location marker on google map android












3















  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 >= 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 >= 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 > 0
&& 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
}
}

}


This code I get from different answer but it did not update in real time.



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.










share|improve this question





























    3















      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 >= 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 >= 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 > 0
    && 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
    }
    }

    }


    This code I get from different answer but it did not update in real time.



    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.










    share|improve this question



























      3












      3








      3


      1






        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 >= 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 >= 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 > 0
      && 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
      }
      }

      }


      This code I get from different answer but it did not update in real time.



      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.










      share|improve this question
















        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 >= 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 >= 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 > 0
      && 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
      }
      }

      }


      This code I get from different answer but it did not update in real time.



      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.







      android google-maps google-maps-api-3 google-maps-markers






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Apr 17 '16 at 7:37









      Daniel Nugent

      34.2k1082113




      34.2k1082113










      asked Apr 16 '16 at 15:33









      jay gandhijay gandhi

      21115




      21115
























          4 Answers
          4






          active

          oldest

          votes


















          4














          You just need to remove the call to removeLocationUpdates() in onLocationChanged():



          @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));

          //Remove this code:
          //if (mGoogleApiClient != null)
          //{
          //LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
          //}
          }


          Also add an onResume() Override and re-register for location updates if the Google API Client is not null:



          @Override
          public void onResume() {
          super.onResume();
          if (mGoogleApiClient != null &&
          ContextCompat.checkSelfPermission(this,
          Manifest.permission.ACCESS_FINE_LOCATION)
          == PackageManager.PERMISSION_GRANTED) {
          LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
          }
          }


          The original code was designed to only get one location, and then remove location updates after the first location comes in.



          Bear in mind that keeping a location listener active for long periods will cause more battery drain.



          Also note that for testing purposes, you can set more aggressive values in the location request:



          @Override
          public void onConnected(Bundle bundle)
          {
          mLocationRequest = new LocationRequest();
          mLocationRequest.setInterval(1000);
          mLocationRequest.setFastestInterval(1000);
          mLocationRequest.setSmallestDisplacement(0.1F); //added
          mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); //changed
          if (ContextCompat.checkSelfPermission(this,
          Manifest.permission.ACCESS_FINE_LOCATION)
          == PackageManager.PERMISSION_GRANTED)
          {

          LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

          }
          }


          Making the above changes, this code works for me:



          public class MapLocationActivity 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_main);

          if (android.os.Build.VERSION.SDK_INT >= 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 onResume() {
          super.onResume();
          if (mGoogleApiClient != null &&
          ContextCompat.checkSelfPermission(this,
          Manifest.permission.ACCESS_FINE_LOCATION)
          == PackageManager.PERMISSION_GRANTED) {
          LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, 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 >= 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.setSmallestDisplacement(0.1f);
          mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_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)
          {
          Toast.makeText(this, "Location Changed " + location.getLatitude()
          + location.getLongitude(), Toast.LENGTH_LONG).show();

          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_MAGENTA));
          mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

          //move map camera
          mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
          mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));


          }

          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 > 0
          && 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
          }
          }

          }





          share|improve this answer


























          • Sir this is not working.... Can i get your email ?

            – jay gandhi
            Apr 16 '16 at 16:16











          • sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

            – jay gandhi
            Apr 16 '16 at 16:40











          • google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

            – jay gandhi
            Apr 16 '16 at 16:55








          • 1





            @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

            – Daniel Nugent
            Feb 23 '17 at 19:18






          • 1





            @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

            – Daniel Nugent
            Feb 23 '17 at 19:32



















          1














          Here is a Simple method of updating marker as soon as the location changes!
          As we know the onLocationChanged() methode is called when ever there is a change in location. And here we basically set the marker to the current position.
          Follow the process given bellow. That works for me and I hope it will do for you as well :)



          @RequiresApi(api = Build.VERSION_CODES.N)//This line requires if you are using 25/26 API
          @Override
          public void onLocationChanged(Location location) {
          //Removing previously added markers here!
          mMap.clear();
          Log.d(TAG, "Firing onLocationChanged..............................................");
          mCurrentLocation = location;
          mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());

          updateUI();
          }


          We can simply clear previously added markers using the mMap.clear() where mMap is the GoogleMap object and is also called and assigned in onMapReady() methode. Then we can get current location and set marker in an external method which is here: updateUI();



          private void updateUI() {
          Log.d(TAG, "UI update initiated .............");
          if (null != mCurrentLocation) {

          LatLng allLatLang = new LatLng(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude());

          MarkerOptions markerOptions = new MarkerOptions();
          markerOptions.position(allLatLang);
          markerOptions.title("USER NAME");
          markerOptions.snippet("Users Basic Information");
          markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
          locationMarker = mMap.addMarker(markerOptions);

          //You can add this lines if you want to show the realtime data change on any TextView
          String lat = String.valueOf(mCurrentLocation.getLatitude());
          String lng = String.valueOf(mCurrentLocation.getLongitude());
          locationUpdate.setText("At Time: " + mLastUpdateTime + "n" +
          "Latitude: " + lat + "n" +
          "Longitude: " + lng + "n" +
          "Accuracy: " + mCurrentLocation.getAccuracy() + "n" +
          "Provider: " + mCurrentLocation.getProvider());
          } else {
          Log.d(TAG, "location is null ...............");
          }
          }


          So, when ever the location is changing, the onLocationChanged() method is called and then we are removing the existing markers and setting it again to the new position.
          Hope this will work out. Let me know if it helps.
          Thank you.!






          share|improve this answer

































            0














            Implement OnCameraMoveListener and set new position for existing marker in onCameraMove



            @Override
            public void onCameraMove() {

            mMarker.setPosition(mMap.getCameraPosition().target);

            }





            share|improve this answer































              0














              Inside your onLocationChanged try like this



                      mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocationLatLng, 18));
              if(myMarker == null) {
              myMarker = mMap.addMarker(new MarkerOptions().position(currentLocationLatLng)
              .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
              } else {
              myMarker.setPosition(currentLocationLatLng);
              }


              This is the better way to move existing marker then clear and create it again.






              share|improve this answer























                Your Answer






                StackExchange.ifUsing("editor", function () {
                StackExchange.using("externalEditor", function () {
                StackExchange.using("snippets", function () {
                StackExchange.snippets.init();
                });
                });
                }, "code-snippets");

                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "1"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: true,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: 10,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });














                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f36666121%2fhow-to-continuously-move-marker-same-as-google-default-current-location-marker-o%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                4 Answers
                4






                active

                oldest

                votes








                4 Answers
                4






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                4














                You just need to remove the call to removeLocationUpdates() in onLocationChanged():



                @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));

                //Remove this code:
                //if (mGoogleApiClient != null)
                //{
                //LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
                //}
                }


                Also add an onResume() Override and re-register for location updates if the Google API Client is not null:



                @Override
                public void onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
                }
                }


                The original code was designed to only get one location, and then remove location updates after the first location comes in.



                Bear in mind that keeping a location listener active for long periods will cause more battery drain.



                Also note that for testing purposes, you can set more aggressive values in the location request:



                @Override
                public void onConnected(Bundle bundle)
                {
                mLocationRequest = new LocationRequest();
                mLocationRequest.setInterval(1000);
                mLocationRequest.setFastestInterval(1000);
                mLocationRequest.setSmallestDisplacement(0.1F); //added
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); //changed
                if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED)
                {

                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

                }
                }


                Making the above changes, this code works for me:



                public class MapLocationActivity 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_main);

                if (android.os.Build.VERSION.SDK_INT >= 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 onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, 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 >= 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.setSmallestDisplacement(0.1f);
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_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)
                {
                Toast.makeText(this, "Location Changed " + location.getLatitude()
                + location.getLongitude(), Toast.LENGTH_LONG).show();

                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_MAGENTA));
                mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

                //move map camera
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));


                }

                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 > 0
                && 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
                }
                }

                }





                share|improve this answer


























                • Sir this is not working.... Can i get your email ?

                  – jay gandhi
                  Apr 16 '16 at 16:16











                • sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:40











                • google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:55








                • 1





                  @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

                  – Daniel Nugent
                  Feb 23 '17 at 19:18






                • 1





                  @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

                  – Daniel Nugent
                  Feb 23 '17 at 19:32
















                4














                You just need to remove the call to removeLocationUpdates() in onLocationChanged():



                @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));

                //Remove this code:
                //if (mGoogleApiClient != null)
                //{
                //LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
                //}
                }


                Also add an onResume() Override and re-register for location updates if the Google API Client is not null:



                @Override
                public void onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
                }
                }


                The original code was designed to only get one location, and then remove location updates after the first location comes in.



                Bear in mind that keeping a location listener active for long periods will cause more battery drain.



                Also note that for testing purposes, you can set more aggressive values in the location request:



                @Override
                public void onConnected(Bundle bundle)
                {
                mLocationRequest = new LocationRequest();
                mLocationRequest.setInterval(1000);
                mLocationRequest.setFastestInterval(1000);
                mLocationRequest.setSmallestDisplacement(0.1F); //added
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); //changed
                if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED)
                {

                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

                }
                }


                Making the above changes, this code works for me:



                public class MapLocationActivity 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_main);

                if (android.os.Build.VERSION.SDK_INT >= 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 onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, 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 >= 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.setSmallestDisplacement(0.1f);
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_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)
                {
                Toast.makeText(this, "Location Changed " + location.getLatitude()
                + location.getLongitude(), Toast.LENGTH_LONG).show();

                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_MAGENTA));
                mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

                //move map camera
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));


                }

                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 > 0
                && 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
                }
                }

                }





                share|improve this answer


























                • Sir this is not working.... Can i get your email ?

                  – jay gandhi
                  Apr 16 '16 at 16:16











                • sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:40











                • google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:55








                • 1





                  @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

                  – Daniel Nugent
                  Feb 23 '17 at 19:18






                • 1





                  @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

                  – Daniel Nugent
                  Feb 23 '17 at 19:32














                4












                4








                4







                You just need to remove the call to removeLocationUpdates() in onLocationChanged():



                @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));

                //Remove this code:
                //if (mGoogleApiClient != null)
                //{
                //LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
                //}
                }


                Also add an onResume() Override and re-register for location updates if the Google API Client is not null:



                @Override
                public void onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
                }
                }


                The original code was designed to only get one location, and then remove location updates after the first location comes in.



                Bear in mind that keeping a location listener active for long periods will cause more battery drain.



                Also note that for testing purposes, you can set more aggressive values in the location request:



                @Override
                public void onConnected(Bundle bundle)
                {
                mLocationRequest = new LocationRequest();
                mLocationRequest.setInterval(1000);
                mLocationRequest.setFastestInterval(1000);
                mLocationRequest.setSmallestDisplacement(0.1F); //added
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); //changed
                if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED)
                {

                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

                }
                }


                Making the above changes, this code works for me:



                public class MapLocationActivity 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_main);

                if (android.os.Build.VERSION.SDK_INT >= 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 onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, 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 >= 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.setSmallestDisplacement(0.1f);
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_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)
                {
                Toast.makeText(this, "Location Changed " + location.getLatitude()
                + location.getLongitude(), Toast.LENGTH_LONG).show();

                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_MAGENTA));
                mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

                //move map camera
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));


                }

                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 > 0
                && 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
                }
                }

                }





                share|improve this answer















                You just need to remove the call to removeLocationUpdates() in onLocationChanged():



                @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));

                //Remove this code:
                //if (mGoogleApiClient != null)
                //{
                //LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);
                //}
                }


                Also add an onResume() Override and re-register for location updates if the Google API Client is not null:



                @Override
                public void onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);
                }
                }


                The original code was designed to only get one location, and then remove location updates after the first location comes in.



                Bear in mind that keeping a location listener active for long periods will cause more battery drain.



                Also note that for testing purposes, you can set more aggressive values in the location request:



                @Override
                public void onConnected(Bundle bundle)
                {
                mLocationRequest = new LocationRequest();
                mLocationRequest.setInterval(1000);
                mLocationRequest.setFastestInterval(1000);
                mLocationRequest.setSmallestDisplacement(0.1F); //added
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); //changed
                if (ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED)
                {

                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this);

                }
                }


                Making the above changes, this code works for me:



                public class MapLocationActivity 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_main);

                if (android.os.Build.VERSION.SDK_INT >= 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 onResume() {
                super.onResume();
                if (mGoogleApiClient != null &&
                ContextCompat.checkSelfPermission(this,
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED) {
                LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, 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 >= 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.setSmallestDisplacement(0.1f);
                mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_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)
                {
                Toast.makeText(this, "Location Changed " + location.getLatitude()
                + location.getLongitude(), Toast.LENGTH_LONG).show();

                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_MAGENTA));
                mCurrLocationMarker = mGoogleMap.addMarker(markerOptions);

                //move map camera
                mGoogleMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
                mGoogleMap.animateCamera(CameraUpdateFactory.zoomTo(11));


                }

                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 > 0
                && 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
                }
                }

                }






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Apr 16 '16 at 18:47

























                answered Apr 16 '16 at 16:07









                Daniel NugentDaniel Nugent

                34.2k1082113




                34.2k1082113













                • Sir this is not working.... Can i get your email ?

                  – jay gandhi
                  Apr 16 '16 at 16:16











                • sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:40











                • google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:55








                • 1





                  @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

                  – Daniel Nugent
                  Feb 23 '17 at 19:18






                • 1





                  @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

                  – Daniel Nugent
                  Feb 23 '17 at 19:32



















                • Sir this is not working.... Can i get your email ?

                  – jay gandhi
                  Apr 16 '16 at 16:16











                • sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:40











                • google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

                  – jay gandhi
                  Apr 16 '16 at 16:55








                • 1





                  @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

                  – Daniel Nugent
                  Feb 23 '17 at 19:18






                • 1





                  @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

                  – Daniel Nugent
                  Feb 23 '17 at 19:32

















                Sir this is not working.... Can i get your email ?

                – jay gandhi
                Apr 16 '16 at 16:16





                Sir this is not working.... Can i get your email ?

                – jay gandhi
                Apr 16 '16 at 16:16













                sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

                – jay gandhi
                Apr 16 '16 at 16:40





                sir, i removed this lines you told me and i went outside and check it again... but still marker is not moving to new location

                – jay gandhi
                Apr 16 '16 at 16:40













                google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

                – jay gandhi
                Apr 16 '16 at 16:55







                google's default current location marker(blue dot) is moving to new location , but costume marker markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)); is not moving to new location

                – jay gandhi
                Apr 16 '16 at 16:55






                1




                1





                @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

                – Daniel Nugent
                Feb 23 '17 at 19:18





                @HammadNasir This example only uses one Marker to show your current location. Of course, you can add as many Markers as you like in addition to the current location Marker.

                – Daniel Nugent
                Feb 23 '17 at 19:18




                1




                1





                @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

                – Daniel Nugent
                Feb 23 '17 at 19:32





                @HammadNasir Well, you'll need to develop server functionality such that each user can tell the server their location, and also query the server to get the location of other users in their group. Then, for each location the server gives you for other users, place a Marker on the map.

                – Daniel Nugent
                Feb 23 '17 at 19:32













                1














                Here is a Simple method of updating marker as soon as the location changes!
                As we know the onLocationChanged() methode is called when ever there is a change in location. And here we basically set the marker to the current position.
                Follow the process given bellow. That works for me and I hope it will do for you as well :)



                @RequiresApi(api = Build.VERSION_CODES.N)//This line requires if you are using 25/26 API
                @Override
                public void onLocationChanged(Location location) {
                //Removing previously added markers here!
                mMap.clear();
                Log.d(TAG, "Firing onLocationChanged..............................................");
                mCurrentLocation = location;
                mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());

                updateUI();
                }


                We can simply clear previously added markers using the mMap.clear() where mMap is the GoogleMap object and is also called and assigned in onMapReady() methode. Then we can get current location and set marker in an external method which is here: updateUI();



                private void updateUI() {
                Log.d(TAG, "UI update initiated .............");
                if (null != mCurrentLocation) {

                LatLng allLatLang = new LatLng(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude());

                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(allLatLang);
                markerOptions.title("USER NAME");
                markerOptions.snippet("Users Basic Information");
                markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
                locationMarker = mMap.addMarker(markerOptions);

                //You can add this lines if you want to show the realtime data change on any TextView
                String lat = String.valueOf(mCurrentLocation.getLatitude());
                String lng = String.valueOf(mCurrentLocation.getLongitude());
                locationUpdate.setText("At Time: " + mLastUpdateTime + "n" +
                "Latitude: " + lat + "n" +
                "Longitude: " + lng + "n" +
                "Accuracy: " + mCurrentLocation.getAccuracy() + "n" +
                "Provider: " + mCurrentLocation.getProvider());
                } else {
                Log.d(TAG, "location is null ...............");
                }
                }


                So, when ever the location is changing, the onLocationChanged() method is called and then we are removing the existing markers and setting it again to the new position.
                Hope this will work out. Let me know if it helps.
                Thank you.!






                share|improve this answer






























                  1














                  Here is a Simple method of updating marker as soon as the location changes!
                  As we know the onLocationChanged() methode is called when ever there is a change in location. And here we basically set the marker to the current position.
                  Follow the process given bellow. That works for me and I hope it will do for you as well :)



                  @RequiresApi(api = Build.VERSION_CODES.N)//This line requires if you are using 25/26 API
                  @Override
                  public void onLocationChanged(Location location) {
                  //Removing previously added markers here!
                  mMap.clear();
                  Log.d(TAG, "Firing onLocationChanged..............................................");
                  mCurrentLocation = location;
                  mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());

                  updateUI();
                  }


                  We can simply clear previously added markers using the mMap.clear() where mMap is the GoogleMap object and is also called and assigned in onMapReady() methode. Then we can get current location and set marker in an external method which is here: updateUI();



                  private void updateUI() {
                  Log.d(TAG, "UI update initiated .............");
                  if (null != mCurrentLocation) {

                  LatLng allLatLang = new LatLng(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude());

                  MarkerOptions markerOptions = new MarkerOptions();
                  markerOptions.position(allLatLang);
                  markerOptions.title("USER NAME");
                  markerOptions.snippet("Users Basic Information");
                  markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
                  locationMarker = mMap.addMarker(markerOptions);

                  //You can add this lines if you want to show the realtime data change on any TextView
                  String lat = String.valueOf(mCurrentLocation.getLatitude());
                  String lng = String.valueOf(mCurrentLocation.getLongitude());
                  locationUpdate.setText("At Time: " + mLastUpdateTime + "n" +
                  "Latitude: " + lat + "n" +
                  "Longitude: " + lng + "n" +
                  "Accuracy: " + mCurrentLocation.getAccuracy() + "n" +
                  "Provider: " + mCurrentLocation.getProvider());
                  } else {
                  Log.d(TAG, "location is null ...............");
                  }
                  }


                  So, when ever the location is changing, the onLocationChanged() method is called and then we are removing the existing markers and setting it again to the new position.
                  Hope this will work out. Let me know if it helps.
                  Thank you.!






                  share|improve this answer




























                    1












                    1








                    1







                    Here is a Simple method of updating marker as soon as the location changes!
                    As we know the onLocationChanged() methode is called when ever there is a change in location. And here we basically set the marker to the current position.
                    Follow the process given bellow. That works for me and I hope it will do for you as well :)



                    @RequiresApi(api = Build.VERSION_CODES.N)//This line requires if you are using 25/26 API
                    @Override
                    public void onLocationChanged(Location location) {
                    //Removing previously added markers here!
                    mMap.clear();
                    Log.d(TAG, "Firing onLocationChanged..............................................");
                    mCurrentLocation = location;
                    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());

                    updateUI();
                    }


                    We can simply clear previously added markers using the mMap.clear() where mMap is the GoogleMap object and is also called and assigned in onMapReady() methode. Then we can get current location and set marker in an external method which is here: updateUI();



                    private void updateUI() {
                    Log.d(TAG, "UI update initiated .............");
                    if (null != mCurrentLocation) {

                    LatLng allLatLang = new LatLng(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude());

                    MarkerOptions markerOptions = new MarkerOptions();
                    markerOptions.position(allLatLang);
                    markerOptions.title("USER NAME");
                    markerOptions.snippet("Users Basic Information");
                    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
                    locationMarker = mMap.addMarker(markerOptions);

                    //You can add this lines if you want to show the realtime data change on any TextView
                    String lat = String.valueOf(mCurrentLocation.getLatitude());
                    String lng = String.valueOf(mCurrentLocation.getLongitude());
                    locationUpdate.setText("At Time: " + mLastUpdateTime + "n" +
                    "Latitude: " + lat + "n" +
                    "Longitude: " + lng + "n" +
                    "Accuracy: " + mCurrentLocation.getAccuracy() + "n" +
                    "Provider: " + mCurrentLocation.getProvider());
                    } else {
                    Log.d(TAG, "location is null ...............");
                    }
                    }


                    So, when ever the location is changing, the onLocationChanged() method is called and then we are removing the existing markers and setting it again to the new position.
                    Hope this will work out. Let me know if it helps.
                    Thank you.!






                    share|improve this answer















                    Here is a Simple method of updating marker as soon as the location changes!
                    As we know the onLocationChanged() methode is called when ever there is a change in location. And here we basically set the marker to the current position.
                    Follow the process given bellow. That works for me and I hope it will do for you as well :)



                    @RequiresApi(api = Build.VERSION_CODES.N)//This line requires if you are using 25/26 API
                    @Override
                    public void onLocationChanged(Location location) {
                    //Removing previously added markers here!
                    mMap.clear();
                    Log.d(TAG, "Firing onLocationChanged..............................................");
                    mCurrentLocation = location;
                    mLastUpdateTime = DateFormat.getTimeInstance().format(new Date());

                    updateUI();
                    }


                    We can simply clear previously added markers using the mMap.clear() where mMap is the GoogleMap object and is also called and assigned in onMapReady() methode. Then we can get current location and set marker in an external method which is here: updateUI();



                    private void updateUI() {
                    Log.d(TAG, "UI update initiated .............");
                    if (null != mCurrentLocation) {

                    LatLng allLatLang = new LatLng(mCurrentLocation.getLatitude(),mCurrentLocation.getLongitude());

                    MarkerOptions markerOptions = new MarkerOptions();
                    markerOptions.position(allLatLang);
                    markerOptions.title("USER NAME");
                    markerOptions.snippet("Users Basic Information");
                    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
                    locationMarker = mMap.addMarker(markerOptions);

                    //You can add this lines if you want to show the realtime data change on any TextView
                    String lat = String.valueOf(mCurrentLocation.getLatitude());
                    String lng = String.valueOf(mCurrentLocation.getLongitude());
                    locationUpdate.setText("At Time: " + mLastUpdateTime + "n" +
                    "Latitude: " + lat + "n" +
                    "Longitude: " + lng + "n" +
                    "Accuracy: " + mCurrentLocation.getAccuracy() + "n" +
                    "Provider: " + mCurrentLocation.getProvider());
                    } else {
                    Log.d(TAG, "location is null ...............");
                    }
                    }


                    So, when ever the location is changing, the onLocationChanged() method is called and then we are removing the existing markers and setting it again to the new position.
                    Hope this will work out. Let me know if it helps.
                    Thank you.!







                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Aug 17 '17 at 23:11

























                    answered Aug 17 '17 at 22:54









                    TamimTamim

                    7310




                    7310























                        0














                        Implement OnCameraMoveListener and set new position for existing marker in onCameraMove



                        @Override
                        public void onCameraMove() {

                        mMarker.setPosition(mMap.getCameraPosition().target);

                        }





                        share|improve this answer




























                          0














                          Implement OnCameraMoveListener and set new position for existing marker in onCameraMove



                          @Override
                          public void onCameraMove() {

                          mMarker.setPosition(mMap.getCameraPosition().target);

                          }





                          share|improve this answer


























                            0












                            0








                            0







                            Implement OnCameraMoveListener and set new position for existing marker in onCameraMove



                            @Override
                            public void onCameraMove() {

                            mMarker.setPosition(mMap.getCameraPosition().target);

                            }





                            share|improve this answer













                            Implement OnCameraMoveListener and set new position for existing marker in onCameraMove



                            @Override
                            public void onCameraMove() {

                            mMarker.setPosition(mMap.getCameraPosition().target);

                            }






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Mar 1 '17 at 9:16









                            kalpeshdeokalpeshdeo

                            6211514




                            6211514























                                0














                                Inside your onLocationChanged try like this



                                        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocationLatLng, 18));
                                if(myMarker == null) {
                                myMarker = mMap.addMarker(new MarkerOptions().position(currentLocationLatLng)
                                .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
                                } else {
                                myMarker.setPosition(currentLocationLatLng);
                                }


                                This is the better way to move existing marker then clear and create it again.






                                share|improve this answer




























                                  0














                                  Inside your onLocationChanged try like this



                                          mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocationLatLng, 18));
                                  if(myMarker == null) {
                                  myMarker = mMap.addMarker(new MarkerOptions().position(currentLocationLatLng)
                                  .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
                                  } else {
                                  myMarker.setPosition(currentLocationLatLng);
                                  }


                                  This is the better way to move existing marker then clear and create it again.






                                  share|improve this answer


























                                    0












                                    0








                                    0







                                    Inside your onLocationChanged try like this



                                            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocationLatLng, 18));
                                    if(myMarker == null) {
                                    myMarker = mMap.addMarker(new MarkerOptions().position(currentLocationLatLng)
                                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
                                    } else {
                                    myMarker.setPosition(currentLocationLatLng);
                                    }


                                    This is the better way to move existing marker then clear and create it again.






                                    share|improve this answer













                                    Inside your onLocationChanged try like this



                                            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocationLatLng, 18));
                                    if(myMarker == null) {
                                    myMarker = mMap.addMarker(new MarkerOptions().position(currentLocationLatLng)
                                    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
                                    } else {
                                    myMarker.setPosition(currentLocationLatLng);
                                    }


                                    This is the better way to move existing marker then clear and create it again.







                                    share|improve this answer












                                    share|improve this answer



                                    share|improve this answer










                                    answered Nov 12 '17 at 1:48









                                    Jahangir KabirJahangir Kabir

                                    728512




                                    728512






























                                        draft saved

                                        draft discarded




















































                                        Thanks for contributing an answer to Stack Overflow!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f36666121%2fhow-to-continuously-move-marker-same-as-google-default-current-location-marker-o%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Can a sorcerer learn a 5th-level spell early by creating spell slots using the Font of Magic feature?

                                        Does disintegrating a polymorphed enemy still kill it after the 2018 errata?

                                        A Topological Invariant for $pi_3(U(n))$