Я реализовал отслеживание геолокации пользователя следующим образом:
# 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 нужны новые библиотеки 'реализации', но это не так уж и сложно
С другой стороны, есть решение 3rd , но оно не позволяетчтобы получить обновленное текущее местоположение , если , я нажимаю кнопку Geolocate на карте.Я говорю о:
map.setOnMyLocationButtonClickListener(new GeolocateBtnClickListener(MapsActivity.this));
map.setOnMyLocationClickListener(new GeolocateClickListener(MapsActivity.this));
У этого есть одно БОЛЬШОЕ преимущество, и это то, что маркер создается автоматически, и он намного более отзывчив на движения пользователя.Например, он указывает в директории, на которую указывает пользователь.
Итак, зачем использовать одно поверх другого или в каких случаях вы бы порекомендовали использовать одно поверх другого?