8

x秒ごとにy距離後に位置情報の更新を受信するサービスを作成しようとしています。x 秒後に更新を受け取りますが、y 距離後には受け取りません。さまざまな値で何度もテストしましたが、setSmallestDisplacement がまったく機能していないようです。その問題についてはさまざまな投稿がありましたが、解決策はありません。誰かが私を助けてくれたり、別の方向に向けてくれたりしてくれたら幸いです。

私のサービス

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

private GoogleApiClient mGoogleApiClient;
private LocationRequest mLocationRequest;
private int timethresh;
private int distancethresh;
protected Location mCurrentLocation;

@Override
public IBinder onBind(Intent intent) {
    return null;
}

@Override
public void onCreate() {
    super.onCreate();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
    mGoogleApiClient.connect();

}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    mLocationRequest = new LocationRequest();
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    //Set the desired interval for active location updates, in milliseconds.
    mLocationRequest.setInterval(60* 1000);
    //Explicitly set the fastest interval for location updates, in milliseconds.
    mLocationRequest.setFastestInterval(30* 1000);
    //Set the minimum displacement between location updates in meters
    mLocationRequest.setSmallestDisplacement(1); // float


    return super.onStartCommand(intent, flags, startId);

}

@Override
public void onConnected(Bundle bundle) {
    if (mCurrentLocation == null) {
        mCurrentLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient);

    }
     //Requests location updates from the FusedLocationApi.      
    startLocationUpdates();

}

@Override
public void onLocationChanged(Location location) {
    mCurrentLocation = location;
    //Toast.makeText(this, ""+mCurrentLocation.getLatitude()+","+mCurrentLocation.getLongitude(), Toast.LENGTH_SHORT).show();
    System.out.println(""+mCurrentLocation.getLatitude()+","+mCurrentLocation.getLongitude());


}

@Override
public void onConnectionSuspended(int i) {
    // The connection to Google Play services was lost for some reason. We call connect() to
    // attempt to re-establish the connection.
    mGoogleApiClient.connect();
}


@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
    Toast.makeText(getApplicationContext(),"Location services connection failed with code " + connectionResult.getErrorCode(), Toast.LENGTH_LONG).show();

}

protected void startLocationUpdates() {
    LocationServices.FusedLocationApi.requestLocationUpdates(
            mGoogleApiClient, mLocationRequest, this);

}

}

4

2 に答える 2

6

このSOの質問によると、特にcgrの答え。

LocationRequest に設定された Displacement は、デバイスが引き続き Displacement として位置情報を取得する機会がありません。間隔 (interval および fastInterval) より優先されます。私が推測できるように、別の LocationRequest オブジェクト (変位が設定されていない) を LocationServices.FusedLocationApi.requestLocationUpdates() に渡した可能性があります。

LocationRequest setSmallestDisplacement (float leastDisplacementMeters)

位置更新間の最小変位がメートル単位で設定されます。デフォルトでは、これの値は 0 です。セッターを連鎖できるように、同じオブジェクトを返します。

注: ACCESS_COARSE_LOCATION を使用し、ACCESS_FINE_LOCATION を使用しないアプリケーションからのロケーション リクエストは、より遅い間隔に自動的に調整され、ロケーション オブジェクトは難読化されて粗いレベルの精度のみが表示されます。

詳細については、このページを確認してください。

于 2016-03-23T09:47:22.010 に答える