Géolocalisation Pour Android

Embed Size (px)

Citation preview

  • 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