我想知道如何获取最近的已知位置(提供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。感谢您的帮助。
答案 0 :(得分:0)
如果您使用的是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
}
});
答案 1 :(得分:0)
如果您使用的是Fused Location Provider,则可以在第一个事件发生后停止监听位置更改事件:
@Override
public void onLocationChanged(Location location) {
Log.d("onLocationChanged", new Gson().toJson(location));
stopLocationUpdates();
}
private void stopLocationUpdates() {
mFusedLocationClient.removeLocationUpdates(mLocationCallback);
}