Как я могу исправить получение нулевого значения местоположения из FusedLocationProviderClient в Android - PullRequest
0 голосов
/ 12 мая 2019

Я пытался получить данные текущего местоположения, используя FusedLocationProviderClient в Android.Я всегда получаю нулевое значение для переменной местоположения. Как это исправить?

Я пытался выполнить шаги с веб-сайта разработчика Android для FusedLocationProviderClient, это не помогло.

mFusedLocationClient = LocationServices.getFusedLocationProviderClient(context);

    if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(context, "Location permission Required", Toast.LENGTH_SHORT).show();
    } else {
        mFusedLocationClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
            @Override
            public void onSuccess(Location location) {
                if (location != null) {
                    mLocation = location;
                    Log.d(TAG, "getLocation: "+mLocation.getLatitude()+","+mLocation.getLongitude());

                }

                    locationRequest = LocationRequest.create();
                    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
                    locationRequest.setInterval(20 * 1000);
                    locationCallback = new LocationCallback() {
                        @Override
                        public void onLocationResult(LocationResult locationResult) {
                            super.onLocationResult(locationResult);
                            if (locationResult == null) {
                                return;
                            } else {
                                for (Location location : locationResult.getLocations()) {
                                    if (location != null) {
                                        mLocation = location;
                                        Log.d(TAG, "getLocation: "+mLocation.getLatitude()+","+mLocation.getLongitude());

                                    }
                                }
                            }
                        }
                    };

                if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
                    Toast.makeText(context, "No Location Permission", Toast.LENGTH_SHORT).show();
                }
                else {
                    mFusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.myLooper());
                }}
        });

Я ожидаю, что этот код вернет данные текущего местоположения.

Ответы [ 2 ]

2 голосов
/ 12 мая 2019

Исправлять нечего, это ожидаемое поведение.getLastLocation возвращает последнее местоположение, ЕСЛИ СИСТЕМА ЗНАЕТ ЭТО.Это почти никогда не знает это.Так что он почти всегда будет возвращать ноль.Если вы хотите получить гарантированное местоположение, используйте requestLocationUpdates.Но вы никогда не можете полагаться на работу getLastLocation, и даже когда это происходит, данные могут быть устаревшими.Это действительно должно использоваться только в очень ограниченных обстоятельствах.

0 голосов
/ 12 мая 2019

getLastLocation() возвращает ноль, если Android System не знает о своем последнем местоположении. Чтобы указать последнее местоположение для System, вы можете попробовать одно из следующих действий:

  1. Перед открытием приложения откройте Google Maps и дайте устройству получить текущий После этого вы можете вернуться в свое приложение.

  2. Служба Location в Android предоставляет 3 режима. Проверьте значение High Точность режима . Перейдите к Настройка -> Местоположение -> Режим высокой точности .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...