2012-03-14 133 views
1

我想获取当前位置的值。我使用这个代码,但我只是获得这个消息“等待位置更新...”。有一个配置,我应该让它在电话中获得当前位置的地址? GPS状态可用于我的手机。但我认为该位置无效,因为我没有收到警报对话框。应该怎么做才能获得当前位置的经纬度?获取当前位置的经纬度

package mypackage; 

import net.rim.device.api.gps.*; 
import net.rim.device.api.system.Application; 
import net.rim.device.api.ui.*; 
import net.rim.device.api.ui.component.*; 
import net.rim.device.api.ui.container.*; 
import javax.microedition.location.*; 

public class MultipleFixDemo extends UiApplication 
{  
    private static int _interval = 1; 
    private EditField _status;  

    public static void main(String[] args) 
    { 
     new MultipleFixDemo().enterEventDispatcher(); 
    } 

    public MultipleFixDemo() 
    { 
     MultipleFixScreen screen = new MultipleFixScreen(); 
     screen.setTitle("Multiple Fix Demo"); 

     _status = new EditField(Field.NON_FOCUSABLE); 
     screen.add(_status); 

     startLocationUpdate(); 
     pushScreen(screen); 
    } 

    private void updateLocationScreen(final String msg) 
    { 
     invokeLater(new Runnable() 
     { 
      public void run() 
      { 
       _status.setText(msg); 
      } 
     }); 
    } 

    private void startLocationUpdate() 
    { 
     try 
     { 
      BlackBerryCriteria myCriteria = new BlackBerryCriteria(); 
      myCriteria.enableGeolocationWithGPS(); 
      try 
      { 
       BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)LocationProvider.getInstance(myCriteria); 

       if (myProvider == null) 
       { 
        Runnable showUnsupportedDialog = new Runnable() 
        { 
         public void run() { 
          Dialog.alert("Location service unsupported, exiting..."); 
          System.exit(1); 
         } 
        }; 
        invokeLater(showUnsupportedDialog); 
       } 
       else 
       { 
        myProvider.setLocationListener(new LocationListenerImpl(), _interval, 1, 1); 

       } 
      } 
      catch (LocationException le) 
      { 
       System.err.println("Failed to retrieve a location provider"); 
       System.err.println(le); 
       System.exit(0); 
      } 
     } 
     catch (UnsupportedOperationException ue) 
     { 
      System.err.println("Require mode is unavailable"); 
      System.err.println(ue); 
      System.exit(0); 
     } 
     return; 
    } 


    private class LocationListenerImpl implements LocationListener 
    { 
     public void locationUpdated(LocationProvider provider, Location location) 
     { 
      if(location.isValid()) 

      { 
       Dialog.alert("if"); 
       double longitude = location.getQualifiedCoordinates().getLongitude(); 
       double latitude = location.getQualifiedCoordinates().getLatitude(); 
       float altitude = location.getQualifiedCoordinates().getAltitude(); 

       StringBuffer sb = new StringBuffer(); 
       sb.append("Longitude: "); 
       sb.append(longitude); 
       sb.append("\n"); 
       sb.append("Latitude: "); 
       sb.append(latitude); 
       sb.append("\n"); 
       sb.append("Altitude: "); 
       sb.append(altitude); 
       sb.append(" m"); 
       MultipleFixDemo.this.updateLocationScreen(sb.toString()); 
      } 
     } 

     public void providerStateChanged(LocationProvider provider, int newState) 
     { 
      // Not implemented 
     }   
    } 

    private final static class MultipleFixScreen extends MainScreen 
    { 
     MultipleFixScreen() 
     { 
      super(DEFAULT_CLOSE | DEFAULT_MENU); 

      RichTextField instructions = new RichTextField("Waiting for location update...",Field.NON_FOCUSABLE); 
      this.add(instructions); 
     } 
    }  
} 
+1

这个问题看起来非常相似http://stackoverflow.com/questions/8757160/how-i-can-get-latitude-and-longitude-in-blackberry/8879476#8879476 – 2012-03-26 00:06:03

回答

3

试试这个代码它会适用于我。它会每1秒更新一次经纬度。

import javax.microedition.location.Location; 
import javax.microedition.location.LocationException; 
import javax.microedition.location.LocationListener; 
import javax.microedition.location.LocationProvider; 
import net.rim.device.api.ui.UiApplication; 
import net.rim.device.api.ui.component.Dialog; 
import net.rim.device.api.ui.component.RichTextField; 
import net.rim.device.api.ui.container.MainScreen; 


public final class MyScreen extends MainScreen 
{ 
    private LocationProvider locationProvider; 
    private static int interval = 1; 
    double lat; 
    double longt; 

    public MyScreen() 
    { 
     setTitle("MyTitle"); 
     startLocationUpdate();   
    } 

    private boolean startLocationUpdate() 
    { 
     boolean retval = false; 

      try 
      { 
      locationProvider = LocationProvider.getInstance(null); 

      if (locationProvider == null) 
      { 

      Runnable showGpsUnsupportedDialog = new Runnable() 
      { 
       public void run() 
       { 

       Dialog.alert("GPS is not supported on this platform, exiting..."); 
       //System.exit(1); 
       } 
      }; 

      UiApplication.getUiApplication().invokeAndWait(showGpsUnsupportedDialog); // Ask event-dispatcher thread to display dialog ASAP. 
      } 
      else 
      { 

      locationProvider.setLocationListener(new LocationListenerImpl(), interval, 1, 1); 

      retval = true; 
      } 
      } 
      catch (LocationException le) 
      { 
       System.err.println("Failed to instantiate the LocationProvider object, exiting..."); 
       System.err.println(le); 
       System.exit(0); 
      } 
      return retval; 
      } 

      private class LocationListenerImpl implements LocationListener 
      { 

      public void locationUpdated(LocationProvider provider, Location location) 
      { 
        if(location.isValid()) 
        { 
         double longitude = location.getQualifiedCoordinates().getLongitude(); 
         double latitude = location.getQualifiedCoordinates().getLatitude(); 

         updateLocationScreen(latitude, longitude);    

        } 
      } 

      public void providerStateChanged(LocationProvider provider, int newState) 
      { 
      } 
     } 

     private void updateLocationScreen(final double latitude, final double longitude) 
      { 
        UiApplication.getUiApplication().invokeAndWait(new Runnable() 
        { 
        public void run() 
        { 
        lat = latitude; 
        longt = longitude; 


        RichTextField txt=new RichTextField(); 
        txt.setText("Long=="+longt); 

        RichTextField txt1=new RichTextField(); 
        txt1.setText("lat=="+lat); 

        add(txt); 
        add(txt1); 


//     persistentLatitude.setContents(Double.toString(latitude)); 
//     persistentLongitude.setContents(Double.toString(longitude)); 



        } 
        }); 
      } 
} 
0

试试此代码获取当前位置;

private LocationProvider provider; 
    private Location _location= null; 


     Criteria myCriteria = new Criteria(); 
     myCriteria.setCostAllowed(true); 
     provider = LocationProvider.getInstance(myCriteria); 
     _location = provider.getLocation(4); 
     QualifiedCoordinates coordinates = _location.getQualifiedCoordinates(); 
     String lon =Double.toString(coordinates.getLongitude()); 
     String lat = Double.toString(coordinates.getLatitude()); 
相关问题