Localisez-vous par GPS avec votre téléphone

Abonnements, magazines... Notre catalogue complet au bas de cette page.

Jusqu’à présent, la localisation d’un téléphone portable était l’apanage de services d’opérateurs spécialisés et l’utilisation d’un récepteur GPS était réservée aux PDA. La généralisation du Bluetooth sur les récepteurs GPS et sur les téléphones change désormais la donne.

La nouvelle génération de téléphones mobiles offre à la fois des possibilités multimédia : écran couleur, sons polyphoniques, une connectivité multiple : Bluetooth, Infrarouge et GSM, ainsi que de nombreux périphériques spécialisés (caméra, lecteur video, radio, ...). Pour que le développeur puisse exploiter ces fonctionnalités, l'environnement Java pour les Mobiles (J2ME) s'est enrichi d’interfaces définies par des JSR permettant de les contrôler. Ces spécifications ont été adoptées par les principaux constructeurs des terminaux qui les ont intégrées dans les machines virtuelles Java de leurs téléphones. L’article présente différents composants utilisés dans une application Java de localisation utilisant un récepteur GPS et comment contourner les limitations de l’implémentation J2ME de Java. Les différents modules ont été développés pour un téléphone Nokia 6230i et un récepteur GPS Holux GR231, mais s’appliquent aux mobiles supportant le JSR 82 avec un profil MIDP 2.0.

Le système GPS Le GPS (Global Positioning System) est un système de positionnement qui utilise une constellation de satellites et un récepteur qui analyse les signaux des satellites et en déduit sa position. L’équipement informatique se connecte au récepteur GPS par une liaison série. Tant que la connexion de ces boîtiers a reposé sur un câble série : RS232 ou USB, l’interconnexion entre le récepteur GPS et le téléphone était d’un point de vue pratique difficile à mettre en oeuvre. Le récepteur GPS Bluetooth a permis de s’affranchir de cette difficulté : la connexion série se faisant par voie radio. Les équipements GPS utilisent différents protocoles applicatifs sur le lien série. Le standard le plus répandu est le NMEA 01 83. Le protocole est normalisé par le NMEA (National Marine Electronics Association) qui en fournit une spécification complète.

La communication Bluetooth La première étape pour faire communiquer un récepteur GPS Bluetooth avec le téléphone mobile consiste à mettre en oeuvre Bluetooth dans la machine virtuelle Java du téléphone. L’API Bluetooth pour Java (JSR 82) offre les fonctionnalités pour la communication de données Bluetooth. Pour garantir le fonctionnement entre applications, Bluetooth a normalisé des profils de fonctionnement des applications : PPP, IP, OBEX... Dans le cas de la communication GPS, le profil de base associé au lien série (SPP) est le seul nécessaire. La communication va s’établir en quatre temps: • Identification de l’équipement GPS • Identification du service de lien " série " • Détermination de l’URL de connexion • Connexion

La première étape est la détermination des équipements à portée du téléphone, pour cela il faut mettre en oeuvre l’agent de recherche d’équipement Bluetooth qui existe dans la JVM et faire démarrer la recherche :

LocalDevice.getLocalDevice().getDiscoveryAgent().startInquiry (Discovery Agent.GIAC, discoveryListener)

Les périphériques découverts sont notifiés de façon asynchrone (car la recherche peut prendre du temps) à l’objet discoveryListener que l’on a fourni en paramètre au startInquiry. L’agent fournit une description de l’équipement découvert : remoteDevice et la classe d’équipement : remoteClass auquel il appartient. remoteDevice permet de récupérer le Friendly Name qui est le nom interne de l’équipement distant. Le Friendly Name est un nom géré dans l’équipement distant. Pour le récupérer, la JVM doit le demander au distant, par la suite elle gère un cache de ces noms. Cette requête ne doit pas être effectuée dans la méthode de notification. La remoteClass contient les caractéristiques de l’équipement, elle contient trois attributs :
• La classe majeure qui donne le type d’équipement : PC, téléphone…
• La classe majeure qui donne le sous-type : PC Portable, PC de bureau …
• La classe de service qui donne le type de fonctions rendues par l’équipement : réseau, video, audio …

Par manque de prévoyance, la fonctionnalité GPS n’est pas prévue dans la nomenclature standardisée pour la classe d’équipement majeure. Pour reconnaître le récepteur GPS, il faut se baser sur le nom qu’il déclare lui même : FriendlyName, ce qui peut conduire à un résultat variable en fonction du fabricant. Normalement, le GPS va indiquer son nom commercial, par exemple :

" Holux GR 231 ".

Une fois l’équipement identifié, il faut trouver les services disponibles pour cet équipement. C’est le rôle du protocole de découverte de services (SDP). Le SDP va retrouver le Service Record qui contient la description du service. Les Service Records sont obtenus par un mécanisme de recherche asynchrone, similaire à celui de la recherche d’équipements :

LocalDevice.getLocalDevice().getDiscoveryAgent().searchServices(new int[] { 0, 1, 2, 3, 0x100, 0x101, 0x102 }, new UUID[] { new UUID(0x0100) }, remoteDevice, discoveryListener);
S'ABONNER
Egalement au sommaire de :
Programmez! #88