Android: руководство для разработчиков сайтов по улучшению местоположения - PullRequest
0 голосов
/ 02 апреля 2012

Это фрагмент кода, предоставленный сайтом разработчика для улучшения. У меня есть сомнения в этом. В этой реализации функция проверяет, является ли она значительно более новой, а затем возвращает true в самом начале. Но что, если новое исправление принадлежит сетевому провайдеру, и если оно менее точное? Тем не менее, он возвращает истину, чего не должно быть. Это ошибка или мое понимание неверно?

Ссылка: http://developer.android.com/guide/topics/location/obtaining-user-location.html

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;

}

1 Ответ

0 голосов
/ 02 апреля 2012

Значительно новее означает, что местоположение сильно изменилось, и поэтому даже определение местоположения в сети является более точным, чем более раннее определение местоположения в gps.Так что да, это имеет смысл.

Тем не менее, я думаю, что ваша идея отдать приоритет лучшему источнику местоположения хороша, вы должны реализовать его и, возможно, сохранить два разных исправления из двух разных источников.

Было бы неплохо дать ссылку на туториал, который вас вдохновил.

...