Données de localisation

La détection de la position est l'une des fonctionnalités propres aux applications mobiles. Les utilisateurs emportent leurs appareils mobiles où qu'ils aillent. Aussi, l'ajout d'une fonctionnalité de détection de la position à votre application leur offre une expérience plus contextuelle.

Exemples de code

Le référentiel ApiDemos sur GitHub inclut des exemples qui montrent comment utiliser la localisation sur une carte :

Utiliser les données de localisation

Les données de localisation disponibles pour un appareil Android incluent la position actuelle de l'appareil, calculée à l'aide d'une combinaison de technologies, la direction et le moyen de déplacement, et si l'appareil s'est déplacé dans une limite géographique prédéfinie (zone de géorepérage). En fonction des besoins de votre application, vous pouvez choisir d'utiliser les données de localisation de plusieurs façons :

  • Le calque Ma position permet d'afficher facilement la position d'un appareil sur la carte. Il ne fournit pas de données.
  • L'API Location des services Google Play est recommandée pour toutes les requêtes programmées de données de localisation.
  • L'interface LocationSource vous permet de recourir à un fournisseur de localisation personnalisé.

Autorisations de géolocalisation

Si votre application a besoin de géolocaliser l'utilisateur, vous devez demander l'autorisation en ajoutant l'autorisation de géolocalisation Android appropriée à votre application.

Android propose deux autorisations de géolocalisation : ACCESS_COARSE_LOCATION et ACCESS_FINE_LOCATION. L'autorisation que vous choisissez détermine la précision de la position renvoyée par l'API. Vous ne devez demander qu'une seule autorisation de géolocalisation Android, selon le niveau de précision requis :

  • android.permission.ACCESS_COARSE_LOCATION – Autorise l'API à utiliser le Wi-Fi ou les données du réseau de téléphonie mobile (ou les deux) pour déterminer la position de l'appareil. L'API renvoie le lieu avec une précision équivalente à environ un pâté de maisons.
  • android.permission.ACCESS_FINE_LOCATION – Permet à l'API de déterminer une position aussi précise que possible à partir des fournisseurs de géolocalisation disponibles, y compris le GPS (Global Positioning System), le Wi-Fi et les données des réseaux de téléphonie mobile

Ajouter les autorisations au fichier manifeste de l'application

Ajoutez une des autorisations suivantes en tant qu'enfant de l'élément <manifest> dans votre fichier manifeste Android. Soit l'autorisation de géolocalisation approximative :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  ...
</manifest>

Soit l'autorisation de géolocalisation précise :

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapp" >
  ...
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  ...
</manifest>

Demander des autorisations d'exécution

Android 6.0 (Marshmallow) introduit un nouveau modèle de gestion des autorisations, qui permet de rationaliser le processus pour les utilisateurs lors de l'installation et de la mise à niveau des applications. Si votre application cible une API niveau 23 ou version ultérieure, vous pouvez utiliser le nouveau modèle d'autorisations.

Si votre application prend en charge le nouveau modèle d'autorisations et que l'appareil exécute Android 6.0 (Marshmallow) ou une version ultérieure, l'utilisateur n'a pas besoin d'accorder une autorisation lors de l'installation ou de la mise à niveau de l'application. L'application doit vérifier qu'il dispose de l'autorisation nécessaire au moment de l'exécution, et demander l'autorisation si ce n'est pas le cas. Le système affiche une boîte de dialogue pour demander l'autorisation à l'utilisateur.

Pour une meilleure expérience utilisateur, il est important de demander l'autorisation dans le contexte. Si la géolocalisation est essentielle au bon fonctionnement de votre application, vous devez alors demander l'autorisation de géolocalisation au démarrage de l'application. Un bon moyen de procéder est d'afficher un écran de bienvenue ou un assistant qui explique aux utilisateurs pourquoi cette autorisation est requise.

Si l'application nécessite l'autorisation pour certaines de ses fonctionnalités uniquement, vous devez alors demander l'autorisation de géolocalisation au moment où l'application effectue l'action qui requiert l'autorisation en question.

L'application doit gérer facilement le cas où l'utilisateur ne donne pas son autorisation. Par exemple, si l'autorisation est nécessaire pour une fonctionnalité particulière, l'application peut la désactiver. Si l'autorisation est essentielle au fonctionnement de l'application, celle-ci peut désactiver toutes ses fonctionnalités et informer l'utilisateur qu'il est nécessaire qu'il donne son autorisation.

