Ajouter une carte avec un repère

Ce tutoriel vous montre comment ajouter une carte Google à votre application Android. La carte comporte un repère, également appelé épingle, qui permet d'indiquer un lieu spécifique.

Suivez ce tutoriel pour créer une application Android en utilisant le SDK Maps pour Android. L'environnement de développement recommandé est Android Studio.

Obtenir le code

Clonez ou téléchargez le référentiel d'exemples Google Maps Android API v2 à partir de GitHub.

Configurer votre projet de développement

Suivez les étapes ci-dessous pour créer le projet du tutoriel dans Android Studio.

  1. Téléchargez et installez Android Studio.
  2. Ajoutez le package de services Google Play à Android Studio.
  3. Clonez ou téléchargez le référentiel d'exemples Google Maps Android API v2 si vous ne l'avez pas déjà fait au début de ce tutoriel.
  4. Importez le projet du tutoriel :

    • Dans Android Studio, sélectionnez File > New > Import Project.
    • Accédez à l'emplacement où vous avez enregistré le référentiel d'exemples Google Maps Android API v2 après l'avoir téléchargé.
    • Localisez le projet MapWithMarker à l'adresse suivante :
      PATH-TO-SAVED-REPO/android-samples/tutorials/MapWithMarker
    • Sélectionnez le répertoire du projet, puis cliquez sur OK. Android Studio crée à présent votre projet à l'aide de l'outil de compilation Gradle.

Obtenir une clé API et activer les API nécessaires

Pour suivre ce tutoriel, vous devez disposer d'une clé API Google autorisée à utiliser le SDK Maps pour Android.

Cliquez sur le bouton ci-dessous pour obtenir une clé et activer l'API.

Commencer

Pour plus d'informations, consultez le guide complet qui explique comment obtenir une clé API.

Ajouter la clé API à votre application

  1. Modifiez le fichier gradle.properties de votre projet.
  2. Collez votre clé API dans la valeur de la propriété GOOGLE_MAPS_API_KEY. Lorsque vous compilez l'application, Gradle copie la clé API dans le fichier manifeste Android de l'application, comme expliqué ci-dessous.

    GOOGLE_MAPS_API_KEY=PASTE-YOUR-API-KEY-HERE
        

Compiler et exécuter votre application

  1. Connectez un appareil Android à votre ordinateur. Suivez les instructions pour activer les options pour les développeurs sur votre appareil Android et configurer votre système afin qu'il détecte l'appareil. Vous pouvez également utiliser l'outil AVD (Android Virtual Device) Manager pour configurer un appareil virtuel. Lorsque vous choisissez un émulateur, veillez à choisir une image incluant les API Google. Pour plus d'informations, consultez le guide de démarrage.
  2. Dans Android Studio, cliquez sur l'option de menu Run (ou sur l'icône du bouton de lecture). Choisissez un appareil lorsque vous y êtes invité.

Android Studio invoque Gradle pour créer l'application, puis l'exécute sur l'appareil ou sur l'émulateur. Vous devriez voir une carte avec un repère pointant vers Sydney sur la côte est de l'Australie, similaire à l'image de cette page.

Résolution des erreurs :

  • Si aucune carte ne s'affiche, vérifiez que vous avez bien obtenu une clé API et que vous l'avez ajoutée à l'application, comme décrit ci-dessus. Consultez le journal Android Monitor d'Android Studio pour vérifier s'il contient des messages d'erreur concernant la clé API.
  • Utilisez les outils de débogage d'Android Studio pour afficher les journaux et déboguer l'application.

Comprendre le code

Cette partie du tutoriel décrit les principales composantes de l'application MapWithMarker pour vous aider à comprendre comment créer une application similaire.

Vérifier votre fichier manifeste Android

Notez les éléments suivants dans le fichier AndroidManifest.xml de votre application :

  • Ajoutez un élément meta-data pour intégrer la version des services Google Play avec laquelle l'application a été compilée.

    <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        
  • Ajoutez un élément meta-data spécifiant votre clé API. L'exemple accompagnant ce didacticiel associe la valeur de la clé API à une chaîne google_maps_key. Lorsque vous compilez l'application, Gradle copie la clé API du fichier gradle.properties de votre projet vers la valeur de la chaîne.

    <meta-data
          android:name="com.google.android.geo.API_KEY"
          android:value="@string/google_maps_key" />
        

    Pour voir comment la clé API est mappée sur la valeur de la chaîne, examinez le fichier build.gradle de votre application. Il contient la ligne suivante, qui mappe la chaîne google_maps_key sur la propriété GOOGLE_MAPS_API_KEY de l'outil Gradle :

      resValue "string", "google_maps_key",
                  (project.findProperty("GOOGLE_MAPS_API_KEY") ?: "")
        

Voici un exemple d'un fichier manifeste entier :

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.mapwithmarker">

        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">

            <meta-data
                android:name="com.google.android.gms.version"
                android:value="@integer/google_play_services_version" />

            <!--
                 The API key for Google Maps-based APIs.
            -->
            <meta-data
                android:name="com.google.android.geo.API_KEY"
                android:value="@string/google_maps_key" />

            <activity
                android:name=".MapsMarkerActivity"
                android:label="@string/title_activity_maps">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />

                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>

    

Ajouter une carte

Affichez une carte à l'aide du SDK Maps pour Android.

  1. Ajoutez un élément <fragment> au fichier de mise en page de votre activité, activity_maps.xml. Cet élément définit un fragment SupportMapFragment pour servir de conteneur à la carte et donner accès à l'objet GoogleMap. Ce tutoriel utilise la version du fragment de carte issue de la bibliothèque Android Support afin de garantir sa rétrocompatibilité avec les versions précédentes du framework Android.

        <fragment xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            tools:context="com.example.mapwithmarker.MapsMarkerActivity" />
    
        
  2. Dans la méthode onCreate() de votre activité, définissez le fichier de mise en page en tant que vue de contenu. Obtenez un handle vers le fragment de carte en appelant FragmentManager.findFragmentById(). Utilisez ensuite getMapAsync() pour vous inscrire au rappel de la carte :

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // Retrieve the content view that renders the map.
            setContentView(R.layout.activity_maps);
            // Get the SupportMapFragment and request notification
            // when the map is ready to be used.
            SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                    .findFragmentById(R.id.map);
            mapFragment.getMapAsync(this);
        }
        
  3. Ajoutez l'interface OnMapReadyCallback et ignorez la méthode onMapReady() pour configurer la carte lorsque l'objet GoogleMap est disponible :

        public class MapsMarkerActivity extends AppCompatActivity
                implements OnMapReadyCallback {
            // Include the OnCreate() method here too, as described above.
            @Override
            public void onMapReady(GoogleMap googleMap) {
                // Add a marker in Sydney, Australia,
                // and move the map's camera to the same location.
                LatLng sydney = new LatLng(-33.852, 151.211);
                googleMap.addMarker(new MarkerOptions().position(sydney)
                        .title("Marker in Sydney"));
                googleMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
            }
        }
        

Par défaut, le SDK Maps pour Android affiche le contenu de la fenêtre d'informations lorsque l'utilisateur appuie sur un repère. Il n'est pas nécessaire d'ajouter un écouteur de clic pour le repère si le comportement par défaut vous suffit.

Étapes suivantes

En savoir plus sur l'objet de carte et sur les possibilités offertes par les repères