2015-01-05 12 views
15

こんにちは私は、融合ロケーションプロバイダApiを実装して、サービス内でロケーションアップデートを取得しました。私はonlocationchangedイベントをインターバルセットに従って起動することができました。しかし、私がsetsmallestDisplacementを10メートルに設定すると、デバイスが停止していてもイベントは起動します。いずれにもこのような問題がありますか?ご提案をお願いします。以下はコードです融合ロケーションプロバイダsetsmallestDisplacementはAndroidでは動作しません

mlocationrequest = LocationRequest.create(); 
    mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
    mlocationrequest.setInterval(60000); // Update location every 1 minute 
    mlocationrequest.setFastestInterval(10000); 
    mlocationrequest.setSmallestDisplacement(10); 


    LocationServices.FusedLocationApi.requestLocationUpdates(
      mGoogleApiClient, mlocationrequest, this); 

私はこの方法を使用した2つの位置の値の間の距離を求めます。

public static float distFrom (float lat1, float lng1, float lat2, float lng2) 
{ 
    double earthRadius = 3958.75; 
    double dLat = Math.toRadians(lat2-lat1); 
    double dLng = Math.toRadians(lng2-lng1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
    Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * 
    Math.sin(dLng/2) * Math.sin(dLng/2); 
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
    double dist = earthRadius * c; 

    int meterConversion = 1609; 

    return new Float(dist * meterConversion).floatValue(); 
} 

ただし、デバイスが静止している場合でも、距離は43.51,49.32,520.02となります。タブレットは屋内で使用しているのですか?

答えて

33

変位がなLocationRequest、場合場所を取得するチャンスがないために設定されている場合デバイスは、間隔が間隔(intervalとfastestInterval)よりも優先されるため、依然として変化しません。 私が推測できるように - LocationServices.FusedLocationApi.requestLocationUpdates()に別のLocationRequestオブジェクト(変位が設定されていない)を渡した可能性があります。

インターバルとディスプレースメントの両方が設定されていると、どのように受信されたかの回答を探していました。私はちょうど私のアプリケーションで自分のために検証され、下記のなLocationRequestのためのさまざまな設定のための動作です:

  1. ませ変位パラメータが1分に最速の1分に設定されている
    のsetIntervalを設定するとは。

    1分ごとに位置情報を受信しました。しかし、時にはそれが速く、時には遅くsetIntervalが不正確であることがわかります。

06-03 11:46:55.408 25776-25776/MyLocationListener:onLocationChanged。
06-03 11:47:56.008 25776-25776/MyLocationListener:onLocationChanged。
06-03 11:48:18.768 25776-25776/MyLocationListener:onLocationChanged。
06-03 11:49:22.938 25776-25776/MyLocationListener:onLocationChanged。
06-03 11:50:22.948 25776-25776/MyLocationListener:onLocationChanged。
06-03 11:52:22.978 25776-25776/MyLocationListener:onLocationChanged。
06-03 11:53:22.998 25776-25776/MyLocationListener:onLocationChanged。

  1. 変位パラメータが1分以上のように10メートル
    のsetIntervalに設定されています。

    デバイスが移動していないか、その距離を超えていない場合、位置の更新は受信されません。下の各onLocationChangedの間に私は10メートル以上歩いているので、私はlocを受け取りました。

06-03 11:26:53.328 16709-16709/MyLocationListener:onLocationChanged。
06-03 11:35:38.318 16709-16709/MyLocationListener:onLocationChanged。
06-03 11:39:16.728 16709-16709/MyLocationListener:onLocationChanged。

+1

は同じことを経験しました..! –

+0

cool @GaganDeep – cgr

+2

私は変位を10に設定していますが、setIntervalとsetFastestIntervalはまだ3分で設定されていますが、大きな動きでも定期的な位置の更新は受けられません。 – 2cupsOfTech

5

onLocationChangedの方法では、異なるlat-longが発生する可能性があります.10よりも多くの変位を記述しています。あなたが得ているlat-longをチェックアウトして手動で一度距離を測定して相互検証します。

上記の場合は、次のようにしてみてください、その後罰金と思われる場合は上記とは別に、もう一つの可能​​な理由は、優先度、 の問題です:

mlocationrequest = LocationRequest.create(); 
mlocationrequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
mlocationrequest.setSmallestDisplacement(10); 
mlocationrequest.setInterval(60000); // Update location every 1 minute 
mlocationrequest.setFastestInterval(10000); 
+0

私は詳細を編集しました。一度それを行ってください。それでも結果が同じであると言ったので、ステートメントの優先順位を変更しました。 –

+0

はい、精度は重要です。 'onLocationChanged'メソッドで取得した場所の正確さをチェックアウトすることができます。 10mは非常に小さい距離です。一般的には、ほとんどの場合30mの精度が得られます。 –

関連する問題