Blackberry - LocationProvider.getLocation () висит на - PullRequest
3 голосов
/ 08 октября 2009

Я написал очень простое приложение, которое запрашивает у LocationProvider местоположение и распечатывает его в System.out. Это прекрасно работает в симуляторе. Однако, когда я запускаю его на своем устройстве BlackBerry, вызов getLocation, кажется, зависает бесконечно. Я запускаю код в отдельном потоке, который просто получает поставщика и запрашивает местоположение. Я попробовал это с нулевыми Критериями (которые должны дать мне правильные значения по умолчанию?), А также Критериями, которые должны предоставить Помощь, а затем Автономный Я включил свой код ниже. Когда я запускаю это на моем устройстве, оно зависает при вызове getLocation. Вот мой код ниже ... plz, расскажите, что я могу делать неправильно ...

public void getLocation() {
    Thread t = new Thread(new Runnable() {
        private double lat;
        private double lon;
        public void run() {
            Criteria cr = new Criteria();
            cr.setHorizontalAccuracy(Criteria.NO_REQUIREMENT);
            cr.setVerticalAccuracy(Criteria.NO_REQUIREMENT);
            cr.setCostAllowed(false);
            cr.setPreferredPowerConsumption(Criteria.NO_REQUIREMENT);
            cr.setPreferredResponseTime(1000);
            LocationProvider lp = null;
            try {
                lp = LocationProvider.getInstance(cr);
            } catch (LocationException e) {
            // System.out.println("*****************Exception" + e);
            }
            Coordinates c = null;
            if (lp == null) {
                UiApplication.getUiApplication().invokeLater(
                    new Runnable() {
                    public void run() {
                        Dialog.alert("GPS not supported!");
                        return;
                    }
                    });
            } else {
                // System.out.println("OK");
                switch (lp.getState()) {
                case LocationProvider.AVAILABLE:
                // System.out.println("Provider is AVAILABLE");
                        Location l = null;
                        try {
                        l = lp.getLocation(-1);
                    } catch (LocationException e) {
                    // System.out.println("***Location Exception caught "
                    // + e);
                    } catch (InterruptedException e) {
                    // System.out.println("***Interrupted Exception aught:"
                    // + e);
                    } catch (Exception e) {
                    // System.out.println("***Exception caught :"
                    // ;+ e);
                    }
                        if (l != null && l.isValid()) {
                        c = l.getQualifiedCoordinates();
                    }
                    if (c != null) {
                            lat = c.getLatitude();
                        lon = c.getLongitude();
                        System.out.println(lat + "  -  " + lon);
                    }
                }
            }
        }
    });
    t.start();
}

Ответы [ 2 ]

4 голосов
/ 08 октября 2009

попытаться:


Говоря о висящих нитях,

locationProvider.getLocation(-1) 

зависает, потому что если вы используете -1, тайм-аут не будет. Попробуйте это:

    int timeout = 120;
    try {
        location = provider.getLocation(timeout);
    } catch (LocationException e) {
        System.out.println("Location timeout");
    } catch (InterruptedException e) {
        System.out.println("InterruptedException"+e.getMessage());
    }

Также, если вы используете System.out.println(text) в симуляторе, на устройстве было бы лучше

getApplication().invokeLater(new Runnable(){
    public void run() {
        screen.add(new LabelField(text));           
    }
});

или

getApplication().invokeLater(new Runnable(){
    public void run() {
        Dialog.inform(text);            
    }
});
0 голосов
/ 14 июля 2011

Время ожидания -1 должно быть в порядке, оно должно просто перейти к значению по умолчанию. Значение по умолчанию может быть высоким, хотя, если это не происходит в фоновом режиме, вы можете установить время ожидания на 15 секунд.

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

Я не шучу, ты пробовал это снаружи?

...