Плохая точность локации в фоновом режиме - PullRequest
0 голосов
/ 10 февраля 2019

Я получаю обновления местоположения в фоновом режиме.Он хорошо работает в зависимости от того, сколько раз устройство просыпается и все такое, но моя проблема в том, что во многих устройствах точность получаемых местоположений не очень хорошая.Много раз это происходит в отдаленных местах.Это похоже на то, что устройство сообщает о новом местоположении слишком рано, вместо того, чтобы тратить несколько секунд, пытаясь найти более реальное местоположение.Конечно, я использую 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;
    }
}
...