在android中使用延迟方法的正确方法

时间:2016-04-11 18:46:18

标签: java android

我正在尝试创建一个adndroid应用程序,它将显示我启动应用程序时的距离。 我使用了位置管理器,这是我的想法:

  1. 检查坐标。
  2. (延迟2秒)
  3. Chceck coordinates2
  4. 如果coordinates2!=坐标,则计算它们之间的距离并将其加到双倍距离。
  5. 重复

    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公里。 我究竟做错了什么?

2 个答案:

答案 0 :(得分:0)

我不确定utils.delay的作用,因为它不是框架的一部分。但假设它正常工作 - 它会在延迟时发生。这意味着lat2和lon2不会更新,直到被调用。所有使用这些变量的代码都必须在afterDelay中发生,它们在那之前是无效的。

答案 1 :(得分:0)

消除延迟并简单地将onLocationChanged的参数与上次调用时的参数进行比较。至于为什么你要录制一段很长的距离...

使用高通滤镜

您希望在2秒内移动多远?可能低于GPS接收器的准确度,除非你在飞机上。您的大多数&#34;运动&#34;实际上只是随机噪音。

在我的某个应用中,我将起始GPS位置保存为参考点。在每次调用onLocationChanged时,我计算当前位置和参考点之间的距离。如果距离大于某个高通值,我将距离添加到运行总计并将新位置设置为参考点。我使用100米作为我的高通值,因为我已经看到一些精度为100米或更高的设备。