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