2

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 で携帯電話が移動していない場合でも、同じ場所で異なる場所が提供されます。

4

1 に答える 1

0

これは、GPS を使用するように設定しているためです (この期間中、GPS はユーザーの正確な位置を取得しようとします)。これにより、位置情報の更新がほとんど通知されなくなります。

コードでこれを使用してみてください:-

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

これにより、速度が > 0 の場合にのみ処理が実行されるようになります。これで、デバイスが同じ場所にある場合でも問題なく、最大 100m のマインドディスタンスも使用できます。

于 2013-02-05T23:42:41.267 に答える