onLocationChanged () не вызывается - PullRequest
3 голосов
/ 26 августа 2011

Я знаю, что этот вопрос был задан, но я не могу заставить его работать.

Этот код переходит к разделу местоположения запроса.Я знаю, что настройки сейчас плохой выбор, но я просто пытаюсь получить результаты, я не беспокоюсь о батарее телефона прямо сейчас.В отладчике Eclipse я вижу, что

"libloc" - "Latitude: XXXXX"    
"libloc" - "Longitude: XXXX"    
"libloc" - "Accuracy: 27000"

Что означает, что GPS работает.Но я не могу получить фактическое местоположение, потому что ни один из методов в LocationListener не запускается.

    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

    Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(loc==null){      
        String provider = null;

        if ( lm.isProviderEnabled( LocationManager.GPS_PROVIDER ) ) {
            provider = LocationManager.GPS_PROVIDER;
        } else {
            Toast.makeText(this, "GPS not available", 3000).show();
            if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
                provider = LocationManager.NETWORK_PROVIDER;
            } else {
                Toast.makeText(this, "Provider Not available", 3000).show();
            }
        }

        if(provider != null) {
            lm.requestLocationUpdates(provider, 0, 0, locationListener);
        }

    } else {
        Latitude = loc.getLatitude();
        Longitude = loc.getLongitude();
    }

Это мой объект Location Listener, который объявлен немного ниже верхнего кода. Ни один из этих методов не вызывается (следовательно, функции Log.d, так что я могу добавить точки останова, но в этом слушателе ничего не вызывается).

double Latitude         = 0.0;
double Longitude        = 0.0;

LocationListener locationListener = new LocationListener(){

    @Override
    public void onLocationChanged(Location location) {
        Latitude = location.getLatitude();
        Longitude = location.getLongitude();
    }

    @Override
    public void onProviderDisabled(String provider) { Log.d("GPS", "HEY THERE"); }
    @Override
    public void onProviderEnabled(String provider) { Log.d("GPS", "HEY THERE"); }       
    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        Log.d("GPS", "HEY THERE");

    }

};

Дополнительная информация из комментариев:

Дело не в этом.loc = lm.getLastKnownLocation (LocationManager.GPS_PROVIDER);всегда возвращает ноль.- Перегрузка119 50 минут назад

Что происходит, когда вы перебираете остальную часть кода в выражении IF?- Джек, 44 минуты назад

В итоге я попадаю на эту строку: lm.requestLocationUpdates (provider, 0, 0, locationListener);Затем в сообщении консоли отладчика я вижу, как отображаются широта, долгота, точность - и они отображаются неоднократно, поэтому я предполагаю, что GPS активирован и он получает местоположение.Проблема в том, что locationListener не запускает ни один из своих методов.- Overload119 41 мин. Назад

И я посмотрел ссылку, мой код такой же.- Overload119 41 мин. Назад Какое значение имеет провайдер на тот момент?- Джек, 30 минут назад

Значение провайдера - "gps" - Overload119 15 минут назад
Можете ли вы установить некоторые точки останова в onLocationChanged, чтобы увидеть, когда / если он запускается?Если вы уже сделали это, после запуска приложения может пройти несколько секунд после регистрации прослушивателя, чтобы оно запустилось.Переместите свой телефон вокруг и подождите.В какой-то момент он должен срабатывать несколько раз.- Джек, 12 минут назад

imm.io / 8vXb Вот скриншот - отладчик показывает, что GPS работает (обратите внимание, что это событие появляется снова и снова).У меня уже была точка останова onLocationChanged () - она ​​никогда не достигает ее даже после ожидания в течение длительного периода времени.Широта / долгота, которую он возвращает, всегда одинакова.- Overload119 39 секунд назад edit

Я также пытался вызвать lm.getLastKnownLocation (LocationManager.GPS_PROVIDER);с помощью кнопки, и нажмите ее после того, как сообщения консоли показывают, что широта / долгота были получены.- Местоположение, возвращаемое методом, равно нулю.- Перегрузка119 0 сек. Назад edit

1 Ответ

3 голосов
/ 26 августа 2011

Я предполагаю, что ваш Location loc всегда устанавливается getLastKnownLocation(), поэтому ваш оператор if никогда не оценивается как true.Отладили ли вы, чтобы увидеть, что именно происходит в:

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
    if(loc==null){ ... }

?

Из того, что я понимаю, вы должны использовать getLastKnownLocation() только для получения исходного местоположения, а затем зарегистрировать слушателя для отслеживания.

Здесь - отличная ссылка со всей необходимой информацией.

...