我正在尝试在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的持久性。