android onLocationChanged никогда не вызывается - PullRequest
1 голос
/ 11 августа 2011

Я реализовал код, который должен возвращать текущее местоположение.

Сначала код:

public static double[] getLocation(Context context) {
        double[] result;
        lm = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE);
        MyLocationListener ll = new MyLocationListener();
        lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll);

        while(!hasLocation) { }

        result = ll.getResult();

        return result;
    }

    private static class MyLocationListener implements LocationListener {
        double[] result = new double[2];

        public double[] getResult() {
            return result;
        }

        @Override
        public void onLocationChanged(Location location) {
            if(location.getAccuracy() != 0.0 && location.getAccuracy() < 100) {
                result[0] = location.getLatitude();
                result[1] = location.getLongitude();
                hasLocation = true;
                lm.removeUpdates(this);
            }
        }

        @Override
        public void onProviderDisabled(String provider) {}

        @Override
        public void onProviderEnabled(String provider) {}

        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {}
    }

Проблема в том, что все останавливается в операторе while.Когда я пытался отладить этот параметр точки останова в первой строке onLocationChanged (), ничего не происходит, но Logcat показывал некоторые журналы, такие как:

loc_eng_report_position: vertical_accuracy = 64.000000
DEBUG/libloc(1292): date:2011-08-11, time:10:51:03.372, raw_sec=1313052663, raw_sec2=1313052663,raw_msec=1313052663372

Есть идеи?

1 Ответ

2 голосов
/ 11 августа 2011

while (! HasLocation) {} блокирует ваше приложение от каких-либо действий. Вам нужно будет либо разобраться с местоположением в обратном вызове onLocationChanged, либо вам нужно будет запустить менеджер местоположений намного раньше и надеяться, что у вас будет результат к тому времени, когда он вам понадобится. Вы не можете быть заняты - ждите ответа.

...