Guide de développement

Local Navigation

Récupérer la position d'un terminal à l'aide du service de géolocalisation

Les étapes suivantes expliquent comment créer une application d'interface utilisateur fournissant la position du terminal BlackBerry à l'aide du service de géolocalisation.

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 GeolocationScreen, décrite à l'étape 3, représente l'écran personnalisé.
    public final class GeolocationDemo extends UiApplication
    {
        public static void main(String[] args)
        {
            GeolocationDemo theApp = new GeolocationDemo();
            theApp.enterEventDispatcher();
        }
        public GeolocationDemo() 
        {
            pushScreen(new GeolocationScreen());
        }
    }
  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 qui s'affichent à l'écran. Créez deux variables double pour stocker les valeurs de latitude et de longitude.
    class GeolocationScreen extends MainScreen
    {
        private LabelField _coordLabel;
        private double _latitude;
        private double _longitude;
    }
  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 GeolocationScreen() 
    {
        super(DEFAULT_CLOSE | DEFAULT_MENU);
        setTitle(new LabelField("Geolocation 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 géolocalisation du terminal. Appelez Field.setChangeListener() pour détecter les modifications du bouton. Appelez findGeolocation(), 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 geolocButton = new ButtonField("Get geolocation", 
            ButtonField.CONSUME_CLICK);
    geolocButton.setChangeListener(new FieldChangeListener()
        {
            public void fieldChanged(Field field, int context)
            {
                findGeolocation();
            }
        });
    add(geolocButton);
    this._coordLabel = new LabelField();
    add(this._coordLabel);
  6. Créez le cadre de la méthode findGeolocation. 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 de géolocalisation. Dans run(), créez un bloc try/catch pour indiquer le mode de géolocalisation. Créez une instance de la classe BlackBerryCriteria en appelant BlackBerryCriteria() et en transmettant LocationInfo.GEOLOCATION_MODE comme mode de récupération des informations de géolocalisation. Dans le bloc catch, appelez showException(), comme décrit à l'étape 10, pour afficher le message d'erreur d'une exception UnsupportedOperationException.
    private void findGeolocation()
    {
        this._coordLabel.setText("");
        Thread geolocThread = new Thread() 
        {
            public void run() 
            {
                try
                {
                    BlackBerryCriteria myCriteria = new BlackBerryCriteria(
                            LocationInfo.GEOLOCATION_MODE);
                } 
                catch (UnsupportedOperationException e) 
                {
                   showException(e);
                }
            }
        };
        geolocThread.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. Créez une instance de la classe StringBuffer et ajoutez les coordonnées obtenues 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();
        StringBuffer sb = new StringBuffer();
        sb.append("Longitude: ");
        sb.append(_longitude);
        sb.append("\n");
        sb.append("Latitude: ");
        sb.append(_latitude);
        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()
            {
                GeolocationScreen.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.