Post on 25-Sep-2015
description
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 } }