我试图让用户位置时,用户是移动。我写了下面的代码,我设置最小位移30米远,并间隔为0毫秒,我在每30米运动得到的位置,但我的应用程序不能正确工作。如果我在一个地方停下来,该应用程序并没有得到位置,这是真的,但是当我移动,有时我100米运动以上得到的位置。为什么?如果我超过30米得到的位置,我失去了一些积分,这对我来说是很重要的。
这是我的请求,位置更新代码:
private void createLocationRequest() {
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(0);//(UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setFastestInterval(0);//(FASTEST_UPDATE_INTERVAL_IN_MILLISECONDS);
mLocationRequest.setSmallestDisplacement(30);
mLocationRequest.setMaxWaitTime(MAX_WAITE_TIME);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}
LocationRequest.setSmallestDisplacement不给你一个更好的精确度,它只是避免不必要的更新。
有没有方法来提高精度低,你只会得到一个点具有一定精确度,如果你不感兴趣,精度低的位置就跳过这个位置,等待一个更好的。
没有完美的精确性已经上市,精度为100米是坏的准确性。
检查Android开发者页面,了解更多信息:
https://developer.android.com/training/location/receive-location-updates#location-request
试试这个:设定精确度以ACCURACY_FINE
设置的最高功率(以获得最佳的GPS信号)
不要求高度。
设置speedRequired为假
设置CostAllowed标志设置为true
设置BearingRequired为false
设置HorizontalAccuracy和VerticalAccuracy到HIGH
阅读更多有关这些功能,你就会明白为什么。
Criteria tenM= new Criteria();
tenM.setAccuracy(Criteria.ACCURACY_FINE);
tenM.setPowerRequirement(Criteria.POWER_HIGH);
tenM.setAltitudeRequired(false);
tenM.setSpeedRequired(false);
tenM.setCostAllowed(true);
tenM.setBearingRequired(false);
tenM.setHorizontalAccuracy(Criteria.ACCURACY_HIGH);
tenM.setVerticalAccuracy(Criteria.ACCURACY_HIGH);
locationManager.requestLocationUpdates(1000 /*milliseconds*/, 1
/*1 meter*/,
tenM /*criteria*/, this /*context*/, null);
这是因为你的位置精度高于30米(可能更高)。所以,当你偏离100米改变你的位置,你仍然在估计位置的圆。你可以得到定位精度,看是否属实,但无论如何你没有更好的选择,而不是频繁地获得坐标,并选择一个与大多数的准确性。请参阅:FusedLocationProviderClient API LocationRequest setSmallestDisplacement doesn't work properly