持续跟踪用户的位置,无论他走到哪里,都会绘制路径



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

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返回 if 位置,否则返回 null 在那里添加检查。

     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): 如果现有位置为空或当前位置精度大于现有精度,则存储当前位置。

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

@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

}

希望对您有所帮助。

最新更新