【问题标题】:Google Play services location API - Counting distanceGoogle Play 服务位置 API - 计算距离
【发布时间】:2015-10-15 08:24:09
【问题描述】:

我一直在关注https://developer.android.com/training/location/index.html 教程。

这是我实现新的 Google 位置 API 的类:

public class GPSTracker implements LocationListener, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
    private final Context context;
    private TextView distanceTextView;
    private GoogleApiClient mGoogleApiClient;
    private LocationRequest mLocationRequest;
    private Location mLastLocation;
    private double totalMeters = 0;

    public GPSTracker(Context context, TextView distanceTextView) {
        this.context = context;
        this.distanceTextView = distanceTextView;
        buildGoogleApiClient();
    }

    protected synchronized void buildGoogleApiClient() {
        mGoogleApiClient = new GoogleApiClient.Builder(context)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .addApi(LocationServices.API)
                .build();

        mGoogleApiClient.connect();
    }

    @Override
    public void onLocationChanged(Location location) {
        double distance = mLastLocation.distanceTo(location);
        mLastLocation = location;
        totalMeters += distance;
        distanceTextView.setText(totalMeters + "");
    }

    @Override
    public void onConnected(Bundle bundle) {
        mLocationRequest = LocationRequest.create();
        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        mLocationRequest.setInterval(1000); // Update location every second

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

        mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);
    }

    @Override
    public void onConnectionSuspended(int i) {

    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Toast.makeText(context, connectionResult.getErrorMessage(), Toast.LENGTH_SHORT).show();
    }
}

一切似乎都完美无缺,但是当我的手机完全没有移动时,每次执行 onLocationChanged 方法时,totalDistance 仍然上升 0.2-0.3 米。

高度赞赏任何防止这种情况的解决方案。

【问题讨论】:

    标签: java android android-studio gps google-play-services


    【解决方案1】:

    不要忘记 GPS 并不精确。通常会有几米的偏差,所以很自然会有这样的错误读数。虽然旧的 LocationManager 有一个 minDistance 设置,但 LocationRequest 不幸的是没有。

    几种解决方法:可以检查速度,如果速度为零,则可能表明用户实际上没有移动。您还可以手动检查旧位置是否与新位置几乎相同(在您的情况下,0.3m 似乎是一个很好的阈值)并丢弃该读数。最后但同样重要的是,您可以设置一个ActivityRecognitionApi 活动侦听器来确定用户实际上是在移动还是静止。

    【讨论】:

      猜你喜欢
      • 2018-12-04
      • 2015-02-18
      • 1970-01-01
      • 2011-04-03
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多