我正在后台任务中获取位置更新。根据唤醒设备的次数以及所有这些,它可以很好地工作,但是我的问题是,在许多设备中,接收到的位置的准确性不是很好。很多时候它被设置在遥远的地方。就像设备报告新位置太早,而不是花费更多的时间来尝试获得更真实的位置。 当然,我使用setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY)。 让我在此处粘贴我必须开始在后台定位的那段代码。如前所述,onLocationResult至少每20分钟执行一次,这很好。我的问题是收到的位置不是很真实。也许是几个街区之外。并非在所有设备上都发生这种情况。有些真的很准确。有没有办法告诉系统确保有一个更好的实际位置,而不是触发更快但错误的位置? 另一方面,我必须说,所有测试过的设备都具有GPS和网络定位器。
private FusedLocationProviderClient mFusedLocationClient;
private LocationCallback oLocationCallback;
private boolean StartLocating() {
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
//Callback for changes in location:
oLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
Location oLocation = locationResult.getLastLocation();
-- Do Work here with oLocation --
}
};
//createLocationRequest:
LocationRequest oLocationRequest = new LocationRequest();
oLocationRequest.setInterval(20 * 60 * 1000); //20 minutes
oLocationRequest.setFastestInterval(60 * 1000); //1 minute
oLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
try {
mFusedLocationClient.requestLocationUpdates(oLocationRequest, oLocationCallback, Looper.myLooper());
return true;
} catch (SecurityException e) {
return false;
}
}