[英]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());
}
您編寫的所有代碼均已編寫,但是在Application啟動時您無法在onLocationChanged
上工作。
如果存在緩存,則getLastKnownLocation
返回location,否則返回null並在此處添加檢查。
if(location!=null) { double lat =location.getLatitude(); double lng =location.getLongitude(); mMap.addMarker(new MarkerOptions().position(new LatLng(lat,lng)).title("Marker")); }
fusedlocation api
位置fusedlocation api
,可通過位置進行更好的管理。
試試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/
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
}
希望能幫助到你。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.