Android 位置 distanceTo 在附近

Android location distanceTo within proximity

我正在编写一个应用程序,其中一个方法是根据用户的地理位置执行的。我正在使用实现 LocationListener 的 Activity。位置纬度和经度存储在数据库中,每当用户进入当前位置的范围内,与存储的位置进行比较,就会执行一个方法。

我的问题是,只要用户在附近移动,就会执行 startTimer()、startTimer() 方法。我希望 startTimer() 在用户进入该区域时执行一次,而 stopTimer() 在用户离开该区域时执行。

到目前为止我得到了这个,但似乎只有在离开该区域时才有效:

@Override
public void onLocationChanged(Location location) {
    longitude = location.getLongitude();
    latitude = location.getLatitude();
    Log.i("", "Latitude: " + latitude);
    Log.i("", "Longitude: " + longitude);
    if(activities != null) {
        for (Activity activity : activities) {
            Location newLocation = new Location(provider);
            newLocation.setLongitude(activity.getLongitude());
            newLocation.setLatitude(activity.getLatitude());

            if(location.distanceTo(newLocation) > 15) {
                activity.setInProximity(false);
                stopTimer(activity.getId());
            }
            if (location.distanceTo(newLocation) <= 15 && !activity.isInProximity()) {
                activity.setInProximity(true);
                startTimer(activity.getId());
            }
        }
    }
}

看起来你几乎 there/tried 已经实现了这个 - 只是错过了第一个 if 语句中对你的函数的调用(也应该是一个 if/else 语句)

@Override
public void onLocationChanged(Location location) {
    longitude = location.getLongitude();
    latitude = location.getLatitude();
    Log.i("", "Latitude: " + latitude);
    Log.i("", "Longitude: " + longitude);
    if(activities != null) {
        for (Activity activity : activities) {
            Location newLocation = new Location(provider);
            newLocation.setLongitude(activity.getLongitude());
            newLocation.setLatitude(activity.getLatitude());

            if(location.distanceTo(newLocation) > 15 && activity.isInProximity()) {
                activity.setInProximity(false);
                stopTimer(activity.getId());
            }
            else if (location.distanceTo(newLocation) <= 15 && !activity.isInProximity()) {
                activity.setInProximity(true);
                startTimer(activity.getId());
            }
        }
    }
}

其中

void setInProximity(boolean status)

boolean isInProximity()

应该 getters/setters 到 Activity 的私有布尔数据成员 class 您遍历