Как быть уверенным, чтобы получить местоположение GPS каждый раз, когда вы спрашиваете - PullRequest
0 голосов
/ 28 марта 2020

В моем приложении люди размещают объявления, которые могут видеть другие. Они фильтруются с использованием расстояния между создателем объявления и парнем, который его читает. Если кто-то разместит объявление, я должен быть уверен, чтобы узнать его местоположение. Если кто-то ищет объявление, я должен быть уверен, что его местоположение будет сортировать объявления.

В моем коде у меня есть способ получить местоположение, но иногда он возвращает ноль.

Вот небольшой код (я проверил разрешение et c)

 FusedLocationProviderClient mFusedLocationProviderClient;
    mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(context);

    try{
        if(mLocationPermissionsGranted){
            final Task location = mFusedLocationProviderClient.getLastLocation();
            location.addOnCompleteListener(new OnCompleteListener() {
                @Override
                public void onComplete(@NonNull Task task) {
                    if(task.isSuccessful()){
                        Log.d(TAG, "onComplete: found location!");

                        Location currentLocation = (Location) task.getResult();

                        if (currentLocation != null)
                        {
                            double Latit = currentLocation.getLatitude();
                            double Longit = currentLocation.getLongitude();

                            LatLng latLong = new LatLng(Latit, Longit);
                        //TODO do something with latlong
                        }
                    }else{
                        Log.d(TAG, "onComplete: current location is null");
                        Toast.makeText(context, "unable to get current location", Toast.LENGTH_SHORT).show();




                    }
                }
            });
        }
    }catch (SecurityException e){
        Log.e(TAG, "getDeviceLocation: SecurityException: " + e.getMessage() );
    }

Но иногда Location currentLocation = (Location) task.getResult(); возвращает ноль, даже если задача успешна. Я действительно не знаю почему. Я хотел бы знать, есть ли надежный способ получить местоположение всякий раз, когда я спрашиваю его (это местоположение включено на телефоне, конечно). Спасибо

1 Ответ

1 голос
/ 28 марта 2020

Это потому, что вы просите только последнее местоположение. Устройство может иметь это, если какое-то другое приложение недавно использовало gps, но иногда требуется некоторое время, пока вы не получите местоположение.

Вы должны подписаться на изменения местоположения и подождать, пока вы не получите хотя бы первое местоположение , Одним из способов может быть подписка только тогда, когда вы получили, что последнее местоположение является нулевым. В этом случае вы должны выполнить requestLocationUpdates с обратным вызовом с запросом разрешений на случай, если вам нужно местоположение, если приложение находится в фоновом режиме, и если вам нужно только одно местоположение, вы можете остановить его после того, как первое местоположение прибудет с removeLocationUpdates.

Посмотрите на документы . Или вы можете использовать библиотеку типа rxlocation на тот случай, если вы чувствуете себя более комфортно с наблюдаемыми, чем с обратными вызовами.

...