持续跟踪用户的位置并在任何地方绘制路径

时间:2016-03-08 15:23:06

标签: java android google-maps gps location

我开发了一个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());

}

1 个答案:

答案 0 :(得分:0)

您编写的所有内容都是写的,但是您在启动应用程序时没有onLocationChanged

  1. getLastKnownLocation 返回位置,如果有缓存,否则返回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); 
      } 
      }
    
  4. 请参考: http://coderzpassion.com/android-google-maps-v2-tutorial-with-markers/

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

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

      @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
      
      
      }
      

      希望它有所帮助。