Guia do desenvolvedor

Local Navigation

Exemplo de código: Recuperar múltiplos pontos otimizados

O seguinte exemplo de código demonstra como criar um aplicativo de interface de usuário que fornece atualizações contínuas de localização recuperando pontos de GPS quando os pontos estão disponíveis ou dentro do período especificado de limite de tempo. Se o ponto de GPS estiver indisponível, um ponto de localização geográfica é retornado em seu lugar.

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

Estas informações foram úteis? Gostaríamos de receber seus comentários.