Blackberry - Начиная GPS-кодирование, приложение не может найти местоположение - PullRequest
0 голосов
/ 03 сентября 2011

Я учусь использовать GPS от Blackberry и слежу за разделом «Начальная книга Blackberry», посвященным GPS, но что-то в коде неверно, поскольку приложение доходит только до «Получение местоположения». Я попытался загрузить исходный код из-за бума, если что-то пропустил, но это тоже не сработало. Я знаю, что GPS моего устройства работает, так как я протестировал пример приложения из SDK. Ниже мой код.

LocationHandler.java

public class LocationHandler extends Thread{
    private MyScreen screen;

    public LocationHandler(MyScreen screen){
        this.screen = screen;
    }

    public void  run(){
        Criteria criteria = new Criteria();
        criteria.setVerticalAccuracy(50);
        criteria.setHorizontalAccuracy(50);
        criteria.setCostAllowed(true);
        criteria.setPreferredPowerConsumption(Criteria.POWER_USAGE_HIGH);

        try{
            screen.setMessage("Getting location...");
            LocationProvider provider = LocationProvider.getInstance(criteria);
            Location location = provider.getLocation(-1);

            QualifiedCoordinates qualifiedCoordinates = location.getQualifiedCoordinates();

            screen.setLocation(qualifiedCoordinates.getLongitude(), qualifiedCoordinates.getLatitude());
            String message = "Successfully got location, method: ";

            int method = location.getLocationMethod();

            if((method & Location.MTA_UNASSISTED)==Location.MTA_ASSISTED){
                message += "Unassisted GPS";
            }

            if((method & Location.MTE_CELLID)==Location.MTE_CELLID){
                message += "Cell site";
            }

            message += "\nHorizontal (Longitude) Accuracy: ";
            message += qualifiedCoordinates.getHorizontalAccuracy();

            message += "\nVertical (latitude) Accuracy: ";
            message += qualifiedCoordinates.getVerticalAccuracy();

            screen.setMessage(message);
        }catch(LocationException e){
            screen.setMessage("Location Exception: " + e.getMessage());
        }catch (InterruptedException ex){
            screen.setMessage("InteruptedException: " + ex.getMessage());
        }
    }
}

MyScreen.java

public final class MyScreen extends MainScreen
{
    private LabelField latitudeLbl;
    private LabelField longitudeLbl;
    private RichTextField messageField;

    public MyScreen()
    {        
    HorizontalFieldManager latManager = new HorizontalFieldManager();
    latManager.add(new LabelField("Latitude: "));
    latitudeLbl = new LabelField("");
    latManager.add(latitudeLbl);

    add(latManager);

    HorizontalFieldManager longManager = new HorizontalFieldManager();
    longManager.add(new LabelField("Longitude: "));
    longitudeLbl = new LabelField("");
    longManager.add(longitudeLbl);

    add(longManager);
    messageField = new RichTextField();
    add(messageField);
    }

    private void update(){
        LocationHandler handler = new LocationHandler(this);
        handler.start();
    }

    protected void makeMenu(Menu menu, int instance) {
        super.makeMenu(menu, instance);
        menu.add(new MenuItem("Update", 10, 10) {
        public void run() {
        update();
        }
        });
    }

    public void setLocation(double longitude, double latitude){
        synchronized(UiApplication.getEventLock()){
            longitudeLbl.setText(Double.toString(longitude));
            latitudeLbl.setText(Double.toString(latitude));
        }
    }

    public void setMessage(String message){
        synchronized(UiApplication.getEventLock()){
            messageField.setText(message);
        }
    }
}

1 Ответ

2 голосов
/ 03 сентября 2011

Попробуйте определить, получите ли вы LocationException при LocationProvider.getInstance(criteria).Если да, то ОС не может найти соответствие вашему критерию LP, поэтому попробуйте использовать другой критерий.

Если он вернет действительный LP, то он все равно может потерпеть неудачу на provider.getLocation(-1).Существуют различные исключения / случаи.Проверьте API для деталей.В большинстве случаев здесь вы получаете либо LocationException (если местоположение не может быть получено, либо если истекло время ожидания), либо SecurityException (если вызывающее приложение не имеет разрешения запрашивать информацию о местоположении).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...