requestLocationUpdates メソッドで、アプリケーションに最適な minDistance 値を見つけようとしています。10 分ごとに 1 つの場所を生成したいと思います。
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);
}
}
}
ここでのタスクは本当に重要ではないと思います。それには、私が気にかけているいくつかの条件と、情報をデータベースに送信する新しいスレッドの開始が含まれます。
結果は次のとおりです。minDistance パラメーターとして 500 m で携帯電話が移動していない場合でも、同じ場所で異なる場所が提供されます。