I'm working on google maps and I want to change map marker position when user location changed in onLocationChanged() method. I tried many solutions available on Stack overflow but none fits for me.
I,ve tried Update marker position on google map smoothly and many others but failed.
I didn't find a proper way of code to update marker.
Thanks a lot!
here's my MapsActivity
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, TaskLoadedCallback {
static Marker now;
public static GoogleMap mMap;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_track_order);
Log.i("map", "create");
SupportMapFragment mapFragment1 = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
if (mapFragment1 != null) {
mapFragment1.getMapAsync(this);
}
initViews();
setToolbar()
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
if (!runtime_permissions()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Intent serviceIntent = new Intent(getApplicationContext(), MyService.class);
ContextCompat.startForegroundService(getApplicationContext(), serviceIntent);
} else {
startService(new Intent(getApplicationContext(), MyService.class));
}
}
mMap.addMarker(place1);
mMap.addMarker(place2);
CameraPosition googlePlex = CameraPosition.builder()
.target(new LatLng(31.527653,74.455632))
.zoom(7)
.bearing(0)
.tilt(45)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(googlePlex), 5000, null);
}
here's my Service class
public class MyService extends Service {
public static LocationListener listener;
public static LocationManager locationManager;
private String locationAddress;
@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
startMyOwnForeground();
else
startForeground(1, new Notification());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
String userAddress = address(latitude, longitude);
/*not working*/
Marker myMarker = null;
if(myMarker == null){
// marker = mMap.addMarker(options);
}
else {
marker.setPosition(new LatLng(location.getLatitude(),location.getLongitude()));
}
}
@Override
public void onStatusChanged(String s, int i, Bundle bundle) {
}
@Override
public void onProviderEnabled(String s) {
}
@Override
public void onProviderDisabled(String s) {
Intent i = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
};
locationManager = (LocationManager) getApplicationContext().getSystemService(Context.LOCATION_SERVICE);
//noinspection MissingPermission
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, CommonObjects.DELAY_LOCATION_UPDATE, 0, listener);
return START_STICKY;
}
}