我想在设备停止移动时停止locationlistener,因为我已经编写了计算设备速度的函数,因为我可以知道如果速度为零,设备不会移动,但我不知道知道在哪里调用计算速度的函数,假设我在onLocationChanged()中调用它,那么只有在位置更新时此函数才会调用,但我想在位置不变时调用此函数?
public void onLocationChanged(Location location) {
time= time1;
lat1=latitude; //copy previous latitude value
lng1=longitude; //copy previous longitude value
lat = Double.toString(location.getLatitude());
lng = Double.toString (location.getLongitude());
time1 = location.getTime();
latituteField.setText(String.valueOf(lat));
longitudeField.setText(String.valueOf(lng));
latitude = Double.parseDouble(lat);
longitude = Double.parseDouble(lng);
dist=CalculateSpeed(latitude,longitude,lat1,lng1);
speed=dist/(time1-time);
text.setText(String.valueOf(speed));
}
答案 0 :(得分:1)
开始使用新的Google Play定位服务。你会发现它更容易使用,更准确。 LocationRequest
类有一个名为setSmallestDisplacement
的方法,用于设置位置更新之间的最小位移。我在这里有一个完整的工作样本:
https://github.com/nickfox/GpsTracker/tree/master/phoneClients/android
查看GpsTrackerActivity.java,在第92行之后添加以下内容:
locationRequest.setSmallestDisplacement(10); // in meters
这表示在我们移动10米之前不要进行位置更新。试验一下。
答案 1 :(得分:0)
您可以使用LocationManager类的方法getLastKnownLocation()。您可以在不同的时间间隔比较从此方法获得的数据,如果每次结果相同则表示您的设备没有移动。此方法检索最后一个已知设备的位置,你可以谷歌更多关于它。祝你好运