2015-10-15 44 views
1

我一直在关注https://developer.android.com/training/location/index.html教程。Google Play services location API - 计数距离

这里是我的课实施新的谷歌的位置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(); 
    } 
} 

似乎一切都完美地工作,但是当我的手机没有在所有的totalDistance移动仍然由0.2-0.3米,每一次的上升执行onLocationChanged方法。

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

回答

2

不要忘记,GPS不是针点准确。通常会有几米的距离,所以很自然会有这样的不正确的读数。虽然旧的LocationManager具有minDistance设置,但不幸的是LocationRequest没有。

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

相关问题