【发布时间】:2019-05-23 20:27:15
【问题描述】:
我已经使用以下实现了用户地理位置跟踪:
#1
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
mMap.clear();
repaintUserLocationPin(location);
}
#2
locationProviderClient = LocationServices.getFusedLocationProviderClient(this);
locationRequest = new LocationRequest();
locationRequest.setInterval(3000);
locationRequest.setFastestInterval(3000);
locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
List<Location> locationList = locationResult.getLocations();
if (locationList.size() > 0) {
//The last location in the list is the newest
Location location = locationList.get(locationList.size() - 1);
mLastLocation = location;
if (mCurrLocationMarker != null) {
mCurrLocationMarker.remove();
}
repaintUserLocationPin(mLastLocation);
}
}
};
总结一下恕我直言:
- 这些似乎都实现了相同的功能,跟踪和更新当前用户的位置。
- 归根结底,它们都同样冗长且具有相同的复杂性。
- #2 需要新的“实现”库,但这并不是很大的开销
另一方面,有一个第三种解决方案,但这不允许我获取更新的当前位置除非,我点击地理定位地图中的按钮。我说的是:
map.setOnMyLocationButtonClickListener(new GeolocateBtnClickListener(MapsActivity.this));
map.setOnMyLocationClickListener(new GeolocateClickListener(MapsActivity.this));
这有一个很大的优势,那就是标记是自动创建的,并且对用户的动作反应更快。例如,它指向用户指向的方向。
那么,为什么要使用一个而不是另一个,或者在什么情况下您会建议使用一个而不是另一个?
【问题讨论】:
标签: java android google-maps geolocation