我想知道如何获得我最后的已知位置(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
。然后你可以将这个方法用于get last known location
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);
}