L'exemple de code suivant vérifie l'autorisation à l'aide de la bibliothèque Support avant d'activer le calque Ma position :

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
        == PackageManager.PERMISSION_GRANTED) {
    if (mMap != null) {
        mMap.setMyLocationEnabled(true);
    }
} else {
    // Permission to access the location is missing. Show rationale and request permission
    PermissionUtils.requestPermission(this, LOCATION_PERMISSION_REQUEST_CODE,
        Manifest.permission.ACCESS_FINE_LOCATION, true);
}

L'exemple suivant gère le résultat de la requête d'autorisation en ajoutant le ActivityCompat.OnRequestPermissionsResultCallback à partir de la bibliothèque Support :

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode != LOCATION_PERMISSION_REQUEST_CODE) {
        return;
    }

    if (PermissionUtils.isPermissionGranted(permissions, grantResults, Manifest.permission.ACCESS_FINE_LOCATION)) {
        // Enable the my location layer if the permission has been granted.
        enableMyLocation();
    } else {
        // Permission was denied. Display an error message
        // ...
    }
}

Pour obtenir d'autres exemples de code et connaître les bonnes pratiques concernant les autorisations d'exécution Android, consultez la documentation du modèle d'autorisations Android.

Le calque Ma position

Vous pouvez utiliser le calque et le bouton Ma position pour permettre à l'utilisateur de connaître sa position actuelle sur la carte. Appelez mMap.setMyLocationEnabled() pour activer le calque Ma position sur la carte.

L'exemple suivant illustre une utilisation simple du calque Ma position :

public class MyLocationDemoActivity extends FragmentActivity
    implements OnMyLocationButtonClickListener,
        OnMyLocationClickListener,
        OnMapReadyCallback {

  private GoogleMap mMap;

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

    SupportMapFragment mapFragment =
        (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);
  }

  @Override
  public void onMapReady(GoogleMap map) {
    mMap = map;
    // TODO: Before enabling the My Location layer, you must request
    // location permission from the user. This sample does not include
    // a request for location permission.
    mMap.setMyLocationEnabled(true);
    mMap.setOnMyLocationButtonClickListener(this);
    mMap.setOnMyLocationClickListener(this);
  }

  @Override
  public void onMyLocationClick(@NonNull Location location) {
    Toast.makeText(this, "Current location:\n" + location, Toast.LENGTH_LONG).show();
  }

  @Override
  public boolean onMyLocationButtonClick() {
    Toast.makeText(this, "MyLocation button clicked", Toast.LENGTH_SHORT).show();
    // Return false so that we don't consume the event and the default behavior still occurs
    // (the camera animates to the user's current position).
    return false;
  }
}

Lorsque le calque Ma position est activé, le bouton Ma position apparaît dans l'angle supérieur droit de la carte. Dès qu'un utilisateur clique sur ce bouton, la caméra centre la carte sur la position actuelle de l'appareil, si celle-ci est connue. Cette position est indiquée sur la carte par un petit point bleu si l'appareil est fixe, ou sous forme de chevron si l'appareil est en mouvement.

La capture d'écran suivante montre le bouton Ma position en haut à droite et le point bleu Ma position au centre de la carte :

Vous pouvez empêcher l'affichage du bouton Ma position en appelant UiSettings.setMyLocationButtonEnabled(false).

Votre application peut répondre aux événements suivants :

Selon nos conditions d'utilisation

Protégez la confidentialité des utilisateurs,
tenez-les informés

Informez toujours les utilisateurs de la façon dont vous allez utiliser leurs données, et veillez à ce qu'il ne soit pas possible d'identifier des utilisateurs individuels. Obtenez l'autorisation de l'utilisateur avant d'utiliser sa position et autorisez-le à révoquer son consentement à tout moment.

En savoir plus

API Location des services Google Play

L'API Location des services Google Play est la méthode recommandée pour ajouter la géolocalisation à votre application Android. Ses fonctionnalités vous permettent d'effectuer les opérations suivantes :

  • Déterminer la position géographique de l'appareil
  • Écouter les changements de localisation
  • Déterminer le mode de transport, si l'appareil est en mouvement
  • Créer et surveiller des régions géographiques prédéfinies, appelées zones de géorepérage

Grâce aux API de localisation, vous pouvez créer facilement des applications de géolocalisation économes en énergie. Comme le SDK Maps pour Android, l'API de localisation est intégrée au SDK des services Google Play. Pour plus d'informations sur l'API Location, consultez la formation Android Making Your App Location Aware ou la documentation de référence de l'API Location. Des exemples de code sont inclus dans le cadre du SDK des services Google Play.