我每5秒就会收到更新的LATLNG,我想在更新的Latlng上更新标记,这是我的代码:
private class LocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
lat = Double.valueOf(intent.getStringExtra("lat"));
longD = Double.valueOf(intent.getStringExtra("long"));
userLat = Double.valueOf(intent.getStringExtra("userLat"));
userLong = Double.valueOf(intent.getStringExtra("userLong"));
latDest = Double.valueOf(intent.getStringExtra("latDest"));
longDest = Double.valueOf(intent.getStringExtra("longDest"));
userDropLocation = intent.getStringExtra("userDropLocation");
userManualLocation = intent.getStringExtra("userLocation");
driverLatLng = new LatLng(lat, longD);
userLatlong = new LatLng(userLat, userLong);
dropLatlong = new LatLng(latDest, longDest);
Log.d("@@Latdriver", String.valueOf(lat));
Log.d("@@longDriver", String.valueOf(longD));
Log.d("@@latLngCurrent", String.valueOf(latLngCurrent));
Log.d("@@driverLatLng", String.valueOf(driverLatLng));
Log.d("@@userLat", String.valueOf(userLat));
Log.d("@@userLong", String.valueOf(userLong));
Log.d("@@userManualLocation", userManualLocation);
Log.d("@@userDropLocation", userDropLocation);
String urlToDrop = getDirectionsUrl(driverLatLng, dropLatlong);
DownloadTask downloadTask1 = new DownloadTask();
downloadTask1.execute(urlToDrop);
map.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.pin_green))
.position(new LatLng(latDest,longDest )));
MarkerOptions a = new MarkerOptions()
.position(driverLatLng);
Marker m = map.addMarker(a);
m.setPosition(driverLatLng);
LatLngBounds.Builder builder = new LatLngBounds.Builder();
builder.include(driverLatLng);
LatLngBounds bounds = builder.build();
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, 150);
map.animateCamera(cu);
}
}
在上面的代码中,每次更新时都会添加新的标记,以解决此问题,请帮助我,在此先感谢您,每个答案都感谢您
每5秒太频繁了。它将耗尽用户的电池电量。 30-60秒应该没问题。
问题在这里
MarkerOptions a = new MarkerOptions()
.position(driverLatLng);
Marker m = map.addMarker(a);
m.setPosition(driverLatLng);
您每次都创建新的标记。
将字段变量用于标记。首次初始化。从下一次开始,只需将标记的位置设置为新纬度即可。
您的代码应该是这样的
private Marker driverMarker ;
// inside broad cast receiver
if(null!=driverMarke){
MarkerOptions a = new MarkerOptions()
.position(driverLatLng);
driverMarker = map.addMarker(a);
}
driverMarker.setPosition(driverLatLng);