Как обновлять маркер каждый раз, когда я получаю новый LatLng? - PullRequest
0 голосов
/ 19 марта 2020

Я получаю Обновленный LATLNG каждые 5 секунд c, и я хочу обновить маркер на обновленном 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);


    }
}

В приведенном выше коде он добавляется каждый раз, когда новый маркер на обновлено, как решить эту проблему, пожалуйста, помогите мне, спасибо заранее, я буду признателен за каждый ответ здесь

1 Ответ

1 голос
/ 19 марта 2020

Каждые 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);
...