Java 何时使用LocationManager/LocationListener与LocationServices/LocationCallback来跟踪用户位置?
我通过以下方式实现了用户地理位置跟踪: #1 #2 这有一个很大的优势,那就是标记是自动创建的,而且它对用户的移动反应更灵敏。例如,它指向用户指向的方向Java 何时使用LocationManager/LocationListener与LocationServices/LocationCallback来跟踪用户位置?,java,android,google-maps,geolocation,Java,Android,Google Maps,Geolocation,我通过以下方式实现了用户地理位置跟踪: #1 #2 这有一个很大的优势,那就是标记是自动创建的,而且它对用户的移动反应更灵敏。例如,它指向用户指向的方向 那么,为什么要使用一个而不是另一个呢?或者在什么情况下,你会建议使用一个而不是另一个呢?以下所有内容都是我的观点 这两者似乎实现了相同的目标,跟踪并更新当前 用户的位置 这种差异可以通过它们的位置获取方式来实现位置管理器为我们提供了选择位置源的机会。因此,我们可以从gps、网络和被动方案中选择任何来源。但是LocationServices并没有
那么,为什么要使用一个而不是另一个呢?或者在什么情况下,你会建议使用一个而不是另一个呢?以下所有内容都是我的观点 这两者似乎实现了相同的目标,跟踪并更新当前 用户的位置 这种差异可以通过它们的位置获取方式来实现<代码>位置管理器为我们提供了选择位置源的机会。因此,我们可以从gps、网络和被动方案中选择任何来源。但是
LocationServices
并没有提供这种机会,而是提供了位置的体验,以及质量和电池使用之间的动力
归根结底,它们都是同样冗长的,并且具有相同的含义
复杂性
配置它们似乎有点相同,但LocationServices
可能是第一个选项。决定质量/功率似乎比与供应商打交道更合理
#2需要新的“实现”库,但这并不是很大的开销
LocationManager
可从第1版开始使用,而LocationServices
可在设备支持播放服务的情况下使用
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
locationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
mMap.clear();
repaintUserLocationPin(location);
}
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);
}
}
};
map.setOnMyLocationButtonClickListener(new GeolocateBtnClickListener(MapsActivity.this));
map.setOnMyLocationClickListener(new GeolocateClickListener(MapsActivity.this));