【问题标题】:The minDistance parameter in requestLocationUpdatesrequestLocationUpdates 中的 minDistance 参数
【发布时间】:2013-01-26 23:06:10
【问题描述】:

我试图在 requestLocationUpdates 方法中为我的应用程序找到最佳的 minDistance 值。我想每 10 分钟生成 1 个位置,并且当我移动 100 米时。

我尝试将 minDistance 参数设置为 100,但我一直在获取位置,而我的手机甚至没有移动 1 米!我不断增加它,因为它变得无用,所以我停在 500m 作为参数。

我的问题是,为什么我的手机在最坏的情况下移动了 5 米,而我的 minDistance 参数是 500 时,我一直在获取更新。

这里有一些代码:

if (mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) 
        mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, TEN_SECONDS*6*5, TEN_METERS*50, listener);

if (mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) 
        mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, TEN_SECONDS*6*5, TEN_METERS*50, listener);

我正在使用每 10 分钟运行一次的计时器任务,这是侦听器和任务:

...
@Override
    public void onLocationChanged(Location location) 
    {
        handleLocation(location);
    }
...
    private void handleLocation(Location location) 
{
    if(isUsable(location))
        this.location = location;
}
public boolean isUsable(Location location)
{
    return location!=null && location.hasAccuracy() && location.getAccuracy() < 800;
}


        public void run()
    {
        if(location!=null)
        {
            Timestamp ts1 = new Timestamp(new java.util.Date().getTime());
            if (mGeocoderAvailable) 
                address = reverseGeocode(LocationService.this.location);
            if(address != "" && !address.equals(lastAddress))
            {
                lastAddress = address;
                new SendLocation(LocationService.this.id,address,ts1);
            }
        }
    }

我认为这里的任务并不重要,它包括一些我关心的条件以及启动一个将信息发送到数据库的新线程。

结果是:同一位置为我提供了不同的位置,而我的手机没有移动 500m 作为 minDistance 参数。

【问题讨论】:

    标签: java android


    【解决方案1】:

    这是因为 GPS 正在设置自己以供使用(在此期间它会尝试获取您的确切位置),因此很少会注意到位置更新。

    尝试在您的代码中使用它:-

    public boolean isUsable(Location location)
    {
        return location!=null && location.hasAccuracy() && location.getAccuracy() < 800 && location.getSpeed() > 0;
    }
    

    这确保只有在速度大于 0 时才进行处理。现在,如果它在同一个地方,您的设备就不会打扰,您也可以使用最远 100m 的最小距离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-13
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多