位置更新为计算距离提供随机数

Location Updates giving random numbers for calculating distance

我目前正尝试在 Android Studio 上开发一个 运行 跟踪器,我正在使用常规技术来获取距离,然后将其转换为英里而不是米,我在服务内部进行。但是,当我启动模拟路线时,它开始喷出随机的长数字。我知道这与我如何使用 distanceTo() 计算距离有关,但不知道如何修复它。没有贴出全部代码,相关部分都吹

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("G53", "onCreate called");
        locationListener = new MyLocationListener();
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        try {
            locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5, 5, locationListener);
            location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
            oldLocation = location;

        } catch (SecurityException e) {
            Log.d("g53mdp", e.toString());
        }
    }

 public double getDistance() {

        if(running) {
            distance = distance * 0.000621371192;
            Log.d("tag", " " + distance);
            return distance;
        }
        return 0;

    }

    public void startExercise() {
        Log.d("tag", "startExercise called");
        startTime = System.currentTimeMillis();
        stopTime = 0;
        running = true;
        distance = 0;
    }

    public void stopExercise() {
        Log.d("tag", "stopExercise called");
        running = false;
        startTime = 0;
    }

    public class MyLocationListener extends Binder implements LocationListener, IInterface {

        @Override
        public void onLocationChanged(Location location) {
        
            if(running) {
                distanceInMetres = oldLocation.distanceTo(location);
                if (distanceInMetres < 10) {
                    Log.i("DISTANCE", "Values too close, so not used.");
                } else {
                    distance += distanceInMetres;
                    oldLocation = location;
                }
            }
        }

Logcat 中的输出如下所示

我有两个想法。

我看了你的代码,你把英里换算成米没问题。

1.- 我认为问题是您在 2 种或多种方法中重新利用距离变量,造成溢出。

您在此处添加距离。

 distance += distanceInMetres;

这很完美,但随后您读取了该变量并在

中为它们分配了一个新值
public double getDistance() {

        if(running) {
            distance = distance * 0.000621371192;
            Log.d("tag", " " + distance);
            return distance;
        }
        return 0;

    }

所以我建议你把getDistance()改成

public double getDistance() {
        if(running) {
            return distance * 0.000621371192;
        }
        return 0;
    }

这样,您就不会重新分配值。

2.- 另一个可能的问题可能是并发问题,但您需要 post 更多关于要遵循的代码。