首页 > 解决方案 > FusedLocationProviderClient 精度在某些设备上返回 1500

问题描述

我正在使用 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;
                    }
                }
            }
        };

标签: androidlocationfusedlocationproviderapi

解决方案


尝试像这样将 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
            }
        }
    };

推荐阅读