Android的位置距离在附近

时间:2015-04-30 06:48:16

标签: java android android-location

我正在编写一个应用程序,根据用户的地理位置执行方法。我正在使用一个实现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());
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

看起来你几乎已经/试图实现这一点 - 只是在第一个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 / setter到您迭代的

的Activity类的私有布尔数据成员