2009-10-08 15 views
3

我写了一个非常简单的应用程序,它向LocationProvider提供一个位置并将其打印到System.out。这在模拟器中很好用。但是,当我在我的黑莓手机上运行它时,getLocation调用似乎无限期地挂起。我在一个单独的线程中运行代码,只需获取提供程序并请求位置。我用空标准(它应该给我的默认值是正确的?)以及一个应该提供助手然后自治的标准。我已经在下面包含了我的代码。当我在我的设备上运行此它挂在调用getLocation.Here是我的代码below..plzz告诉我可能是做错了......Blackberry - LocationProvider.getLocation()挂在

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(); 
} 

回答

4

尝试:


谈起悬一线,

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

-1超时东西应该没问题,它应该转到默认设置。默认值可能很高,但如果在后台没有发生这种情况,您可能需要将超时设置为小于15秒。

这部作品在模拟器,但挂在实际设备上的原因可能是你没有,你做的测试设备上的GPS定位......

我不是在开玩笑,有你在外面试过了吗?