我正在开发一个应用程序,我正在使用FusedLocationProviderClient获取用户当前位置。类似于下面的代码。我无法理解为什么它将当前位置作为不同的位置,有时它距离当前位置2+KM并且设备只是在一个地方稳定
private void getLastLocation() {
try {
mFusedLocationClient.getLastLocation()
.addOnCompleteListener(new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
if (task.isSuccessful() && task.getResult() != null) {
mLocation = task.getResult();
onNewLocation(mLocation);
} else {
Log.e(TAG, "Failed to get location.");
mLocation = null;
}
}
});
} catch (SecurityException unlikely) {
//Log.e(TAG, "Lost location permission." + unlikely);
}
上面的代码在前台服务中......现在的问题是当用户设备稳定但在运行应用程序 5-6 小时后它返回不同的当前位置,即使设备在同一个地方(没有移动)
实际结果:它不应该给我用户行驶的任何公里。我通过用户计算旅行的 KM 类似于下面的代码
double distanceInMeters = currentLocation.distanceTo(priviusLocation);
if (distanceInMeters > getSharedPref.getDefaultDistance() && (mLocation.getAccuracy() < Config.ACCURACY ) //Config.ACCURACY==>70{
// if (distanceInMeters > getSharedPref.getDefaultDistance()) {//getSharedPref.getDefaultDistance()==>10
if (mLocation.getLatitude() > 0) {
getSharedPref.setPreviousLocation(String.valueOf(mLocation.getLatitude()), String.valueOf(mLocation.getLongitude()));
writeDataInLogFile("this set to previous ", String.valueOf(mLocation.getLatitude()) + " getLongitude " + String.valueOf(mLocation.getLongitude()));
}
data.setGPS_Km_Travelled(String.format("%.2f", distanceInMeters / 1000));
data.setGPS_Is_Loc_Changed("1");
}