Поставщик объединенного местоположения setSmallestDisplacement не работает в определенном движении - PullRequest
0 голосов
/ 20 января 2019

Я пытался узнать местоположение пользователя, когда он двигался. Я написал код ниже, и я установил наименьшее смещение в 30 метров и интервал в 0 миллисекунд, чтобы я получал местоположение через каждые 30 метров движения, но мое приложение не работало правильно. Если я останавливаюсь в каком-то месте, приложение не получает местоположение, и это правда, но когда я переезжаю, иногда я получаю местоположение в 100-метровом движении или больше. Зачем? Если я получаю местоположение на расстоянии более 30 метров, я теряю несколько очков, и это важно для меня.

Это мой код для обновления местоположения запроса:

 private void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(0);//(UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setFastestInterval(0);//(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
    mLocationRequest.setSmallestDisplacement(30);
    mLocationRequest.setMaxWaitTime(MAX_WAITE_TIME);

    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

Ответы [ 2 ]

0 голосов
/ 07 февраля 2019

Это потому, что точность вашего местоположения выше 30 м (предположительно, намного выше). Поэтому, когда вы меняете свое местоположение на 100 м, вы все еще находитесь в круге предполагаемого местоположения. Вы можете получить точность определения местоположения, чтобы убедиться, что это правда, но в любом случае у вас нет лучшего выбора, чем часто получать координаты и выбрать наиболее точный. Увидеть: API-интерфейс FusedLocationProviderClient LocationRequest setSmallestDisplacement не работает должным образом

0 голосов
/ 20 января 2019

LocationRequest.setSmallestDisplacement не дает вам большей точности, он просто позволяет избежать ненужных обновлений.

Нет способа повысить низкую точность, вы просто получаете очко с некоторой точностью, если вы неЕсли вы заинтересованы в позициях с низкой точностью, просто пропустите это местоположение и дождитесь лучшего.

В настоящее время нет идеальной точности, точность составляет 100 м для худшей точности.

проверьте страницу разработчиков Android для получения дополнительной информации.информация:

https://developer.android.com/training/location/receive-location-updates#location-request

Попробуйте сделать следующее: Установите уровень точности ACCURACY_FINE

Установите максимальную мощность (для получения лучшего сигнала GPS)

Донне запрашивать высоту.

Установить speedRequired на false

Установить флаг CostAllowed на true

Установить BearingRequired на false

Установить горизонтальную точность и вертикальную точность на HIGH

подробнее об этих функциях вы поймете почему.

Criteria tenM= new Criteria();
tenM.setAccuracy(Criteria.ACCURACY_FINE);
tenM.setPowerRequirement(Criteria.POWER_HIGH);
tenM.setAltitudeRequired(false);
tenM.setSpeedRequired(false);
tenM.setCostAllowed(true);
tenM.setBearingRequired(false);
tenM.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
tenM.setVerticalAccuracy(Criteria.ACCURACY_HIGH);

locationManager.requestLocationUpdates(1000 /*milliseconds*/,  1 
/*1 meter*/, 
tenM /*criteria*/, this /*context*/, null);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...