Местоположение постоянно меняется, даже если устройство не движется
Я получаю текущие латы и лонги используя FusedLocationProviderClient
и я использую приведенный ниже код для получения текущих латов и длин устройства:
public class FusedGpsService extends Service {
private FusedLocationProviderClient fusedLocationProviderClient;
private double speed;
Data datas;
List<Location> locationList;
@Override
public void onCreate() {
super.onCreate();
fusedLocationProviderClient= LocationServices.getFusedLocationProviderClient(this);
requestLocations();
Log.i("STATR","Started");
}
@SuppressLint("MissingPermission")
private void requestLocations() {
LocationRequest locationRequest=new LocationRequest();
locationRequest.setInterval(1000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
fusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback, Looper.myLooper());
}
LocationCallback locationCallback=new LocationCallback(){
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
datas=MainActivity.getData();
locationList = locationResult.getLocations();
if (locationList.size()>0){
Location location =locationList.get(locationList.size() -1);
double lat = location.getLatitude();
double lon = location.getLongitude();
Log.i("LATLONG", "Lat: "+String.valueOf(lat)+","+"Long: "+String.valueOf(lon));
//speed = (double) ((location.getSpeed() * 3600)/1000);
//datas.setCurrSpeed(speed);
datas.update();
//Log.i("SPIIID", String.valueOf(speed)+ "km/h");
}
}
};
@Override
public void onDestroy() {
super.onDestroy();
if (fusedLocationProviderClient!=null){
fusedLocationProviderClient.removeLocationUpdates(locationCallback);
}
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
Все вроде бы хорошо, но если я стою на месте и не двигаюсь onLocationChanged()
метод по-прежнему вызывается и продолжает обновлять его на разные латы и лонги.
Есть ли решение для этого.
1 ответ
Решение
FusedLocationProviderClient не дает точного значения, использует Location Manager и проверяет точность местоположения с помощью location.getAccuracy() и использует местоположение с точностью менее 20.