Мы разработали приложение для доставки, как ola и uber.Где райдер может принять заказ и доставить заказчику.Мы создали службу Android (Background Service), в которой мы инициализировали наши переменные местоположения.Мы получаем данные о местоположении тремя способами: провайдером сети, провайдером GPS, API местоположения Google FusedВсе три мы использовали для получения местоположения, когда мы получаем местоположение, которое оно хранит в нашей переменной-члене (позже оно используется в стороннем проекте), и это же местоположение сохраняется на нашем сервере для этого гонщика.Мы сталкиваемся с 2 или 3 проблемами конкретно.1. Некоторое время местоположение пользователя является правильным, и в течение 20-30 секунд мы получили неправильное местоположение с точностью, скажем,> 50 или 100. 2. Некоторое время местоположение застряло на несколько минут или на длительный час.
МыИспользуете специально разработанную Google стратегию определения местоположения.ниже образец.
private static final int TWO_MINUTES = 1000 * 60 * 2;
/** Determines whether one Location reading is better than the current Location fix
* @param location The new Location that you want to evaluate
* @param currentBestLocation The current Location fix, to which you want to compare the new one
*/
protected boolean isBetterLocation(Location location, Location currentBestLocation) {
if (currentBestLocation == null) {
// A new location is always better than no location
return true;
}
// Check whether the new location fix is newer or older
long timeDelta = location.getTime() - currentBestLocation.getTime();
boolean isSignificantlyNewer = timeDelta > TWO_MINUTES;
boolean isSignificantlyOlder = timeDelta < -TWO_MINUTES;
boolean isNewer = timeDelta > 0;
// If it's been more than two minutes since the current location, use the new location
// because the user has likely moved
if (isSignificantlyNewer) {
return true;
// If the new location is more than two minutes older, it must be worse
} else if (isSignificantlyOlder) {
return false;
}
// Check whether the new location fix is more or less accurate
int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
boolean isLessAccurate = accuracyDelta > 0;
boolean isMoreAccurate = accuracyDelta < 0;
boolean isSignificantlyLessAccurate = accuracyDelta > 200;
// Check if the old and new location are from the same provider
boolean isFromSameProvider = isSameProvider(location.getProvider(),
currentBestLocation.getProvider());
// Determine location quality using a combination of timeliness and accuracy
if (isMoreAccurate) {
return true;
} else if (isNewer && !isLessAccurate) {
return true;
} else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider) {
return true;
}
return false;
}
/** Checks whether two providers are the same */
private boolean isSameProvider(String provider1, String provider2) {
if (provider1 == null) {
return provider2 == null;
}
return provider1.equals(provider2);
}
if (isMoreAccurate)
{
return true;
}
else if (isNewer && !isLessAccurate)
{
return true;
}
else if (isNewer && !isSignificantlyLessAccurate && isFromSameProvider)
{
return true;
}
return false;
Я понятия не имею, что делать дальше.
Я интегрировал Network Provide, провайдера GPS и провайдера слияния.Я получаю местоположение, но менее точно.я также вел список последних 10 последовательных местоположений.Когда я получил 11-е местоположение, я выполнил поиск в списке, и, если обнаружил, что все местоположение одинаково (это означает, что местоположение застряло), тогда я очистил свой список и отбросил соединение местоположения, остановив и перезапустив службу снова с новыми подключениями.