Android location.getspeed()更新

Android location.getspeed()更新,android,gps,location,Android,Gps,Location,我有点小问题。我在onLocationChanged()方法上找到了一个location.getSpeed()方法,并且.getSpeed()在我停留在同一位置时通常不会更新/更改为0公里/小时 我应该在哪里找到一个location.getGpeed()方法,当我停留在原地时更新显示为0公里/小时 还有一个问题。这是我的locationListener: private final LocationListener locationListener = new LocationListener(

我有点小问题。我在
onLocationChanged()
方法上找到了一个
location.getSpeed()
方法,并且
.getSpeed()
在我停留在同一位置时通常不会更新/更改为0公里/小时

我应该在哪里找到一个
location.getGpeed()
方法,当我停留在原地时更新显示为0公里/小时

还有一个问题。这是我的
locationListener

private final LocationListener locationListener = new LocationListener() 
    {public void onLocationChanged(Location location) {     
    boolean var = false;
    float distance;

        if (firstRun) { distance=0; firstRun=false; }
        else
        distance = location.distanceTo (startLocation);
        Tspeed.setText("0km/h");


        if (location.getSpeed()!=0) 
        {
            Tspeed.setText(""+(location.getSpeed()*3600/1000 +"km/h")); 
        }
        else
        {
            Tspeed.setText("0km/h");
        }


        sAllDistance += distance;  // 
        startLocation=location;
        Tdistance.setText(""+(int)SAllDistance+" m");

    }
问题是:当
LocationManager
获得修复时,从
location.distanceTo()返回的第一个
AllDistance
为±50米


我怎样才能修复它呢?

事实上,GPS不会一直提供准确的信息。即使你们呆在同一个地方,有时,纬度和经度也会略有不同。我认为这取决于
minTime
minDistance
您提供给
requestLocationUpdates(…)
方法

无论如何,一旦尝试更改这些值,如下所示

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 
             1000L(minTime), 2000.0f(minDistance), myLocationListener);
希望能有帮助

编辑:

您可以做的另一件事是,根据,
location.hasSpeed()
返回
true
如果此修复包含速度信息,则返回
false
。当你呆在同一个地方时,它会返回
false
我猜

基于此,您可以为
textView
等设置值


我没有试过,但你可以试一次。

由于大气、卫星几何结构、附近建筑物等原因,GPS定位中存在连续的、不同的错误

如果您试图确定GPS接收器是否静止,最好的办法是检查速度是否低于某个可靠的阈值(例如1公里/小时)

你可以做一些事情,如数字过滤速度值,例如下面是一个简单的可调低通滤波器,平滑速度的变化。。。输入一个较低的值(如3),输出将对输入的变化做出响应,输入一个较高的值(如10),输出将变得非常平滑

    /**
     * Simple recursive filter
     *
     * @param prev Previous value of filter
     * @param curr New input value into filter
     * @return New filtered value
     *
     */
    private float filter(final float prev, final float curr, final int ratio) {
      // If first time through, initialise digital filter with current values
      if (Float.isNaN(prev))
        return curr;
      // If current value is invalid, return previous filtered value
      if (Float.isNaN(curr))
        return prev;
      // Calculate new filtered value
      return (float) (curr / ratio + prev * (1.0 - 1.0 / ratio));
    }

    filtSpeed = filter(filtSpeed, speed, 3);

好的,我已经改变了这一点,我添加了if(location.hasSpeed()){if(location.getSpeed()!=0){…但是location.getSpeed()在我停留在中时有时仍然显示速度>0place@KrystianBersztolc这就是我在回答中所经历和提到的
GPS不会一直提供准确的信息
:)