2

我试图在 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 参数。

4

1 回答 1

0

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

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

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

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

于 2013-02-05T23:42:41.267 回答