<commit_before>---
layout: post
title: Ajouter la géolocation à votre application Android (2/2)
categories: [tech]
tags: [android, java, géolocalisation, location API, android studio, application mobile, google, développement]
author: fabrice_kiki
comments: true
fullview: false
description: Intégrer la géolocalisation à votre application mobile Android, pour proposant aux utilisateurs des informations et services, relatifs à leur position géographique et à leur environnement.
---
### Problématique :
Renouveller automatiquement les informations sur la position de l'utilisateur, en temps réel.

### Pré requis
Avoir une certaine connaissance de l’IDE (Envionnement de développement Intégré) [Android Studio](https://developer.android.com/studio/index.html). Intégrer à votre projet, une API de localisation fournie par Google Play Services (G.P.S.) , en ajoutant ce qui suit au fichier app.gradle : {% highlight bash %}compile 'com.google.android.gms:play-services-location:11.0.2'{% endhighlight%}. Intégrer un gestionnaire de permissions à la volée pour Android M et plus, en ajoutant ce qui suit au fichier app.gradle : {% highlight bash %}compile 'com.karumi:dexter:4.1.0'{% endhighlight%}. Le code source comptet opérationnel sera affiché à la fin du tutoriel.

### Démaarer l'actualisation de la position 
 Dans le [précédent billet] (<http://blog.qanbio.com/tech/2017/07/10/ajouter-la-geolocation-aux-applis-android.html>), une application utilise Google Play Services pour identifier la position actuelle d'un utilisateur, obtenue en invoquant la méthode  **getLastLocation()** sur un client de localisation de type **FusedLocationProviderClient**.

 Par ailleurs, actulaiser la position géolocalisée de l'utilisateur est particulièrement utile, lorsque l'application offre un service de suivi de livraison, ou un service d'aide à l'orientation en zone urbaine. Pour ce faire, il faut :
  * appliquer la méthode  **requestLocationsUpdates()** sur une l'instance de FusedLocationProviderClient.
  * ajouter en paramètres, une ou plusieurs positions (objets **Location**) préalablement identifiées
  * rattacher un callback de type **LocationCallback** pour récupérer les positions actualisées

  Voici une illustration
  
  ![actualiser les positions de l'utilisateur](../../../../assets/media/2017-07-10-ajouter-la-geolocation-aux-applis-android/start_location_update.PNG  "actualiser les positions de l'utilisateur")

### Implémenter un callback de type LocationCallback

![implementer le callback] (../../../../assets/media/2017-07-10-ajouter-la-geolocation-aux-applis-android/implement_location_callback.PNG "implementer le callback")

### Arrêter les mises-à-jour de localisation
Lorsque l'application passe en pause sur l'appareil de l'utilisateur, pour une raison pou une autre, il est recommandé de désactiver la mise-à-jour de la localisation. 

![implementer le callback] (../../../../assets/media/2017-07-10-ajouter-la-geolocation-aux-applis-android/stop_location_updates.PNG "implementer le callback")

### Exemple complet fonctionnel
Voici un exemple d'activité d'application android qui suit les changements de position de l'utlisateur sur le globe, __en temps réel__:


{%highlight bash%}

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CHECK_SETTINGS = 920;
    LocationCallback mLocationCallback;
    private FusedLocationProviderClient fusedLocationProviderClient;
    private LocationRequest mLocationRequest;
    private boolean permissionsGranted;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create an instance of the Fused Location Provider Client
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

        mLocationRequest = createLocationRequest();


        mLocationCallback = new LocationCallback() {<commit_msg>correction de bugs<commit_after>---
layout: post
title: Ajouter la géolocation à votre application Android (2/2)
categories: [tech]
tags: [android, java, géolocalisation, location API, android studio, application mobile, google, développement]
author: fabrice_kiki
comments: true
fullview: false
description: Intégrer la géolocalisation à votre application mobile Android, pour proposant aux utilisateurs des informations et services, relatifs à leur position géographique et à leur environnement.
---
### Problématique :
Renouveller automatiquement les informations sur la position de l'utilisateur, en temps réel.

### Pré requis
Avoir une certaine connaissance de l’IDE (Envionnement de développement Intégré) [Android Studio](https://developer.android.com/studio/index.html). Intégrer à votre projet, une API de localisation fournie par Google Play Services (G.P.S.) , en ajoutant ce qui suit au fichier app.gradle : {% highlight bash %}compile 'com.google.android.gms:play-services-location:11.0.2'{% endhighlight%}. Intégrer un gestionnaire de permissions à la volée pour Android M et plus, en ajoutant ce qui suit au fichier app.gradle : {% highlight bash %}compile 'com.karumi:dexter:4.1.0'{% endhighlight%}. Le code source comptet opérationnel sera affiché à la fin du tutoriel.

### Démaarer l'actualisation de la position 
 Dans le [précédent billet] (<http://blog.qanbio.com/tech/2017/07/10/ajouter-la-geolocation-aux-applis-android.html>), une application utilise Google Play Services pour identifier la position actuelle d'un utilisateur, obtenue en invoquant la méthode  **getLastLocation()** sur un client de localisation de type **FusedLocationProviderClient**.

 Par ailleurs, actulaiser la position géolocalisée de l'utilisateur est particulièrement utile, lorsque l'application offre un service de suivi de livraison, ou un service d'aide à l'orientation en zone urbaine. Pour ce faire, il faut :
  * appliquer la méthode  **requestLocationsUpdates()** sur une l'instance de FusedLocationProviderClient.
  * ajouter en paramètres, une ou plusieurs positions (objets **Location**) préalablement identifiées
  * rattacher un callback de type **LocationCallback** pour récupérer les positions actualisées

  Voici une illustration
  
  ![actualiser les positions de l'utilisateur](../../../../assets/media/2017-07-10-ajouter-la-geolocation-aux-applis-android/start_location_update.PNG  "actualiser les positions de l'utilisateur")

### Implémenter un callback de type LocationCallback
 Application de la méthode  requestLocationsUpdates() et ajout des paramètres
![implementer le callback] (../../../../assets/media/2017-07-10-ajouter-la-geolocation-aux-applis-android/implement_location_callback.PNG "implementer le callback")

### Arrêter les mises-à-jour de localisation
Lorsque l'application passe en pause sur l'appareil de l'utilisateur, pour une raison pou une autre, il est recommandé de désactiver la mise-à-jour de la localisation. 

![Stoper les callbacks] (../../../../assets/media/2017-07-10-ajouter-la-geolocation-aux-applis-android/stop_location_updates.PNG "stoper les callbacks")

### Exemple complet fonctionnel
Voici un exemple d'activité d'application android qui suit les changements de position de l'utlisateur sur le globe, __en temps réel__:


{%highlight bash%}

public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_CHECK_SETTINGS = 920;
    LocationCallback mLocationCallback;
    private FusedLocationProviderClient fusedLocationProviderClient;
    private LocationRequest mLocationRequest;
    private boolean permissionsGranted;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create an instance of the Fused Location Provider Client
        fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);

        mLocationRequest = createLocationRequest();


        mLocationCallback = new LocationCallback() {
{'fraction_non_alphanumeric': 0.08480917934647045, 'fraction_numerical': 0.010975305562484411, 'mean_word_length': 5.024793388429752, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3438479', 'n_tokens_mistral': 2363, 'n_tokens_neox': 2260, 'n_words': 781}