Я хочу знать, как я могу узнать свое последнее известное местоположение (при наличии GPS или сети). Я спрашиваю об этом, потому что знаю, как узнать свое местоположение, но оно будет периодически обновляться, и я хочу его только один раз, и больше ничего.
Вот мой реальный код:
@Override
public void onLocationChanged(Location location) {
Toast.makeText(getContext(),"Cambio posicion "+location.getProvider(),Toast.LENGTH_SHORT).show();
this.marca.title("Mi ubicacion");
this.marca.position(new LatLng(location.getLatitude(),location.getLongitude()));
mMap.addMarker(this.marca);
this.camara = CameraPosition.builder()
.bearing(0)
.zoom(15)
.target(new LatLng(location.getLatitude(),location.getLongitude()))
.tilt(30)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(this.camara));
}
Я использую LocationManager. Спасибо за вашу помощь.
Если вы используете LocationManager и просто хотите получить последнее местоположение однажды. Вы можете удалить обновление местоположения прослушивания после первого onLocationChanged, например
@Override
public void onLocationChanged(Location location) {
mLocationManager.removeUpdates(mListener);
}
Еще одно решение, которое, я думаю, может помочь.
Вы можете использовать GoogleLocationService вместо LocationManager. Тогда вы можете использовать этот метод для получить последнее известное местоположение
mFusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location
}
});
Если вы используете Fused Location Provider, вы можете перестать прослушивать событие изменения местоположения после первого, например:
@Override
public void onLocationChanged(Location location) {
Log.d("onLocationChanged", new Gson().toJson(location));
stopLocationUpdates();
}
private void stopLocationUpdates() {
mFusedLocationClient.removeLocationUpdates(mLocationCallback);
}