Как получить только одно местоположение с клиентом слитого местоположения?
Я хочу получить только одно свежее местоположение и удалить обновления местоположения после получения первого обновления местоположения и добавить его в область, но проблема, с которой я сталкиваюсь, заключается в получении более 100 местоположений иногда в одном обновлении и выполнении 100 транзакций в приложении сбоя области.
public void getCurrentLocation(final Context context) {
LocationRequest mLocationRequest;
final LocationCallback mLocationCallback;
final FusedLocationProviderClient mFusedLocationClient;
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(60000);
mLocationRequest.setFastestInterval(60000);
mLocationRequest.setNumUpdates(1);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult)
{
if (locationResult == null)
{
return;
}
mFusedLocationClient.removeLocationUpdates(this);
Location tempLocation = locationResult.getLastLocation();
if (locationResult.getLocations().size() > 0)
{
tempLocation = locationResult.getLocations().get(0);
}
if(tempLocation != null )
{
RealmManager.writeLocationInRealm(context, tempLocation, true, 0);
}
}
};
mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, null);
}
1 ответ
Вы можете достичь этого с помощью кода ниже
Этот код находится в Котлине
private var fusedLocationClient: FusedLocationProviderClient?=null
в вашем onCreate()
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this@YourActivity)
fusedLocationClient!!.lastLocation
.addOnSuccessListener { location: Location? ->
//Your lattitude location!!.latitude
//Your Longitude location.longitude
}
Я столкнулся с той же проблемой, и вот как я решаю ее в kotlin
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
super.onLocationResult(locationResult)
if (locationResult.lastLocation != null && locationResult.lastLocation.latitude > 0 && locationResult.lastLocation.longitude > 0) {
UserLocationObject.lastLocation = locationResult.lastLocation
fusedLocationClient.removeLocationUpdates(locationCallback)
}
}
}