gpt4 book ai didi

android - Fused Location Api setSmallestDisplacement 忽略/不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:53:42 29 4
gpt4 key购买 nike

我正在尝试创建一个服务,该服务将在每 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);

}

最佳答案

根据这个SO question特别是cgr的回答。

如果设备静止,则为 LocationRequest 设置的 Displacement 没有机会获取位置,因为 Displacement 优先于 Intevals(interval 和 fastestInterval)。正如我所猜测的那样 - 也许您已将不同的 LocationRequest 对象(未设置位移)传递给 LocationServices.FusedLocationApi.requestLocationUpdates()。

The LocationRequest setSmallestDisplacement (float smallestDisplacementMeters)

以米为单位设置位置更新之间的最小位移。默认情况下,this 的值为 0。它返回相同的对象,因此可以链接 setter。

NOTE: Location requests from applications with ACCESS_COARSE_LOCATION and not ACCESS_FINE_LOCATION will be automatically throttled to a slower interval, and the location object will be obfuscated to only show a coarse level of accuracy.

检查这个page获取更多信息。

关于android - Fused Location Api setSmallestDisplacement 忽略/不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36156121/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com