Точность FusedLocationProviderClient возвращает 1500 на некоторых устройствах - PullRequest
0 голосов
/ 15 января 2019

Я использую FusedLocationProviderClient для отслеживания местоположения, и я хочу получить лучшее местоположение с помощью метода getAccuracy (). Я проверял этот метод на некоторых устройствах, и он возвращает 1500, а иногда и 1700, хотя он должен быть меньше нескольких метров (меньше 12). Почему это происходит и что мне делать? Заранее спасибо.

Мой код:

mLocationCallback = new LocationCallback() {
            @Override
            public void onLocationResult(LocationResult locationResult) {
                super.onLocationResult(locationResult);
                Location location = locationResult.getLastLocation();
                float acc = location.getAccuracy();
                if (location != null && location.getAccuracy() < 10){
                    if(preLocation == null){
                        preLocation = location;
                        locationChanged(location);
                        sendLocation(location.getLatitude(), location.getLongitude());
                    }else if (preLocation.getLatitude() != location.getLatitude() && preLocation.getLongitude() != location.getLongitude()) {
                        // Logic to handle location object
                        locationChanged(location);
                        preLocation = location;
                    }
                }
            }
        };

1 Ответ

0 голосов
/ 15 января 2019

Попробуйте установить приоритет locationRequest в значение High Accuracy вот так

LocationRequest mLocationRequest = new LocationRequest();

        mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this,
                    Manifest.permission.ACCESS_FINE_LOCATION)
                    == PackageManager.PERMISSION_GRANTED) {
                //Location Permission already granted
                mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());
            }
        } else {
            mFusedLocationClient.requestLocationUpdates(mLocationRequest, mLocationCallback, Looper.myLooper());
        }
    }
 LocationCallback mLocationCallback = new LocationCallback() {
        @Override
        public void onLocationResult(LocationResult locationResult) {
            for (Location location : locationResult.getLocations()) {
                //Do what you want with the location here
            }
        }
    };
...