Guide de développement

Local Navigation

Récupérer une seule position GPS optimale

Les étapes suivantes indiquent comment créer une application d'interface utilisateur fournissant la position GPS la plus rapidement disponible, qui peut être issue d'une source de géolocalisation ou d'une position GPS. Les coordonnées de la position et le mode utilisé par l'application pour récupérer la position s'affichent à l'écran.

Avant de commencer : vérifiez que le terminal BlackBerry ou que BlackBerry Smartphone Simulator peut accéder au service de géolocalisation.
  1. Importez les classes et les interfaces requises.
    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.*;
  2. Créez le cadre d'application en développant la classe UiApplication. Dans main(), créez une instance de la nouvelle classe et appelez enterEventDispatcher() pour activer l'application et recevoir des événements. Dans le constructeur d'application, appelez pushScreen() pour afficher l'écran personnalisé de l'application. La classe SingleFixScreen, décrite à l'étape 3, représente l'écran personnalisé.
    public final class SingleFixDemo extends UiApplication
    {
        public static void main(String[] args)
        {
            SingleFixDemo theApp = new SingleFixDemo();
            theApp.enterEventDispatcher();
        }
        public SingleFixDemo() 
        {
            pushScreen(new SingleFixScreen());
        }
    }
  3. Créez le cadre de l'écran personnalisé en développant la classe MainScreen. Créez une instance de la classe LabelField pour stocker les coordonnées que vous voulez afficher à l'écran. Créez deux variables double pour stocker les valeurs de latitude et de longitude. Créez une variable integer et une variable String pour stocker le mode de positionnement.
    class SingleFixScreen extends MainScreen 
    {
        private LabelField _coordLabel;
        private double _latitude;
        private double _longitude;
        private int _modeUsed;
        private String _mode;
    }
  4. Dans le constructeur d'écran, appelez super() pour créer un menu par défaut. Appelez setTitle() pour indiquer le titre de l'écran.
    public SingleFixScreen() 
    {
        super(DEFAULT_CLOSE | DEFAULT_MENU);
        setTitle(new LabelField("Single Fix Demo", Field.USE_ALL_WIDTH | 
                DrawStyle.HCENTER));
    }
  5. Dans le constructeur d'écran, créez une instance de la classe ButtonField pour créer un bouton sur lequel l'utilisateur du terminal BlackBerry clique pour obtenir la localisation du terminal. Appelez Field.setChangeListener() pour détecter les modifications du bouton. Appelez findLocation(), comme décrit à l'étape 6, pour obtenir la géolocalisation lorsque l'utilisateur clique sur le bouton. Appelez add() pour ajouter le bouton à l'écran. Créez une instance de la classe LabelField pour afficher les coordonnées obtenues et appelez add() pour ajouter le champ à l'écran.
    ButtonField locButton = new ButtonField("Get location fix", 
            ButtonField.CONSUME_CLICK);
    locButton.setChangeListener(new FieldChangeListener()
    {
        public void fieldChanged(Field field, int context)
        {
            findLocation();
        }
    });
    add(locButton);
    this._coordLabel = new LabelField();
    add(this._coordLabel);
  6. Créez le cadre de la méthode findLocation. Appelez setText() avec une valeur String vide pour effacer les coordonnées de LabelField. Créez une instance de la classe Thread qui appelle run(). Ce fil est utilisé pour traiter la récupération des informations d'emplacement. Dans run(), créez un bloc try/catch pour indiquer les critères de récupération d'une position. Créez une instance de la classe BlackBerryCriteria en appelant BlackBerryCriteria(). Aucun argument n'est transmis à BlackBerryCriteria(), le mode de positionnement par défaut est donc utilisé. Appelez enableGeolocationWithGPS(BlackBerryCriteria.FASTEST_FIX_PREFERRED) pour récupérer la première position GPS disponible. Dans le bloc catch, appelez showException(), comme décrit à l'étape 10, pour afficher le message d'erreur d'une exception UnsupportedOperationException.
    private void findLocation()
    {
        this._coordLabel.setText("");
        Thread locThread = new Thread() 
        {
            public void run() 
            {
                try
                {
                    BlackBerryCriteria myCriteria = new BlackBerryCriteria();
                    myCriteria.enableGeolocationWithGPS(BlackBerryCriteria
                            .FASTEST_FIX_PREFERRED);
                } 
                catch (UnsupportedOperationException e) 
                {
                   showException(e);
                }
            }
        };
        locThread.start();
    }
  7. Dans le premier bloc try, créez un second bloc try/catch pour obtenir un fournisseur de positionnement. Appelez LocationProvider.getInstance() avec l'objet BlackBerryCriteria pour obtenir un fournisseur de positionnement. Dans le bloc catch, appelez showException(), comme décrit à l'étape 10, pour afficher le message d'erreur d'une exception LocationException.
    try
    {
        BlackBerryLocationProvider myProvider = (BlackBerryLocationProvider)
                LocationProvider.getInstance(myCriteria);
    }
    catch (LocationException e)
    {
        showException(e);
    }
  8. Dans le second bloc try, créez un troisième bloc try/catch pour obtenir les informations d'emplacement. Appelez BlackBerryLocationProvider.getLocation() avec un paramètre de -1 pour récupérer un fournisseur de positionnement à l'aide de la valeur de délai par défaut. Appelez getLongitude() et getLatitude() pour récupérer respectivement les coordonnées de latitude et de longitude. Appelez getGPSMode() pour récupérer le mode utilisé pour récupérer la position. Créez un bloc switch pour identifier si le mode utilisé est GPS ou la géolocalisation. Créez une instance de la classe StringBuffer et ajoutez les coordonnées obtenues et le mode au tampon. Créez une variable String et appelez toString() avec l'objet StringBuffer pour renvoyer la valeur String pour les coordonnées. Appelez showResults() pour afficher les résultats à l'écran, comme décrit à l'étape 9. Dans le premier bloc catch, appelez showException(), comme décrit à l'étape 10, pour afficher le message d'erreur d'une exception InterruptedException. Dans le second bloc catch, appelez showException(), comme décrit à l'étape 10, pour afficher le message d'erreur d'une exception LocationException.
    try
    {
        BlackBerryLocation myLocation =(BlackBerryLocation)myProvider
                .getLocation(-1);
        _longitude = myLocation.getQualifiedCoordinates().getLongitude();
        _latitude = myLocation.getQualifiedCoordinates().getLatitude();
        _modeUsed = myLocation.getGPSMode();
        switch (_modeUsed)
        {
            case LocationInfo.GEOLOCATION_MODE:
            case LocationInfo.GEOLOCATION_MODE_CELL:
            case LocationInfo.GEOLOCATION_MODE_WLAN:
                _mode = "Geolocation";
                break;
            default:
                _mode = "GPS";
        }    
        StringBuffer sb = new StringBuffer();
        sb.append("Longitude: ");
        sb.append(_longitude);
        sb.append("\n");
        sb.append("Latitude: ");
        sb.append(_latitude);
        sb.append("\n");
        sb.append("Mode: ");
        sb.append(_mode);
        String msg = sb.toString();
        showResults(msg);
    }
    catch (InterruptedException e)
    {
        showException(e);
    }
    catch (LocationException e)
    {
        showException(e);
    }
  9. Dans la méthode showResults, appelez invokeLater() pour ajouter une section de code à la file d'attente d'événement de l'application. Créez une instance de la classe Runnable et transmettez-la comme paramètre à invokeLater(). Remplacez run() dans la définition de Runnable. Appelez setText() avec la variable String pour indiquer les coordonnées obtenues pour LabelField.
    private void showResults(final String msg)
    {
        Application.getApplication().invokeLater(new Runnable()
        {
            public void run()
            {
                SingleFixScreen.this._coordLabel.setText(msg);
            }
        });
    }
  10. Dans la méthode showException, appelez invokeLater() pour ajouter une section de code à la file d'attente d'événement de l'application. Créez une instance de Runnable et transmettez-la comme paramètre à invokeLater(). Remplacez run() dans la définition de Runnable. Appelez Dialog.alert() pour créer une boîte de dialogue d'alerte, et transmettez le message d'erreur en appelant getMessage().
    private void showException(final Exception e) 
    {
        Application.getApplication().invokeLater(new Runnable()
        {
            public void run()
            {
                Dialog.alert(e.getMessage());
            }
        });
    }

Ces informations vous ont-elles été utiles ? Envoyez-nous vos commentaires.