我正在尝试在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);
            }
        }
    }


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

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

最佳答案

这是因为GPS正在设置要使用的位置(在此期间它将尝试获取您的确切位置),因此几乎不会注意到位置更新。

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

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


这可以确保仅在速度> 0时才进行处理。现在,如果设备在同一位置,则不会再打扰,您也可以使用长达100m的持久性。

08-04 23:55