我正在尝试在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参数。
答案 0 :(得分:0)
因为GPS正在设置自己(在此期间它会尝试获取您的确切位置),因此很少会发现位置更新。
在您的代码中尝试使用它: -
public boolean isUsable(Location location)
{
return location!=null && location.hasAccuracy() && location.getAccuracy() < 800 && location.getSpeed() > 0;
}
这个确保只有当速度> 1时才能进行处理。 0.现在你的设备不会打扰,如果它在同一个地方,你也可以使用高达100米的精神。