Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在每次有新车床时更新标记?_Android_Google Maps_Location_Real Time - Fatal编程技术网

Android 如何在每次有新车床时更新标记?

Android 如何在每次有新车床时更新标记?,android,google-maps,location,real-time,Android,Google Maps,Location,Real Time,我每5秒更新一次LATLNG,我想在更新的LATLNG上更新标记。这是我的代码: private class LocationReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { lat = Double.valueOf(intent.getStringExtra("lat")); longD

我每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);
您每次都在创建新的标记

将字段变量用于标记。第一次初始化它。从下一次开始,只需将标记的位置设置为新的lat lng

您的代码应该是这样的

private Marker driverMarker ;

// inside broad cast receiver     

if(null==driverMarke){
    MarkerOptions a = new MarkerOptions()
                .position(driverLatLng);
        driverMarker = map.addMarker(a);

}

driverMarker.setPosition(driverLatLng);

让我在一个空对象引用上尝试一下oneMarker.setPositioncom.google.android.gms.maps.model.LatLng'将其更改为ifnull=driverMarke to ifnull==DriverMarkes每次创建新标记时我都会检查,当您获得新的latlng时,您可以创建全局标记并设置其在获得新latlng的位置。