Как получить только одно местоположение с клиентом слитого местоположения?

Я хочу получить только одно свежее местоположение и удалить обновления местоположения после получения первого обновления местоположения и добавить его в область, но проблема, с которой я сталкиваюсь, заключается в получении более 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)

                }
            }


}
Другие вопросы по тегам