24

こんにちは、サービスで位置情報の更新を取得するために Fused Location プロバイダー Api を実装しました。設定された間隔に従って onlocationchanged イベントを発生させることができました。ただし、setsmallestDisplacement を 10 メートルに設定すると、デバイスが静止していてもイベントが発生します。これに似た問題を抱えている人はいますか。提案を提供してください。以下はコードです

    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 になります。屋内でタブレットを使用しているからでしょうか?

4

2 に答える 2

44

Displacement が LocationRequest に設定されている場合、デバイスがまだ Displacement のままである場合、場所を取得する可能性はありません。私が推測できるように - LocationServices.FusedLocationApi.requestLocationUpdates() に別の LocationRequest オブジェクト (変位が設定されていない) を渡した可能性があります。

間隔と変位の両方が設定されている場合、locs がどのように受信されるかについての答えを探していました。アプリケーションで自分自身を確認したところです。以下は、LocationRequest のさまざまな構成の動作です。

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

    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.

于 2015-06-03T10:42:47.520 に答える