Projet master reseux

29
1 UNIVERSITÉ SAINT- JOSEPH Faculté d’Ingénierie Institut National de la Communication et de l'Information Localisation d’un mobile et identification de l’opérateur/fournisseur d’accès Réalisé par : Antoine MOHANNA Encadré par : Dr. Marc IBRAHIM Rapport de Projet de Fin d’Année Master en systèmes et réseaux

description

Projet master reseux

Transcript of Projet master reseux

  • 1

    UNIVERSIT SAINT- JOSEPH

    Facult dIngnierie Institut National de la Communication et de l'Information

    Localisation dun mobile et identification de loprateur/fournisseur daccs

    Ralis par : Antoine MOHANNA

    Encadr par : Dr. Marc IBRAHIM

    Rapport de Projet de Fin dAnne Master en systmes et rseaux

  • 2

    Sommaire

    RemerciementsPage 3

    Introduction.Page 4

    Introduction sur Eclipse..Page 5

    Travail Effectue..Page 8 o Objectif 1...Page 8 o Objectif 2-3Page 10 o Objectif 4...Page 13 o Objectif 5...Page 15

    Conclusion..Page 19

    Annexes..Page 20

  • 3

    Remerciements

    Au terme de ce travail, je tiens exprimer ma gratitude et mes remerciements pour

    toutes les personnes qui ont contribu sa ralisation.

    Je tiens tout dabord remercier Dr Marc IBRAHIM, mon encadreur lInstitut National de Communication et de lInformation, pour son aide, ses conseils, son encouragement et son disponibilit dans ce projet.

    Je remercie galement M. Hadi SAWAYA, responsable et directeur de lINCI, pour son aide se familiariser avec ce projet.

    Je prsente mes sincres remerciements tous mes enseignants lINCI.

    Mes profonds remerciements pour les membres du jury, qui ont accept dvaluer ce travail.

  • 4

    Introduction au Projet

    Ce projet fait partie dun projet collaboratif lanc lESIB, et qui consiste crer un observatoire de lInternet au Liban. Cet observatoire collectera la qualit de service de lInternet perue par un ensemble dusagers mobiles sur le territoire libanais et permettra de gnrer des indicateurs de QoS par oprateur/ISP et par localisation gographique.

    Les mesures seront ralises par des agents installs sur les mobiles des usagers participants au

    projet, effectuant priodiquement des mesures passives et/ou actives afin de quantifier le plus

    fidlement possible lexprience internet de lusager. Ces mesures seront remontes vers un serveur central qui va traiter, stocker et analyser toutes ces donnes. Les rsultats des analyses

    seront disponibles via un site Web offrant plusieurs formes de visualisation.

    Afin davoir la distribution gographique de la QoS perue par les usagers, il est primordial que le mobile qui effectue la mesure un instant donne, identifi sa position gographique via GPS si

    possible. Mais en Indoor, le GPS peut ne pas fonctionner ce qui ncessite de trouver dautres mthodes pour estimer la position courante du mobile. En plus, la QoS doit tre relie

    loprateur ou ISP auquel est rattach le mobile au moment de la mesure. Il faut donc savoir identifier cette entit.

    Ainsi, plusieurs taches seront effectus dans ce projet afin daccomplir lobjectif de localisation :

    1. Extraction logicielle des coordonnes GPS du mobile 2. Estimation de la position en absence du GPS 3. Identification de loprateur mobile 4. Elaboration des mthodes didentifications de lISP quand le mobile est connect via Wifi 5. Groupement de tous les paramtres de localisation et didentification du fournisseur en un seul

    objet

    A noter que lapplication sera dveloppe sur Android, en utilisant un environnement de dveloppement appel Eclipse.

  • 5

    Introduction sur Eclipse

    Dans la programmation informatique, Eclipse est un environnement de dveloppement intgr

    multi-langue (IDE) comprenant un espace de travail de base et un extensible plug-in systme de

    personnalisation de l'environnement. Il est crit en Java. Il peut tre utilis pour dvelopper des

    applications en Java ainsi que d'autres langages de programmation dont Ada, C, C + +, COBOL,

    Fortran, Haskell, JavaScript, Perl, PHP, Python, R, Ruby ,Scala, Clojure, Groovy, Scheme, et

    Erlang.Eclipse peut galement tre utilis pour dvelopper des packages pour le logiciel

    Mathematica. Les environnements de dveloppement comprennent l'Eclipse Java Development

    Tools (JDT) pour Java et Scala, Eclipse CDT pour C / C + + et PHP pour Eclipse PDT, entre

    autres.

    Le code de base initial provient d'IBM VisualAge. Le kit dveloppement logiciel dEclipse (SDK), qui inclut les outils de dveloppement Java, est destin aux dveloppeurs Java. Les

    utilisateurs peuvent tendre ses capacits en installant des plug-ins crit pour la plate-forme

    Eclipse, tels que des botes outils de dveloppement pour d'autres langages de programmation,

    et peuvent crire et apporter leur propre modules plug-in.

    Publi selon les termes de la licence publique Eclipse, Eclipse SDK est gratuit et ouvert (mme

    si elle est incompatible avec la GNU General Public License). Il tait l'un des premiers

    environnements de dveloppement pour s'excuter sous GNU Classpath et il fonctionne sans

    problmes sous IcedTea.

    Plusieurs versions de Java ont t publies, de lEclipse Callisto lanc en 2006, lEclipse Juno de 2012, qui sera utilis dans ce projet.

    En crant an nouveau Android Application Project avec plusieurs sous dossiers, un package

    sous le nom com.example.NomDeLapplication sera aussi cr.

    Les packages sont utiliss dans Java pour prvenir les conflits de noms, pour contrler l'accs,

    pour rendre la recherche / localisation et l'utilisation des classes, interfaces, numrations et les

    annotations facile.

    Un package peut tre dfini comme un regroupement de types connexes (classes, interfaces,

    numrations et les annotations) assurant la protection d'accs et le nom de gestion de l'espace.

    Nous serons intresss principalement 3 fichiers : le fichier .java cr sous le dossier src, le

    fichier activity_main.xml sous le dossier res/layout et le fichier AndroidManifest.xml.

    Fichier .java :

    Cest la ou le code java sera dvelopp en crant des classes java. Cest partir dune classe que des objets individuels sont crs.

  • 6

    Une classe peut contenir plusieurs types de variables :

    1. Les variables locales : les variables dfinies l'intrieur des mthodes, des constructeurs ou des blocs sont appeles variables locales. La variable sera dclare et initialise dans la mthode et

    la variable sera dtruit lorsque la mthode est termine.

    2. Les variables d'instance : Les variables d'instance sont des variables au sein d'une classe, mais en dehors de toute mthode. Ces variables sont instancies lorsque la classe est charge. Les

    variables d'instance peuvent tre accessibles partir de l'intrieur de toute mthode,

    constructeur ou des blocs de cette classe particulire.

    3. Les variables de classe : Les variables de classe sont des variables dclares dans une classe, en dehors de toute mthode, avec le mot-cl static.

    Lors de la discussion sur les classes l'un des sous sujet le plus important serait les constructeurs.

    Chaque classe possde un constructeur. Si nous ne rdigeons pas explicitement un constructeur

    pour une classe le compilateur java construit un constructeur par dfaut pour cette classe.

    Chaque fois qu'un nouvel objet est cr au moins un constructeur sera invoqu. La rgle

    principale des constructeurs, c'est qu'ils doivent avoir le mme nom que la classe. Une classe

    peut avoir plusieurs constructeurs.

    Activity_main.xml :

    L'un des principaux avantages de dclarer une interface en XML est la possibilit de garder

    l'interface utilisateur et le comportement de lapplication spare, donnant la libert de modifier la prsentation de lapplication sans perturber son fonctionnement. Dans ce fichier, on peut faire le design de zro, dfinir l'lment racine, prciser la taille et les

    paramtres de largeur, et ajouter certains lments de l'interface utilisateur.

    Exemple :

  • 7

    AndroidManifest.xml:

    Chaque application doit avoir un fichier AndroidManifest.xml dans son rpertoire racine. Le

    manifest contient des informations essentielles sur l'application pour le systme Android, des

    informations que le systme doit avoir avant de pouvoir excuter n'importe quel code de

    l'application. Le fichier Manifest fait ce qui suit:

    1. Il nomme le package Java pour l'application. Le nom du package est utilis comme identifiant unique de l'application.

    2. Il dcrit les composants de l'application - les activits, les services, les rcepteurs de radiodiffusion et les fournisseurs de contenu que l'application est compose. Il nomme les

    classes qui implmentent chacune des composantes et publie leurs capacits (par exemple, les

    messages d'intention qu'ils peuvent manipuler). Ces dclarations laissent le systme Android

    savoir ce que les composants sont et dans quelles conditions ils peuvent tre lancs.

    3. Il dtermine les processus qui animeront les composants de l'application. 4. Il dclare les autorisations, la demande que doit avoir pour accder des parties protges de

    l'API et d'interagir avec d'autres applications.

    5. Elle dclare galement les autorisations sont ncessaires pour avoir afin d'interagir avec les

    composants de l'application.

    Ainsi, le AndroidManifest.xml sera mis a jour par le programmeur pour, principalement,

    initialiser des permissions tel que Access_Coarse_Location, Access_Fine_Location, Internet,

    Access_Network_State et Read_Phone_State qui seront utilises dans ce projet.

    Exemple :

  • 8

    Travail Effectu

    Objectif 1 : Extraction logicielle des coordonnes GPS du mobile

    Le Global Positioning System (GPS) que l'on peut traduire en franais par systme de localisation mondial ou, plus proche du sigle d'origine, Guidage Par Satellite est un systme de go localisation fonctionnant au niveau mondial. Le GPS comprend au moins 24

    satellites tournant 20 200 km d'altitude.

    Un rcepteur GPS qui capte les signaux d'au moins quatre satellites quips de plusieurs

    horloges atomiques peut, en calculant les temps de propagation de ces signaux entre les satellites

    et lui, connatre sa distance par rapport ceux-ci et, par trilatration, situer prcisment en trois

    dimensions n'importe quel point plac en visibilit des satellites GPS, avec une prcision de 3

    50 mtres pour le systme standard. Le GPS est ainsi utilis pour localiser des vhicules roulants,

    des navires, des avions, des missiles et mme des satellites voluant en orbite basse.

    Ce systme va tre utilis dans ce projet pour localiser un usager mobile en tirant sa longitude et

    sa latitude. Les classes principales qui seront utilises pour dvelopper un tel code sont

    android.location.Location, android.location.LocationListener et

    android.location.LocationManager.

    Android.Location.location est une classe de donnes reprsentant un emplacement gographique.

    Un emplacement peut consister en une latitude, longitude, horodatage, et d'autres informations

    telles que les roulements, l'altitude et la vitesse.

    LocationListener est utilis pour recevoir des notifications du LocationManager lorsque

    l'emplacement a t modifi.

    LocationManager fournit un accs des services de localisation du systme. Ces services

    permettent aux applications d'obtenir des mises jour priodiques de la situation gographique

  • 9

    de l'appareil, ou de tirer une intention lorsque l'appareil entre dans la proximit d'un lieu

    gographique donn.

    Partie du Code dvelopp :

    // Getting LocationManager object locationManager =

    (LocationManager)getSystemService(Context.LOCATION_SERVICE); // Getting the name of the provider provider = locationManager.GPS_PROVIDER; if(provider!=null && !provider.equals("")){ // Get the location from the given provider Location location =

    locationManager.getLastKnownLocation(provider); locationManager.requestLocationUpdates(provider, 20000, 1, this); if(location!=null)

    // Updating Location when changed onLocationChanged(location); else Toast.makeText(getBaseContext(), "Location can't be

    retrieved", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getBaseContext(), "No Provider Found",

    Toast.LENGTH_SHORT).show(); } } Les permissions exiges pour ce code seront ACCESS_FINE_LOCATION et INTERNET.

    Alors, le GPS est bas sur les estimations des satellites mettant des signaux vers le rcepteur. Un

    rcepteur GPS (en gnral) a besoin des signaux d'au moins 4 satellites pour pouvoir calculer sa

    position. Les niveaux de signal pour la bande L1 dans des conditions de ciel ouvert peut atteindre

    environ -130dBm. Les rcepteurs commerciaux, tels que ceux intgrs dans les tlphones mobiles,

    sont capables de suivre les satellites jusqu' -160dBm. Sous ce seuil, le rcepteur n'est pas capable

    d'utiliser le signal. Cette marge de 30 dB permet une certaine attnuation cause par des obstacles tels

    que les fentres en verre et les murs lgers, mais plusieurs immeubles masquent compltement les

    signaux de presque toutes les directions, ce qui rend GPS totalement indisponible. Et mme si

    l'attnuation permet au rcepteur d'utiliser les signaux pour calculer sa position, la prcision obtenue ne

    sera probablement pas suffisante pour notre application comme la prcision est dgrade par

    l'attnuation du signal.

    Ainsi, un autre type de localisation est exig pour rendre la position des usagers plus prcise : on

    parle dune localisation par cellules GSM dune part, et lutilisation dun service Google pour dterminer approximativement la latitude et la longitude dun mobile dune part.

  • 10

    Objectif 2-3: Estimation de la position en absence du GPS et Identification de loprateur mobile

    Solution 1 : Estimation de la position en utilisant le service de NETWORK_PROVIDER

    NETWORK_PROVIDER utilise les hotspots WiFi et les tours cellulaires connus par Android

    afin de localiser approximativement un utilisateur en longitude et latitude. Lorsque le fournisseur

    d'emplacement est interrog, les ID des hotspots WiFi et les tours cellulaires dans la zone sont

    envoys via Internet Google Location Server, une base de donnes avec des informations de

    localisation sur les hotspots WiFi et les tours cellulaires. Google Location Server renvoie une

    localisation approximative de l'utilisateur.

    Les donnes proviennent d'une combinaison de cellules et de l'information de hotspot WiFi, et ne

    peut tre obtenue que lorsque l'appareil peut accder l'Internet pour interroger le Google

    Location Server. La prcision des donnes est spcifie quelque part entre 100 - 1000 m en

    fonction de l'information disponible. Les Hotspots WiFi permettent une prcision de 100 - 500

    m, tandis que les tours cellulaires ne permettent quune prcision suprieure 500 m. Cela signifie que le fournisseur de rseau sera trs imprcis dans des zones sans hotspots WiFi.

    Inversement, plus les Hotspots et les tours cellulaires sont dans la zone, plus la prcision est

    grande.

    Un tableau comparatif entre GPS_PROVIDER et NETWORK_PROVIDER

    GPS_PROVIDER NETWORK_PROVIDER

    Plus Prcis. Dtermine la location dun utilisateur en utilisant les tours cellulaires et signaux Wifi

    Il fonctionne uniquement l'extrieur Fournit des informations sur l'emplacement

    d'une manire qui fonctionne l'intrieur et

    l'extrieur

    Il consomme rapidement l'nergie de la batterie Consomme moins d'nergie de la batterie

    Rponse de localisation lente Rponse de localisation rapide

    Pour implmenter ce service, on doit juste remplacer GPS_PROVIDER du code de localisation

    GPS par NETWORK_PROVIDER. provider = locationManager.NETWORK_PROVIDER;

    Dans ce qui suit, un code sera dtaill en expliquant comment utiliser les deux providers en

    alternance. Malgr la plus grande prcision que le GPS offre, toutefois le service Google

    prsente une meilleure disponibilit.

  • 11

    Solution 2 : Estimation de la position dans une cellule GSM

    Un systme de radiotlphonie utilise une liaison radiolectrique entre le terminal portatif et le

    rseau tlphonique. La liaison radio entre le tlphone mobile et le rseau doit tre de qualit

    suffisante, ce qui ncessite la mise en place d'un ensemble de stations de base (BTS) sur

    l'ensemble du territoire que l'on souhaite couvrir, de telle sorte que le terminal soit toujours

    moins de quelques kilomtres de l'une d'entre elles. Ce que l'on appelle une cellule, c'est la

    surface sur laquelle le tlphone mobile peut tablir une liaison avec une station de base

    dtermine. Le principe consiste diviser une rgion en un certain nombre de cellules desservies

    par un relais radiolectrique (la BTS) de faible puissance, mettant des frquences diffrentes

    de celles utilises sur les cellules voisines. Ces cellules doivent tre contigus sur la surface

    couverte.

    Ce systme GSM peut ainsi tre utilise pour localiser un usager mobile dans une cellule, comme

    chaque cellule aura sa propre identit et sera unique chez chaque oprateur mobile.

  • 12

    Pour dvelopper un tel code, on utilisera deux classes principales :

    android.telephony.TelephonyManager et android.telephony.gsm.GsmCellLocation.

    android.telephony.TelephonyManager permet d'accder l'information sur les services

    tlphonie de l'appareil. Les applications peuvent utiliser les mthodes de cette classe afin

    d'accder certains types de renseignements sur les abonns. Les applications peuvent galement

    enregistrer un Listener pour recevoir la notification de changements d'tat de tlphonie.

    android.telephony.gsm.GsmCellLocation reprsente l'emplacement de cellule sur un tlphone

    GSM.

    Partie du Code dvelopp :

    //retrieve a reference to an instance of TelephonyManager TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation(); // Defining LAC, CID, MNC and MCC String networkOperator = telephonyManager.getNetworkOperator(); String mcc = networkOperator.substring(0, 3); String mnc = networkOperator.substring(3); String operator = telephonyManager.getSimOperatorName(); int cid = cellLocation.getCid(); int lac = cellLocation.getLac();

    Les permissions exiges pour ce code seront ACCESS_COARSE_LOCATION et

    READ_PHONE_STATE.

    Ainsi, en utilisant getSimOperator() et getCellLocation(), on a pu tirer lidentit de la cellule o se trouve lusager mobile ainsi que le nom de loprateur fournissant le rseau GSM cet usager.

  • 13

    Objectif 4 : Elaboration des mthodes didentifications de lISP quand le mobile est connect via Wifi

    Un fournisseur d'accs internet est un organisme offrant une connexion Internet. Le

    raccordement dun ISP l'utilisateur peut se faire au travers d'une boucle locale (en cuivre, en fibre optique ou en radio). Cette boucle locale est gnralement gre par un oprateur

    spcifique.

    Plusieurs ISP oprent sur le territoire libanais : OGERO, SODETEL, CYBERIA, WISE,

    TERRANET etc., et plusieurs sites Web offrent le service de lidentification de ces ISP tel que http://whatismyipaddress.com/ ou http://findmyipaddress.com/.

    Ainsi, ces sites seront utiles pour notre application afin didentifier le fournisseur de chaque usager.

    Notre code consiste accder lun de ces sites et tirer le nom de lISP. NB : Le URL utilis sera http://www.ip2phrase.com/ip2phrase.asp?template=%20%3CISP%3E

    Les classes principales utilises pour dvelopper un tel code sont nombreuses, parmi

    elles java.io.InputStream , java.net.HttpURLConnection , java.net.URL , java.util.regex.Matcher

    , java.util.regex.Pattern etc.

    Partie du Code dvelopp : // Define the URL from which were extracting the ISP name public static final String URL = "http://www.ip2phrase.com/ip2phrase.asp?template=%20%3CISP%3E"; // Retrieving URL output private class GetXMLTask extends AsyncTask { @Override protected String doInBackground(String... urls) { String output = null; for (String url : urls) { output = getOutputFromUrl(url); } return output; } // Retrieving The ISP name private String getOutputFromUrl(String url) { StringBuffer output = new StringBuffer(""); int x =1;//ISP name included here //String StartDelemiter=">"; //String EndDelemiter="

  • 14

    Pattern p = Pattern.compile(">(.*?)

  • 15

    Objectif 5 : Groupement de tous les paramtres de localisation et didentification du fournisseur en un seul objet

    Cet objectif va faciliter le travail dun autre programmeur qui sintresse seulement aux variables tires par ces codes, mais pas les codes JAVA (Longitude, latitude, cellID, oprateur et ISP).

    Afin de passer seulement ces variables, on doit grouper ces paramtres et leurs fonctions dans un

    seul projet, faire un EXPORT de ce projet dans un JAR file qui sera pass au programmeur. Ce

    dernier doit intgrer ce JAR file dans la librairie de son propre projet (Right-Click sur le projet ->

    Build Path -> Configure Build Path -> Librairies -> Add External JARs), et puis il sera capable

    dappeler ces fonctions et tirer les valeurs quil dsire, en faisant un simple import dans son projet.

    Pour faire cela, un changement a t ncessaire sur les codes dj dvelopps, implmenter des

    fonctions afin dappeler chacune pour tirer les valeurs diffrentes.

    Code mis jour :

    Une fonction getSimOperator() a t crer qui rend une valeur String contenant le nom de

    loprateur GSM. public String getSimOperator() { TelephonyManager telephonyManager = (TelephonyManager)gContext.getSystemService(Context.TELEPHONY_SERVICE); String operator = telephonyManager.getSimOperatorName(); return operator; }

    Linitialisation du CellLocation sera faite dans une fonction getCellLocation alors que lID de la cellule auquel est connect lusager mobile sera tir dune fonction differente CellLacLocation qui va rendre une valeur String contenant lID de cette cellule ainsi que le LAC. public GsmCellLocation getCellLocation() { TelephonyManager telephonyManager = (TelephonyManager)gContext.getSystemService(Context.TELEPHONY_SERVICE); GsmCellLocation CellLocation = (GsmCellLocation)telephonyManager.getCellLocation(); return CellLocation; } public String CellLacLocation(GsmCellLocation CellLocation){ String cidlacString; if (CellLocation != null) { int cid = CellLocation.getCid(); int lac = CellLocation.getLac(); cidlacString = "CellID:" + cid + "\nLAC:" + lac;} else { cidlacString="No Cell Location Available"; } return cidlacString; }

  • 16

    Concernant la localisation GPS, et similairement la localisation GSM, linitialisation sera faite dans une fonction getLocation() alors que les longitudes et les latitudes seront tires dune autre

    fonction updateWithNewLocation() qui va retourn une valeur String de ces valeurs.

    De plus, on doit implmenter GPS_PROVIDER et NETWORK_PROVIDER en mme temps,

    pour assurer la fois une prcision et une disponibilit. Alors, une commande IF va tre cre. Si

    une connexion GPS est valable, et on peut se localiser, alors un se localise en utilisant

    GPS_PROVIDER ; mais dans un cas contraire alors on utilisera NETWORK_PROVIDER. public Location getLocation(){ String provider = null; LocationManager locationManager; Location gps_loc=null; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)gContext.getSystemService(context); gps_loc=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); try{gps_enabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){} try{network_enabled=locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){} if(gps_enabled && gps_loc != null){ provider = LocationManager.GPS_PROVIDER; } else{ provider = LocationManager.NETWORK_PROVIDER; } Location location = locationManager.getLastKnownLocation(provider); locationManager.requestLocationUpdates(provider, 20000, 1, this); return location; } public String updateWithNewLocation(Location location) { String latLongString; if (location != null){ double lat = location.getLatitude(); double lng = location.getLongitude(); latLongString = "Latitude:" + lat + "\nLongitude:" + lng; }else{ latLongString = "No Location available"; } return latLongString; }

    En addition, le programmeur va sintresser si le mobile de lusager a t localiser par GPS ou NETWORK, alors, une fonction getProvider() supplmentaire va tre dvelopper qui va rendre

    une de deux valeur : gps en cas de localisation par GPS_PROVIDER et network en cas de

    localisation NETWORK_PROVIDER.

  • 17

    public String getProvider(Location location){ String provider = null; LocationManager locationManager; Location gps_loc=null; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)gContext.getSystemService(context); gps_loc=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); if(gps_enabled && gps_loc != null ){ provider = LocationManager.GPS_PROVIDER; } else{ provider = LocationManager.NETWORK_PROVIDER; } return provider; }

    Et bien sur la fonction getOutputFromURL() va tre utiliser pour tirer lidentit de lISP. public String getOutputFromUrl(String url) { StringBuffer output = new StringBuffer(""); int x =1; //String StartDelemiter=">"; //String EndDelemiter="(.*?)

  • 18

    Appel de la fonction getLocation(): Location location = MU.getLocation();

    Initialisation de location de la cellule: GsmCellLocation CellLocation = MU.getCellLocation();

    Dfinition de lURL dou va tre tire le nom de lISP: String URL = LocationMobileUser.URL;

    Initialisation de la classe utilise pour la dfinition de lISP: LocationMobileUser.GetXMLTask xmlp = MU.new GetXMLTask();

    Dfinition des String qui vont contenir les diffrentes valeurs de localisation: String isp = xmlp.getOutputFromUrl(URL); String latLongString = MU.updateWithNewLocation(location); String cidlacString = MU.CellLacLocation(CellLocation); String operator = MU.getSimOperator(); String provider = MU.getProvider();

  • 19

    Conclusion

    Dans le cadre de mon projet, je devais raliser une application Android pour la

    localisation dun mobile et identification de loprateur/fournisseur daccs. Dans un premier temps, quelques recherches ont t ncessaires pour sintroduire Eclipse et se familiariser avec ce programme. Ensuite jai commenc par le dveloppement de lapplication en programmant une application pour chaque objectif. Enfin, dernier objectif demand, jai group toute les applications dveloppes en un seul projet, et mis jour les codes pour tre capable de lutiliser comme rfrence pour des futurs projets.

    A travers les diffrentes exigences imposes par le cahier des charges ; un rsultat final a

    t accompli qui est le suivant : le dveloppement dune application android qui permet la localisation dun mobile par longitude et latitude, cellule GSM, et lidentification de loperateur mobile ainsi que le fournisseur daccs tout en regroupant ces paramtres en un seul objet.

    Ce projet ma permis dappliquer mes connaissances en programmation et en langage Java et den dvelopper une application qui se rvle aujourdhui dintrt gnral au vu de laugmentation des marchs des applications sur les diffrentes plateformes des mobiles.

    Comme d'autres applications Android, mon application peut tre aisment amliore. En

    effet, grce son aspect ouvert, Android offre l'opportunit de crer des logiciels mobiles

    innovants et rvolutionnaires en encourageant les dveloppeurs puiser dans leur imagination et

    mobiliser toutes leurs comptences pour un meilleur de cette plateforme.

  • 20

    Annexes

    Annexe 1: Application qui affiche les coordonnes GPS

    import android.app.Activity; import android.content.Context; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.view.Menu; import android.widget.TextView; import android.widget.Toast;

    public class MainActivity extends Activity implements LocationListener{ LocationManager locationManager ; String provider;

    @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Getting LocationManager object locationManager =

    (LocationManager)getSystemService(Context.LOCATION_SERVICE);

    // Creating an empty criteria object Criteria criteria = new Criteria(); // Getting the name of the provider that meets the criteria provider = locationManager.getBestProvider(criteria, false); if(provider!=null && !provider.equals("")){

    // Get the location from the given provider Location location =

    locationManager.getLastKnownLocation(provider);

    locationManager.requestLocationUpdates(provider, 20000, 1, this); if(location!=null) onLocationChanged(location); else Toast.makeText(getBaseContext(), "Location can't be

    retrieved", Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(getBaseContext(), "No Provider Found",

    Toast.LENGTH_SHORT).show(); }

  • 21

    } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onLocationChanged(Location location) { // Getting reference to TextView tv_longitude TextView tvLongitude = (TextView)findViewById(R.id.tv_longitude); // Getting reference to TextView tv_latitude TextView tvLatitude = (TextView)findViewById(R.id.tv_latitude);

    // Setting Current Longitude tvLongitude.setText("Longitude:" + location.getLongitude());

    // Setting Current Latitude tvLatitude.setText("Latitude:" + location.getLatitude() ); }

    @Override public void onProviderDisabled(String provider) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String provider) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String provider, int status, Bundle extras) { // TODO Auto-generated method stub } }

  • 22

    Annexe 2: Application qui affiche la location par GSM et loprateur import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.telephony.TelephonyManager; import android.telephony.gsm.GsmCellLocation; import android.widget.TextView; public class AndroidTelephonyManager extends Activity { public class OpenCellID { String mcc; //Mobile Country Code String mnc; //mobile network code String cellid; //Cell ID String lac; //Location Area Code String operator; public void setMcc(String value){ mcc = value; } public void setMnc(String value){ mnc = value; } public void setCallID(int value){ cellid = String.valueOf(value); } public void setCallLac(int value){ lac = String.valueOf(value); } public void setOperator(String value){ operator = value; } } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); TextView textMCC = (TextView)findViewById(R.id.mcc); TextView textMNC = (TextView)findViewById(R.id.mnc); TextView textCID = (TextView)findViewById(R.id.cid); TextView textLAC = (TextView)findViewById(R.id.lac); TextView textop1 = (TextView)findViewById(R.id.op1); //retrieve a reference to an instance of TelephonyManager

  • 23

    TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); GsmCellLocation cellLocation = (GsmCellLocation)telephonyManager.getCellLocation(); String networkOperator = telephonyManager.getNetworkOperator(); String mcc = networkOperator.substring(0, 3); String mnc = networkOperator.substring(3); textMCC.setText("mcc: " + mcc); textMNC.setText("mnc: " + mnc); String op1 = telephonyManager.getSimOperatorName(); textop1.setText("Operator: " + op1); int cid = cellLocation.getCid(); int lac = cellLocation.getLac(); textCID.setText("gsm cell id: " + String.valueOf(cid)); textLAC.setText("gsm location area code: " + String.valueOf(lac)); } }

  • 24

    Annexe 3: Application qui affiche lISP import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener { Button button; TextView outputText; public static final String URL = "http://www.ip2phrase.com/ip2phrase.asp?template=%20%3CISP%3E"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewsById(); button.setOnClickListener(this); } private void findViewsById() { button = (Button) findViewById(R.id.button); outputText = (TextView) findViewById(R.id.outputTxt); } public void onClick(View view) { GetXMLTask task = new GetXMLTask(); task.execute(new String[] { URL }); } private class GetXMLTask extends AsyncTask { @Override protected String doInBackground(String... urls) { String output = null; for (String url : urls) { output = getOutputFromUrl(url); } return output; }

  • 25

    private String getOutputFromUrl(String url) { StringBuffer output = new StringBuffer(""); int x =1; try { InputStream stream = getHttpConnection(url); LineNumberReader lnr = new LineNumberReader(new InputStreamReader(stream)); String line = ""; int lineNo; for (lineNo = 1; lineNo < 90; lineNo++) { if (lineNo == x) { line = lnr.readLine(); //output.append(line); Pattern p = Pattern.compile(">(.*?)

  • 26

    Annexe 4: Application qui groupe tous les paramtres de localisation et didentification du fournisseur en un seul objet

    import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.LineNumberReader; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLConnection; import java.util.regex.Matcher; import java.util.regex.Pattern; import android.content.Context; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.AsyncTask; import android.os.Bundle; import android.telephony.TelephonyManager; import android.telephony.gsm.GsmCellLocation; import android.view.View; public class LocationMobileUser implements LocationListener { //Context mContext; Context gContext; boolean gps_enabled=false; boolean network_enabled=false; public LocationMobileUser(Context gContext){ //this.mContext = mContext; this.gContext = gContext; } public static final String URL = "http://www.ip2phrase.com/ip2phrase.asp?template=%20%3CISP%3E"; public void XML (View view) { GetXMLTask task = new GetXMLTask(); task.execute(new String[] { URL }); } public class GetXMLTask extends AsyncTask { @Override protected String doInBackground(String... urls) { String output = null; for (String url : urls) { output = getOutputFromUrl(url); } return output; } public String getOutputFromUrl(String url) { StringBuffer output = new StringBuffer(""); int x =1; //String StartDelemiter=">";

  • 27

    //String EndDelemiter="(.*?)

  • 28

    String operator = telephonyManager.getSimOperatorName(); return operator; } public GsmCellLocation getCellLocation() { //String Context=Context.Telephony_SERVICE; TelephonyManager telephonyManager = (TelephonyManager)gContext.getSystemService(Context.TELEPHONY_SERVICE); GsmCellLocation CellLocation = (GsmCellLocation)telephonyManager.getCellLocation(); return CellLocation; } public Location getLocation(){ String provider = null; LocationManager locationManager; Location gps_loc=null; String context = Context.LOCATION_SERVICE; locationManager = (LocationManager)gContext.getSystemService(context); gps_loc=locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); try{gps_enabled=locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);}catch(Exception ex){} try{network_enabled=locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);}catch(Exception ex){} if(gps_enabled && gps_loc != null){ provider = LocationManager.GPS_PROVIDER; } else{ provider = LocationManager.NETWORK_PROVIDER; } Location location = locationManager.getLastKnownLocation(provider); locationManager.requestLocationUpdates(provider, 20000, 1, this); return location; } public String getProvider(){ String provider = null; if(gps_enabled){ provider = LocationManager.GPS_PROVIDER; } else{ provider = LocationManager.NETWORK_PROVIDER; } return provider; } public String CellLacLocation(GsmCellLocation CellLocation){ String cidlacString; if (CellLocation != null) {

  • 29

    int cid = CellLocation.getCid(); int lac = CellLocation.getLac(); cidlacString = "CellID:" + cid + "\nLAC:" + lac;} else { cidlacString="No Cell Location Available"; } return cidlacString; } public String updateWithNewLocation(Location location) { String latLongString; if (location != null){ double lat = location.getLatitude(); double lng = location.getLongitude(); latLongString = "Latitude:" + lat + "\nLongitude:" + lng; }else{ latLongString = "No Location available"; } return latLongString; } @Override public void onLocationChanged(Location arg0) { // TODO Auto-generated method stub } @Override public void onProviderDisabled(String arg0) { // TODO Auto-generated method stub } @Override public void onProviderEnabled(String arg0) { // TODO Auto-generated method stub } @Override public void onStatusChanged(String arg0, int arg1, Bundle arg2) { // TODO Auto-generated method stub } }