как получить результаты от mFusedLocationProviderClient (задача <Location>не выполняется ??) - PullRequest
0 голосов
/ 17 марта 2020

Я новичок в Android разработке, и я делаю приложение для карт, где вы должны узнать текущее местоположение пользователя. В настоящее время я использую FusedLocationProviderClient, как говорят документы для использования. Каждый раз, когда я добавляю завершенный прослушиватель и запускаю код, задача никогда не завершается! Есть ли что-то в android или Java в общем, что я еще не изучил?

Наверное, я пытаюсь спросить, почему он просто пропускает addOnCompleteListener, как будто задача даже не выполняется? Я не очень знаком с Задачами, поэтому я попытался сделать небольшое исследование, но не нашел ничего полезного.

Я попытался проверить, успешно ли это, добавив:

//This loops Infinitely (I tested for 5 mins)
while(!tLocation.isSuccessful())
{
     System.out.println(tLocation.isComplete()); //This returns false
     System.out.println(tLocation.isCancelled()); //This also returns false
}

Но тогда оно просто замораживает приложение, и оно никогда не будет сделано!

Вот пример кода из моего проекта (я вызываю этот метод для получения Location):

private Location tempLocation; //Where I want to save the Location
private FusedLocationProviderClient mFusedLocationProviderClient;

public void getUserLocation() {
        mFusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
        if(mLocationPermissionGranted)
        {
            try {
                final Task<Location> tLocation = mFusedLocationProviderClient.getLastLocation();

                tLocation.addOnCompleteListener(this, new OnCompleteListener<Location>() {
                    @Override
                    public void onComplete(@NonNull Task<Location> task) {
                        if(task.isSuccessful()) {
                            Location location = tLocation.getResult();
                            tempLocation = location;
                        }
                    }
                });

            }catch (SecurityException e) {
                Toast.makeText(OtechLocation.getContext(), "Unable to find Location", Toast.LENGTH_SHORT).show();
           }
        } else
        {
            Toast.makeText(OtechLocation.getContext(), "Enable Location Services to activate feature", Toast.LENGTH_LONG).show();
        }
    }

Если вам нужно что-то прояснить, просто дайте мне знать! Заранее спасибо!

...