持续跟踪用户位置,走到哪里都画出路径

Tracking location of a user continuously and drawing a path wherever he goes

好吧,我开发了一个 android 程序来获取您的位置。现在我想要的是到达你所在的位置并跟踪你的动作并在你的路径地图上画一条线。阅读了很多指南,但根本无法使用

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {

private GoogleMap mMap;
LocationManager locationManager;
String provider;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);
    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
    locationManager = (LocationManager)    getSystemService(Context.LOCATION_SERVICE);
    provider = locationManager.getBestProvider(new Criteria(), false);

}

@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;
    Location location= locationManager.getLastKnownLocation(provider);
    double lat =location.getLatitude();
    double lng =location.getLongitude();
    mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Marker"));

    // Add a marker and move the camera

}

@Override
public void onLocationChanged(Location location) {
    Double lat = location.getLatitude();
    Double lng = location.getLongitude();
    mMap.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title("Marker"));
    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(lat, lng), 10));
    Log.i("Latitude", lat.toString());

}

您编写的所有代码都已编写,但您没有在启动应用程序时工作onLocationChanged

  1. getLastKnownLocation returns if location if there's cache otherwise it returns null add a check there.

     if(location!=null) 
     {
    double lat =location.getLatitude(); 
    double lng =location.getLongitude();
    mMap.addMarker(new MarkerOptions().position(new 
    LatLng(lat,lng)).title("Marker")); }
    
  2. fusedlocation api 要更好地管理位置,请参阅此处。

  3. 试试这个 addMarker:

    public void drawMarker(double lat,double lon) {
     if (mMap != null) { 
       MarkerOptions marker = new MarkerOptions().position(new LatLng(lat, lon)).title(" Maps Tutorial").snippet("Android Ruler");      
       marker.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)); 
       // Moving Camera to a Location with animation 
       CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(latitude, longitude)).zoom(12).build();
       mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); mMap.addMarker(marker); 
      } 
      }
    

请参考这里: http://coderzpassion.com/android-google-maps-v2-tutorial-with-markers/

  1. onLocationChanged(Location location): 如果现有位置为空或当前位置精度大于现有精度,则存储当前位置。

所以,你需要修改onLocationChanged(Location location) 并将要更改的应用程序状态值写入如下代码:

@Override
public void onLocationChanged(Location location) {

    double latitude = location.getLatitude();
    double longitude = location.getLongitude();

    myLatLng = new LatLng(latitude, longitude);

    zoomToPoints();

    if(!isDirectionDrawn) {

        new LongOperation().execute("");
    }https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi
}

private void moveToCurrentLocation(LatLng currentLocation)
    {
    mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(currentLocation, 15));
    // Zoom in, animating the camera.
    mMap.animateCamera(CameraUpdateFactory.zoomIn());
    // Zoom out to zoom level 10, animating with a duration of 2 seconds.
    mMap.an


}

希望对您有所帮助。