Guía de desarrollo

Local Navigation

Ejemplo de código: recuperar varias posiciones óptimas

El siguiente ejemplo de código muestra cómo crear una aplicación de interfaz de usuario que proporcione actualizaciones de ubicación continuas mediante la recuperación de los puntos de posición GPS cuando las posiciones están disponibles o dentro del período de tiempo de espera especificado. Si el punto de posición GPS no está disponible, se devuelve en su lugar la posición de la geoubicación.

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

¿Le ha resultado útil esta información? Envíenos sus comentarios.