2011-11-08 124 views
0

我正在用J2ME寫我的第一個BB應用程序。我找到了一段描述如何獲取GPS座標的代碼片段。我得到一個空指針異常(在手機上),但沒有在模擬器上,我不知道爲什麼。黑莓j2me位置服務

我將不勝感激任何幫助。下面

代碼:

try 
{ 
    // Set criteria for selecting a location provider: 
    Criteria cr= new Criteria(); 
    cr.setCostAllowed(true); 
    cr.setSpeedAndCourseRequired(true); 
    // Get an instance of the provider 
    LocationProvider lp= LocationProvider.getInstance(cr); 

    // Request the location, setting a 60 second timeout 
    Location l = lp.getLocation(300); //always times out 
    Coordinates c = l.getQualifiedCoordinates(); 
    double longitude = 0; 
    double latitude = 0; 
    float course = l.getCourse(); 
    float speed = l.getSpeed(); 
    long timestamp = l.getTimestamp();  
    if(c != null) 
    { 
     // Use coordinate information 
     latitude = c.getLatitude(); 
     longitude = c.getLongitude(); 
    } 
    System.out.println("Lon" + longitude + " Lat "+ latitude + " course "+course+" speed "+speed+" timestamp "+timestamp); 
} 
catch(LocationException le) 
{ 
    System.out.println("Location exception "+le); 
} 
catch(InterruptedException ie) 
{ 
    System.out.println("Interrupted exception "+ie); 
} 
+0

這裏有丟失了一些細節:什麼電話時間;它有清楚的天空視野;何時獲得了最後一次GPS定位。如果GPS已經冷一段時間並且/或者您的天空視野很差,則60秒很短。 IIRC模擬器將始終立即返回一個位置,即使該位置爲0,0,除非您明確禁用了LBS。 – Richard

+0

嗯,謝謝理查德。最終,我通過進入選項 - >設備 - >位置設置並打開位置服務來解決問題。如果定位服務關閉,則Midlet引發java.lang.NullPointerException。這款手機是一款9780 btw。 Regards Luben – Luben

回答

0

使用此代碼

public class handleGPS{ 
     static GPSThread gpsThread; 
     public static double latitude ; 
     public static double longitude; 

     public handleGPS(){ 
      gpsThread = new GPSThread(); 
      gpsThread.start(); 
     } 

     private static class GPSThread extends Thread{ 
      public void run() { 
       Criteria myCriteria = new Criteria(); 
       myCriteria.setCostAllowed(false); 

       try { 
        LocationProvider myLocationProvider = LocationProvider.getInstance(myCriteria); 

        try { 
         Location myLocation = myLocationProvider.getLocation(300); 
         latitude = myLocation.getQualifiedCoordinates().getLatitude(); 
         longitude = myLocation.getQualifiedCoordinates().getLongitude(); 
         System.out.print("latitude= "+latitude+" longitude="+longitude); 


        } 
        catch (InterruptedException iex) { 
         return; 
        } 
        catch (LocationException lex) { 
         return; 
        } 
       }catch (LocationException lex) { 
        return; 
       } 
       return; 
      } 
     } 
    } 

然後在你的主類,請撥打上面的類

handleGPS handleGPS=new handleGPS(); 
    int m_bbHandle = CodeModuleManager.getModuleHandle("net_rim_bb_lbs"); 
     if(m_bbHandle>0){ 

     Dialog.alert("GPS not found"); 
     } 
     else{ 
      Dialog.alert("GPS found"); 
      //your code 
      } 
+0

謝謝Rez,今天晚些時候我會試試這個代碼... – Luben