onLocationChanged возвращает старое расположение

В моем приложении, которое отслеживает пройденное расстояние, у меня есть две кнопки. Первый запуск обновляет местоположение, второй останавливает их.

public void start(View view){
    cords = new ArrayList<LatLng>();

    if (ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) !=
            PackageManager.PERMISSION_GRANTED){
        return;
    }

    LocationServices.FusedLocationApi.requestLocationUpdates(
            googleApiClient, locationRequest, this);
}

public void stop(View view) {
    LocationServices.FusedLocationApi.removeLocationUpdates(googleApiClient, this);
}

Затем я объявляю onLocationChanged, где я вычисляю расстояние, которое пользователь прошел.

@Override
public void onLocationChanged(Location location) {
    cords.add(new LatLng(location.getLatitude(), location.getLongitude()));

    if (cords.size() > 1) {
        Location previousLocation = new Location("");
        previousLocation.setLatitude(cords.get(cords.size() - 2).latitude);
        previousLocation.setLongitude(cords.get(cords.size() - 2).longitude);

        stats.updateDistance(location.distanceTo(previousLocation));
    }
}

Проблема в том, что когда я останавливаю измерения, а затем начинаю их снова, location возвращает старое значение. Как я мог избавиться от этого старого значения и начать измерение расстояния от совершенно нового местоположения.

1 ответ

  1. Я понял, что я не получил старое местоположение, но вместо этого я получил местоположение, измеренное сетью, а не gps, поэтому это было так неточно. Когда я двигался дальше от зданий, gps начал работать, и расположение было правильным. Поэтому, чтобы избавиться от измерения сети, я проверяю, имеет ли местоположение hasaltitude (), если нет, это означает, что оно было измерено сетью, поэтому я могу игнорировать его.

     @Override
    public void onLocationChanged(Location location) {
        if(location.hasAltitude()) {
            cords.add(new LatLng(location.getLatitude(), location.getLongitude()));
    
            if (cords.size() > 1) {
                Location previousLocation = new Location("");
                previousLocation.setLatitude(cords.get(cords.size() - 2).latitude);
                previousLocation.setLongitude(cords.get(cords.size() - 2).longitude);
    
                stats.updateDistance(location.distanceTo(previousLocation));
        }