我正在尝试创建一个adndroid应用程序,它将显示我启动应用程序时的距离。 我使用了位置管理器,这是我的想法:
重复
public void onLocationChanged(最终位置位置){
sz = location.getLatitude();
dl = location.getLongitude();
String dls = String.valueOf(dl);
String szs = String.valueOf(sz);
aktualna_dlg.setText(dls);
aktualna_szg.setText(szs);
lat1 = location.getLatitude();
lon1 = location.getLongitude();
int secs = 2; // Delay in seconds
Utils.delay(secs, new Utils.DelayCallback() {
@Override
public void afterDelay() {
lat2 = location.getLatitude();
lon2 = location.getLongitude();
}
});
if (lat1!=lat2 || lon1!=lon2){
distance += DistanceCalculator.distance(lat1,lon1,lat2,lon2, "K");
}
if(distance<1000){
String distance_s = String.valueOf(distance*1000);
distance_tv.setText(distance_s + " m");
}
else if(distance>=1000){
String distance_s = String.valueOf(distance/1000);
distance_tv.setText(distance_s + " km");
}
}
但是当我编译应用程序并抓住GPS时,我距离大约6公里。 我究竟做错了什么?
答案 0 :(得分:0)
我不确定utils.delay的作用,因为它不是框架的一部分。但假设它正常工作 - 它会在延迟时发生。这意味着lat2和lon2不会更新,直到被调用。所有使用这些变量的代码都必须在afterDelay中发生,它们在那之前是无效的。
答案 1 :(得分:0)
消除延迟并简单地将onLocationChanged
的参数与上次调用时的参数进行比较。至于为什么你要录制一段很长的距离...
使用高通滤镜
您希望在2秒内移动多远?可能低于GPS接收器的准确度,除非你在飞机上。您的大多数&#34;运动&#34;实际上只是随机噪音。
在我的某个应用中,我将起始GPS位置保存为参考点。在每次调用onLocationChanged
时,我计算当前位置和参考点之间的距离。如果距离大于某个高通值,我将距离添加到运行总计并将新位置设置为参考点。我使用100米作为我的高通值,因为我已经看到一些精度为100米或更高的设备。