1

私は以下のサービスを書いています。アプリケーションの起動時にユーザーの場所をサーバーに送信し、ユーザーが500m以上を移動すると、onLocationChangedが3回呼び出されます。onLocationChangedはアプリケーション起動時に複数回呼び出されます

私はそれを3回呼び出す場所から理解できません。この問題の解決方法を教えてください。

public class LocationUpdateService extends Service implements 
     LocationListener, 
     GoogleApiClient.ConnectionCallbacks, 
     GoogleApiClient.OnConnectionFailedListener { 



    private static final long BACKGROUND_INTERVAL = 60000; 

    final private String TAG = LocationUpdateService.class.getSimpleName(); 
    private LocationRequest mLocationRequest; 
    private GoogleApiClient mGoogleApiClient; 
    private String LOCATION_PREF = "LOCATION_PREF"; 



    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.i(TAG, "onStartCommand: "); 
     mLocationRequest = new LocationRequest(); 
     mLocationRequest.setInterval(BACKGROUND_INTERVAL); 
     mLocationRequest.setFastestInterval(30000); 
     mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); 
     mLocationRequest.setSmallestDisplacement(500); 
     super.onStartCommand(intent, flags, startId); 
     return START_STICKY; 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
     Log.i("Location Service", "onLocationChanged: " + location.toString()); 
     saveLocationandReport(String.valueOf(location.getLatitude()), String.valueOf(location.getLongitude())); 
    } 

答えて

2

onLocationChangedが呼び出されたときは制御しません。これは、それを呼び出すロケーションサービスです。

ユーザーが実際に移動してこれを検出して更新を送信する場合が最も明白ですが、位置情報サービスがより正確な場所を取得したときに呼び出されることもあります。

原則として、正確な位置には少し時間がかかります。正確さが必要な場合は、アプリケーションでこれを許可するのが理にかなっています。

+0

ありがとう、最近私はそれをトリガーする必要がありますか?または3番目の試行でサーバをヒットすると、常に3回サービスにヒットします – Kirmani88

+1

ロケーションオブジェクトによって提供される精度パラメータを使用し、それに基づいて何をすべきかを決定することができます – Ak9637

+0

@ Ak9637:getAccuracyはすべてのヒットで23.33を返します – Kirmani88

3

onLocationChangedを制御することはできません。ロケーションサービスによって管理されます。あなたのケースでは、バッファ時間内に位置更新がある場合は、それを最もよく使用している以前の位置更新との比較精度を確認することができますバッファ/待機時間を設定することができます。

関連する問題