黑莓 - 开始GPS编码,应用程序将找不到位置

时间:2011-09-03 14:57:21

标签: java blackberry gps

我正在学习使用黑莓的GPS,并且一直在关注处理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 个答案:

答案 0 :(得分:2)

尝试检测您是否在LocationException获得LocationProvider.getInstance(criteria)。如果是,则操作系统无法找到与您的标准LP匹配的内容,因此请尝试使用其他标准。

如果它确实返回了有效的LP,那么它仍然可能在provider.getLocation(-1)上失败。有各种例外/案例。有关详细信息,请查看API。在大多数情况下,您可以获得LocationException(如果无法检索位置或超时期限到期)或SecurityException(如果调用应用程序没有查询位置信息的权限)