requestLocationUpdates中的minDistance参数

时间:2013-01-26 23:06:10

标签: java android

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

我尝试将minDistance参数设置为100,但是当我的手机不移动1米时,我仍然不断获取位置!我不断增加它,因为它变得无用,我在500米作为参数停止运行。

我的问题是,当我的手机在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);
            }
        }
    }

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

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

1 个答案:

答案 0 :(得分:0)

因为GPS正在设置自己(在此期间它会尝试获取您的确切位置),因此很少会发现位置更新。

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

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

这个确保只有当速度> 1时才能进行处理。 0.现在你的设备不会打扰,如果它在同一个地方,你也可以使用高达100米的精神。