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