Слитый поставщик местоположения setsmallestDisplacement не работает в Android
Привет, я реализовал API поставщика плавленого местоположения для получения обновлений местоположения в службе. Мне удалось запустить событие onlocationchanged в соответствии с набором интервалов. Однако, когда я устанавливаю setsmallestDisplacement на 10 метров, событие запускается, даже если устройство все еще. У кого-нибудь есть проблема, похожая на эту. пожалуйста, предоставьте предложения. Ниже приведен код
mlocationrequest = LocationRequest.create();
mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mlocationrequest.setInterval(60000); // Update location every 1 minute
mlocationrequest.setFastestInterval(10000);
mlocationrequest.setSmallestDisplacement(10);
LocationServices.FusedLocationApi.requestLocationUpdates(
mGoogleApiClient, mlocationrequest, this);
чтобы найти расстояние между двумя значениями местоположения, я использовал это метод.
public static float distFrom (float lat1, float lng1, float lat2, float lng2 )
{
double earthRadius = 3958.75;
double dLat = Math.toRadians(lat2-lat1);
double dLng = Math.toRadians(lng2-lng1);
double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
Math.sin(dLng/2) * Math.sin(dLng/2);
double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
double dist = earthRadius * c;
int meterConversion = 1609;
return new Float(dist * meterConversion).floatValue();
}
но я получаю расстояния как 43.51, 49.32, 520.02, даже когда устройство все еще. Это потому, что таблетка используется в помещении?
2 ответов
Если смещение установлено для LocationRequest, нет шансов получить местоположения, если устройство по-прежнему как смещение имеет приоритет над интервалами (интервал и fastestInterval). Как я мог догадаться-может быть, вы передали другой объект LocationRequest (без набора смещений) в LocationServices.FusedLocationApi.requestLocationUpdates().
Я искал ответ на то, как Loc принимаются, если заданы интервал и смещение. Я только что проверил для себя мое приложение и ниже-это поведение для другой конфигурации для LocationRequest:
-
отсутствие набора параметров смещения
setInterval установлен на 1 мин и самый быстрый до 1 мин.Я получил местоположение каждые минуты. Но вы видите, что иногда он получал быстро, а иногда медленнее, потому что setInterval неточен.
06-03 11:46:55.408 25776-25776/ MyLocationListener on onLocationChanged.
06-03 11: 47: 56.008 25776-25776/ mylocationlistener on onLocationChanged.
06-03 11: 48: 18.768 25776-25776/mylocationlistener on onLocationChanged.
06-03 11:49: 22.938 25776-25776/mylocationlistener on onLocationChanged.
06-03 11: 50: 22.948 25776-25776/mylocationlistener on onLocationChanged.
06-03 11: 52: 22.978 25776-25776/mylocationlistener on onLocationChanged.
06-03 11:53: 22.998 25776-25776/mylocationlistener on onLocationChanged.
-
параметр смещения установлен в 10 метров
setInterval как выше 1 минут.обновления местоположения не принимаются, если устройство не перемещается или не пересекает это расстояние. Между каждым onLocationChanged ниже я прошел более 10 метров, так что я получил loc.
06-03 11:26:53.328 16709-16709/MyLocationListener on onLocationChanged.
06-03 11: 35:38.318 16709-16709 / MyLocationListener﹕ метода onlocationchanged.
06-03 11:39: 16.728 16709-16709/mylocationlistener on onLocationChanged.
может случиться так, что вы получаете разные lat-long в onLocationChanged
метод, который описывает больше смещения, чем 10. Поэтому любезно проверьте lat-long, который вы получаете, и измерьте расстояние один раз вручную, чтобы проверить вещи.
Помимо вышеизложенного, еще одна возможная причина является вопросом приоритета, Если выше случай кажется прекрасным, попробуйте следующее:
mlocationrequest = LocationRequest.create();
mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mlocationrequest.setSmallestDisplacement(10);
mlocationrequest.setInterval(60000); // Update location every 1 minute
mlocationrequest.setFastestInterval(10000);