0

アプリケーションで緯度と経度に関する問題に直面しています。私のコードは次のとおりです: -

LocationManager locationManager = (LocationManager) 
                    getSystemService(LOCATION_SERVICE);

            LocationListener locationListener = new LocationListener() {

                public void onLocationChanged(Location location) {


                Toast.makeText(
                        CheckInSOSMessageService.this,
                         "Location has been Changed now.....................", 0)
                        .show();

                isLocationChanged=true;

                    }

                public void onStatusChanged(String provider, int status,
                        Bundle extras) {
                }

                public void onProviderEnabled(String provider) {
                }

                public void onProviderDisabled(String provider) {

                }
            };

            locationManager.requestLocationUpdates(
                    LocationManager.GPS_PROVIDER, 0, 0, locationListener);

上記のコードでは、すべてが正常に動作しています.onLocationChangedメソッドは、場所が変更されると実行されます.しかし、私の問題は、デバイスをある場所から別の場所に移動すると、場所が変更され、トースト通知がデバイスに表示されるが、onLocationChangedメソッドが実行されることですトースト通知が何度も表示されるため、デバイスがアイドル状態になっているにもかかわらず、数回連続して.それは私をとてもいらいらさせます.場所が変わると、上記のメソッドが1回だけ実行さ、デバイスを再度移動した後に実行されることを望みます.それは実行されます.これは私の要件です.みんな、この問題を解決するのを手伝ってください.前もって感謝します!!

4

2 に答える 2

0

電話が常に同じ位置にある場合でも、場所が変更され、onLocationChanged がトリガーされます。これは、信号が建物に反射するため、GPS 信号が不安定になるためです。適度な時間間隔で正確に同じ場所を取得することはありません。

これを回避するには、場所を一時的に保存して、新しい場所と比較します。それらの間の距離が定義された境界に達する場合は、新しい場所を使用します。

別の提案は、次のような要求を避けることです

locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 0, 0, locationListener);

これはスパムが大量に発生し、リソースを大量に消費するためです。あなたのアプローチに合ったいくつかの異なる minTime と minDistance 値を試してください。次に、onLocationChanged が 0ms ごとにトリガーされることはありません。

編集:

位置情報を毎分更新したい場合は、このようなリクエストを使用してください。

locationManager.requestLocationUpdates(
                LocationManager.GPS_PROVIDER, 1000, 1000, locationListener);

1 分ごと、1 キロメートルごとに最新情報を入手できます。minDistance なしで更新をリクエストすることはできないため、十分に高く設定してください。

于 2013-08-20T12:20:17.790 に答える
0

共有設定を使用して現在の場所を更新し、ロジックを実行してかなりの距離を取得した後、location.distanceTo(loc) を使用して sharedPrefs から現在の場所を比較できます。

于 2013-08-20T12:41:21.893 に答える