Download - Géolocalisation Pour Android
-
7/24/2019 Golocalisation Pour Android
1/47
JMF (Tous droits rservs) 1
L'API Google de
golocalisation pour Android
Jean-marc FarinoneMatre de confrences
CNAM Paris
-
7/24/2019 Golocalisation Pour Android
2/47
JMF (Tous droits rservs) 2
La go!localisation " le
s#t$me GP% GPS = Global Positionning System
24 satellites tournant autour de la terre
(au moins)
et diffusant leur position et l'heure de diffusion
Un rcepteur !uip d'une horloge re"oit au moins 4 signau# de 4 satelliteset calcule alors sa position
prcision de $% & $ mtres (ersion standard)
source * http://fr.wikipedia.org/wiki/GPS
-
7/24/2019 Golocalisation Pour Android
3/47
JMF (Tous droits rservs) 3
La go!localisation "
l'Android's Net&or Location
Utilise les rseau# tlphoni!ues cellulaires et le +i,-i
.st plut/t conseill * utilise moins de puissance lectri!ue fonctionne &
l'intrieur et & l'e#trieur est plus rapide
source *http://developer.android.com/guide/topics/location/strategies.h
tml
-
7/24/2019 Golocalisation Pour Android
4/47
JMF (Tous droits rservs) 4
(tiliser les cartes de Google
Un des grands aantages d'0ndroid est de pouoir bnficier desprincipales applications d1& deloppes par Google 3'une d'ellesont les Google maps
oute une 0P5 permet d'utiliser ces cartes Google
6ette 0P5 2 est dsormais comprise dans l'0ndroid S78 9anager
3a ersion Google 9aps 0ndroid $ est officiellement dprcie le :dcembre 2$2 0prs le $; mars 2$: on ne peut plusreceoir une 0P5 8ey pour cette ersion (sourcehttps://developers.google.com/maps
/documentation/android/v1/) mais les apps les contenantpeuent continuer &
-
7/24/2019 Golocalisation Pour Android
5/47
JMF (Tous droits rservs) 5
La )i)liot*$+ue Google Maps
n utilise donc les Google 9aps 0ndroid 0P5 2 3a page d'accueil de cettetechnologie est & l'U>3https://developers.google.com/maps/documentation/android/
6ette 0P5 permet de manipuler des cartes terrestres 6es classes se trouentdans le pac?age com.google.android.gms.maps
Pour afficher une carte on utilise les fragments
6ette 0P5 gre les entres claier le @oom le toucher sur une carte affiche
n peut a1outer des dessins des images sur la carte
Pour utiliser cette 0P5 on doit
-
7/24/2019 Golocalisation Pour Android
6/47
JMF (Tous droits rservs) 6
Les tapes pour utiliser les
cartes de Google
Pour utiliser les cartes Google il faut suire les tapes suiantes *
$A) 6harger la biblioth!ue Google Play Serices S78
2A) >eprer cette biblioth!ue dans otre pro1et :A) btenir une 9aps 0P5 2 8ey
4A) 6onfigurer l'0ndroid9anifest#ml de l'application
%A) .crire une actiit demandant & afficher une carte Google
oute la procdure est indi!ue &https://developers.google.com/maps/documentation/a
ndroid/start
-
7/24/2019 Golocalisation Pour Android
7/47
JMF (Tous droits rservs) 7
A,ant de commencer
905S .UB C
DGoogle Play serices is not supported on the 0ndroid emulator E todeelop using the 0P5s you need to proide a deelopment deice
such as an 0ndroid phone or tabletD
source * http://developer.android.com/google/play-services/setup.html
Fref au 2$ mai 2$: il faut aoir une tablette ou un smartphonerel pour faire du deloppement n ne peut tester le codedelopp sur un mulateur (= 07)
-
7/24/2019 Golocalisation Pour Android
8/47
JMF (Tous droits rservs) 8
.! C*arger la )i)liot*$+ue
Google Pla# %er,ices %/0 12!
Fibliographie *https://developers.google.com/maps/documentation/a
ndroid/intro#sample_code
Pour charger ou rifier !ue ous ae@ les DGoogle Play sericesS78D lancer l'D0ndroid S78D (Dand 07D dans certaines ersions deplug,in) D9anagerD Pour cela *
soit cli!uer sur l'icone
soit +indoH I 0ndroid S78 9anager
-
7/24/2019 Golocalisation Pour Android
9/47
JMF (Tous droits rservs) 9
.! C*arger et configurer les
ser,ices Google Pla# %/0 312!
7escendre dans .#tras I Google Play serices *
3es installer si ce n'est pas le cas (slectionner et cli!uer 5nstall $pac?age puis accept puis 5nstall puis c'est bon)
-
7/24/2019 Golocalisation Pour Android
10/47
JMF (Tous droits rservs) 10
.! C*arger la )i)liot*$+ue
Google Pla# %er,ices %/0 212!
n doit obtenir *
source * http://code.google.com/intl/en/android/add-ons/google-apis/installing.html
-
7/24/2019 Golocalisation Pour Android
11/47
-
7/24/2019 Golocalisation Pour Android
12/47
JMF (Tous droits rservs) 12
3.! 4eprer cette )i)liot*$+ue
dans ,otre pro5et 316!
Parcourir le dis!ue pour trouer le rpertoire /extras/google/google_play_services/libproj
ect/google-play-services_lib
6li!uer 8
0.J5J ce n'est pas termin Cn a simplement charg cettebiblioth!ue dans l'espace de traail(Hor?space)
5l faut encore rfrencer cette
biblioth!ue dans le pro1et
-
7/24/2019 Golocalisation Pour Android
13/47
JMF (Tous droits rservs) 13
3.! 4eprer cette )i)liot*$+ue
dans ,otre pro5et 216!
0prs l'tape prcdente on a une configuration comme *
3a biblioth!ue google-play-services_libest bien dansl'espace de traail 9ais certains pro1ets (cf ci dessus) ne lesrfrencent pas
5l faut rfrencer cette bibliloth!ue dans le pro1et Pour cela oir &http://developer.android.com/tools/projects/projec
ts-eclipse.html#ReferencingLibraryProject
u e#plications diapos suiantes C
-
7/24/2019 Golocalisation Pour Android
14/47
JMF (Tous droits rservs) 14
3.! 4eprer cette )i)liot*$+ue
dans ,otre pro5et 716!
Pour rfrencer cette biblioth!ue google-play-services_libdans lepro1et *
a) slectionner otre pro1et cli!uer droit selectionner Properties
b) dans la fen
-
7/24/2019 Golocalisation Pour Android
15/47
JMF (Tous droits rservs) 15
3.! 4eprer cette )i)liot*$+ue
dans ,otre pro5et 816!
.n images cela donne *
a) b)
etc)
d)
-
7/24/2019 Golocalisation Pour Android
16/47
JMF (Tous droits rservs) 16
3.! 4eprer cette )i)liot*$+ue
dans ,otre pro5et 616!
e)
2.! 9)t i M API 3 0
-
7/24/2019 Golocalisation Pour Android
17/47
JMF (Tous droits rservs) 17
2.! 9)tenir une Maps API ,3 0e#
1:!
DJote* he Google 9aps 0ndroid 0P5 2 uses a neH system of managing?eys .#isting ?eys from a Google 9aps 0ndroid $ application commonly?noHn as 9apieH Hill not Hor? Hith the 2 0P5D (L)
DMou obtain a 9aps 0P5 ?ey from the Google 0P5s 6onsole by proiding yourapplication's signing certificate and its pac?age name nce you hae the?ey you add it to your application by adding an element to yourapplication's manifest file 0ndroid9anifest#mlD
Fon c'est clair non N
7e plus comme toute application 0ndroid est signe D9aps 0P5 ?eys arelin?ed to specific certificateOpac?age pairs rather than to users orapplicationsD
(L) source
https://developers.google.com/maps/documentation/android/start#getting_the_google_maps_android_api_v2
-
7/24/2019 Golocalisation Pour Android
18/47
JMF (Tous droits rservs) 18
2.! 9)tenir une Maps API ,3 0e#
31:!
3'e#pos ci dessous est fait aec le D7ebug 6ertificateD 6'est similaire pourle D>elease 6ertificateD (= cl de publication de l'application)
5l y a : tapes *
a) obtenir l'empreinte (rduit digest hascode ) SB0$ du certificat(de debug)
b) inscrire son pro1et (auprs de google)
c) obtenir une cl D0P5 ?eyD de google pour otre pro1et
(L) sourcehttps://developers.google.com/maps/documentation/android
/start#getting_the_google_maps_android_api_v2
2.! 9)tenir une Maps API ,3 0e#
-
7/24/2019 Golocalisation Pour Android
19/47
JMF (Tous droits rservs) 19
2 ! 9)tenir une Maps API ,3 0e#
21:!
a! empreinte %;A du certificat Fref aant tout et aant d'aoir obtenu une cl Google il faut un certificat
de l'entrep/t de cls
>appel (N) * un certificat contient essentiellement une cl publi!ue (et
souent des renseignements associs) Pour crer un certificat une cl publi!ue (associ & une cl prie) un
entrep/t de cls on utilise l'outil keytool 6e n'est pas de l'0ndroid c'estdu aa
Pour la cl debug l'entrep/t de cls se troue *
pour +indoHs ista et Q sousC:\Users\\.android\debug.keystore
pour +indoHs RP* C:\Documents andSettings\\.android\debug.keystore
pour S R and 3inu#* ~/.android/debug.keystore
2.! 9)tenir une Maps API ,3 0e#
-
7/24/2019 Golocalisation Pour Android
20/47
JMF (Tous droits rservs) 20
2 ! 9)tenir une Maps API ,3 0e#
71:!
a! empreinte %;A du certificat 3'entrep/t de la debug ?ey peut
-
7/24/2019 Golocalisation Pour Android
21/47
JMF (Tous droits rservs) 21
2 ! 9)tenir une Maps API ,3 0e#
81:!
a! empreinte %;A du certificat Pour crer une empreinte SB0$ d'un certificat on lance la commandekeytool -list -v -keystore
"arborescenceAmenantA\debug.keystore" -alias androiddebugkey
-storepass android -keypass android
-listpermet d'obtenir une empreinte du certificat cr
-alias nomDeCleest l'alias de cl gnr dans ce certificat
-keystore nomEntrepotDeClesprcise l'entrep/t de cls
-storepass motDePasseDeLEntrepotindi!ue le mot de passe de l'entrep/t
de cls .uh il derait plut/t
-
7/24/2019 Golocalisation Pour Android
22/47
JMF (Tous droits rservs) 22
p #61:!
a! empreinte %;A du certificat
.n rsum en lan"ant *keytool -list -v -keystore
arborescenceAmenantA\debug.keystore -alias
androiddebugkey -storepass android -keypass android
on obtient un rsultat comme *
3a cl SB0$ est celle commen"ant par 28:FB...
-
7/24/2019 Golocalisation Pour Android
23/47
2.! 9)tenir une Maps API ,3 0e#
-
7/24/2019 Golocalisation Pour Android
24/47
JMF (Tous droits rservs) 24
! p #
=1:!
c! o)tenir une cl >API e#> 0yant obtenu le certificat SB0$ (tape a)) et atteint le site Google0P5s (tape b)) & cette page de la DGoogle 0P5s 6onsoleD cli!uer0P5 0ccess
3es cls des anciens pro1ets apparaissent Pour aoir une cl pour lepro1et courant cli!uer le bouton D6reate neH 0ndroid ?eyD (et passur l'image D6reateD C)
2.! 9)tenir une Maps API ,3 0e#
-
7/24/2019 Golocalisation Pour Android
25/47
JMF (Tous droits rservs) 25
2 ! 9)tenir une Maps API ,3 0e#
?1:!
c! o)tenir une cl >API e#> Si ous oule@ une cl pour le pro1et courant cli!uer le bouton
D6reate neH 0ndroid ?eyD (et pas sur l'image D6reateD C)
n a alors la fen
-
7/24/2019 Golocalisation Pour Android
26/47
JMF (Tous droits rservs) 26
! p #
:1:!
c! o)tenir une cl >API e#> .n retour une nouelle entre dans la page 0P5 0ccess indi!ue l'0P5
?ey associe au couple (rduit SB0$Kpa!uetage) *
3a aleur 0P5 ?ey est celle commen"ant par AIza...
7.! Configurer AndroidManifest.xml
-
7/24/2019 Golocalisation Pour Android
27/47
JMF (Tous droits rservs) 27
7 ! Configurer AndroidManifest.xml
12!
5l y a beaucoup d'indications & mettre dans l'AndroidManifest.xml
7es permissions d'accs rseau *
7es indications d'utilisation d'penG3
7.! C fi
-
7/24/2019 Golocalisation Pour Android
28/47
JMF (Tous droits rservs) 28
7.! Configurer AndroidManifest.xml
312!
7es indications d'utilisation de rception de cartes gographi!ues
3'0P5 ?ey utilise
.idemment toutes ces indications & mettre comme fils de basilead!uate
oir &https://developers.google.com/maps/documentation/a
ndroid/start#specify_settings_in_the_application_m
anifest
-
7/24/2019 Golocalisation Pour Android
29/47
JMF (Tous droits rservs) 29
7.! (n AndroidManifest.xml212!
RRR
-
7/24/2019 Golocalisation Pour Android
30/47
JMF (Tous droits rservs) 30
8.! @crire une acti,it demandant
affic*er une carte Google
3e code de l'actiit est *
Peut on faire plus simple N
out est donc dans l'activity_main.xml!ui est *
import android.app.Activity;import android.os.Bundle;
public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}}
-
7/24/2019 Golocalisation Pour Android
31/47
JMF (Tous droits rservs) 31
@Bcution du programme >appelons !ue l'e#cution doit
-
7/24/2019 Golocalisation Pour Android
32/47
JMF (Tous droits rservs) 32
Mise 5our du smartp*one
.uh le code prcdent fonctionne si le smartphone est bien & 1our(ersion = 22) aec la biblioth!ue Google play serices n peutle rifier aec une autre application 0ndroid contenant le code *
Parfois (C) si la biblioth!ue Google play serices n'est pas prsenteune boite de dialogue est affiche pour la charger
source *http://stackoverflow.com/questions/13766592/androi
d-8-or-higher-check-for-google-play-services
n peut aussi rifier !u'on peut afficher des maps en lan"ant
l'application 9aps (merci -rdric)
int result = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
int SDK_INT = android.os.Build.VERSION.SDK_INT;Log.d("JMF", "version android = " + SDK_INT);
switch (result) {case ConnectionResult.SUCCESS :
Log.d("JMF", "GooglePlayServicesUtil.SUCCESS");
break;...}
Affic*er une carte centre sur
-
7/24/2019 Golocalisation Pour Android
33/47
JMF (Tous droits rservs) 33
Affic*er une carte centre sur
un point terrestre
3e code complet de l'actiit affichant les champs lyses est *import android.app.Activity;import android.os.Bundle;import android.util.Log;
import com.google.android.gms.maps.CameraUpdateFactory;import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.MapFragment;import com.google.android.gms.maps.model.LatLng;
public class MainActivity extends Activity {static final LatLng PARIS_CHAMPS_ELYSEES = new LatLng(48.870209,2.306268);private GoogleMap map;
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
if (map!=null){map.moveCamera(CameraUpdateFactory.newLatLngZoom(PARIS_CHAMPS_ELYSEES, 14));} else {
Log.v("JMF", "map == null");}
}}
-
7/24/2019 Golocalisation Pour Android
34/47
-
7/24/2019 Golocalisation Pour Android
35/47
JMF (Tous droits rservs) 35
Position sur un point terrestre Un ob1et de la classe CameraUpdateFactorymodlise un point de
ue
3es mthodes (toutes stati!ues) de cette classe modifie le point de
ue (@oom dplacement animation de dplacement ) 5l faututiliser ces mthodes aprs aoir test !ue getMap()a retournune aleur non null
3a mthodepublic static CameraUpdate newLatLngZoom (LatLng latLng, float
zoom)Dreturns a CameraUpdatethat moes the center of thescreen to a latitude and longitude specified by a LatLngob1ect andmoes to the gien @oom leelD
3a aleur de @oom est a1uste de 2 & 2$ (@oom ma#imal)
3a mthode public final void moveCamera(CameraUpdate update)de la classe GoogleMappositionne lepoint de ue indi!u par l'argument 3e mouement est instantat
Con,ersion adresse d'un point
-
7/24/2019 Golocalisation Pour Android
36/47
JMF (Tous droits rservs) 36
Con,ersion adresse d un point
terrestre en longitude latitude!
Utiliser google maps & http://maps.google.fr/
5ndi!ue@ l'adresse clic droit sur le point et item DPlus d'infos sur cetendroitD
3es coordonnes latitude longitude apparaissent & place del'adresse
Affic*er des mar+ueurs sur
-
7/24/2019 Golocalisation Pour Android
37/47
JMF (Tous droits rservs) 37
+
une carte
3e code complet de l'actiit affichant les champs lyses est *import android.app.Activity;import android.os.Bundle;import android.util.Log;
import com.google.android.gms.maps.*;import com.google.android.gms.maps.model.*;
public class MainActivity extends Activity {static final LatLng PARIS_CHAMPS_ELYSEES = new LatLng(48.870209,2.306268);static final LatLng GAUMONT_CHAMPS_ELYSEES = new LatLng(48.870386,2.306793);
private GoogleMap map;
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();
if (map!=null){map.moveCamera(CameraUpdateFactory.newLatLngZoom(PARIS_CHAMPS_ELYSEES, 14));
map.addMarker(new MarkerOptions().position(GAUMONT_CHAMPS_ELYSEES).icon(BitmapDescriptorFactory.fromResource(R.drawable.cinema)));
}}
}
-
7/24/2019 Golocalisation Pour Android
38/47
JMF (Tous droits rservs) 38
Mar+ueur >cli+ua)le> >simple>
S'il s'agit simplement d'a1outer une bulle d'aide aec titre et uncommentaire il suffit d'crire *
3es mthodes position(...) title(...) snippet(...)icon(...)retourne le MarkerOptionssur le!uel elles ont t
lances 7'oT l'enchainement des appels
map.addMarker(new MarkerOptions().position(GAUMONT_CHAMPS_ELYSEES)
.title("cinma gaumont")
.snippet("super le cinma")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.cinema)));
-
7/24/2019 Golocalisation Pour Android
39/47
-
7/24/2019 Golocalisation Pour Android
40/47
JMF (Tous droits rservs) 40
@Bercice
-aire afficher une actiit montrant une carte aec des mar!ueursiteractifs
-
7/24/2019 Golocalisation Pour Android
41/47
JMF (Tous droits rservs) 41
%treet Die& = Une application Google intressante !ui montre des photos
terrestres
0prs un clic sur un mar!ueur on peut utiliser ce serice dans uneapplication 0ndroid & l'aide du code *
n utilise l'U>5google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zo
om&mz=mapZoom
map.setOnMarkerClickListener(new OnMarkerClickListener() { @Override public boolean onMarkerClick(Marker marker) {
double laLatitudeTerrestreDuPoint = marker.getPosition().latitude;double laLongitudeTerrestreDuPoint = marker.getPosition().longitude;
String uri = "google.streetview:cbll="+laLatitudeTerrestreDuPoint+","+laLongitudeTerrestreDuPoint+"&cbp=1,99.56,,1,1&mz=21" ;
Intent streetView = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));(MainActivity.this).startActivity(streetView);
return false; }});
-
7/24/2019 Golocalisation Pour Android
42/47
JMF (Tous droits rservs) 42
(4I de %treet Die& 6'est l'U>5google.streetview:cbll=lat,lng&cbp=1,yaw,,pitch,zoom&mz=
mapZoom
3es champs cbp(non e#pli!u N) et mzsont facultatifsyawici gal a 99.56est la direction de ue mesure en degr depuis le
nord dans le sens des aiguilles d'une montre 5ci 99.56indi!ue l'estlgrement ers le sud
3es 2 irgules conscuties sont ncessaires pour des raisons decompatibilits aec des ersions prcdentes
pitchici gal & 1est l'angle par rapport a l'hori@ontal * -90pour une ueers le haut et 90ers le bas 1indi!ue une direction lgrement endessous de l'hori@ontal (ue humaine normale)
zoomest l'angle de ision 1est le @oom normal (= A)
mapZoomest la aleur de @oom des carttes Google
source * http://www.openintents.org/en/node/63
-
7/24/2019 Golocalisation Pour Android
43/47
JMF (Tous droits rservs) 43
@Bercice
3ors!ue l'utilisateur slectionne un mar!ueur une street ieH dulieu est affich
Ei)liograp*ie pour ce
-
7/24/2019 Golocalisation Pour Android
44/47
JMF (Tous droits rservs) 44
c*apitre 12! 3a page d'accueil de 9aps 0ndroid 0P5 2 *
https://developers.google.com/maps/documentation/a
ndroid/
3e tutorial de Google sur les 9aps 0ndroid 0P5 2 *https://developers.google.com/maps/documentation/a
ndroid/start
3e tutorial de 3ars ogel *
http://www.vogella.com/articles/AndroidGoogleMaps/article.html
5nstallation de la biblioth!ue Google play serices *https://developers.google.com/maps/documentation/a
ndroid/intro btenir une cl 9aps 0P5 2 *https://developers.google.com/maps/documentation/a
ndroid/start#the_google_maps_api_key
Ei)liograp*ie pour ce
-
7/24/2019 Golocalisation Pour Android
45/47
JMF (Tous droits rservs) 45
c*apitre 312!
3a documentation des classes Google 9aps 0ndroid *
http://developer.android.com/reference/com/google/
android/gms/maps/package-summary.html
Ei)liograp*ie pour ce
-
7/24/2019 Golocalisation Pour Android
46/47
JMF (Tous droits rservs) 46
c*apitre 313!
Pour street ieH * D>alisation de l'application tablissement scolaire
& destination des les sur le systme 0ndroidD Fistra >ay?oa
rapport interne 6J09 >SR2$% soutenu le 2 septembre 2$$
street ieH *http://stackoverflow.com/questions/3890453/android
-using-streetview-without-starting-an-intent
-
7/24/2019 Golocalisation Pour Android
47/47
JMF (Tous droits rservs) 47
Fin