Intents Google Maps pour Android

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

L'application Google Maps pour Android propose plusieurs intents que vous pouvez utiliser pour lancer Google Maps en mode affichage, recherche, navigation ou Street View. Si vous souhaitez intégrer une carte à votre application, consultez le guide de démarrage de l'API Google Maps pour Android.

Présentation

Les intents vous permettent de démarrer une activité dans une autre application en décrivant une action simple que vous souhaitez effectuer (par exemple, "afficher une carte" ou "afficher l'itinéraire vers l'aéroport") dans un objet Intent. L'application Google Maps pour Android accepte plusieurs intents différents, ce qui vous permet de la lancer et d'effectuer l'une des quatre actions suivantes:

  1. Affichez une carte à un point géographique et avec un niveau de zoom donnés.
  2. rechercher des lieux ou des lieux, et les afficher sur une carte ;
  3. Demandez un itinéraire d'un endroit à un autre. L'itinéraire peut s'afficher pour trois modes de transport: en voiture, à pied ou à vélo.
  4. Affichez des images panoramiques dans Google Street View.

Cette page décrit les intents que vous pouvez utiliser avec l'application Google Maps pour Android. Pour en savoir plus sur les intents et les filtres d'intent ou les intents communs à la plate-forme Android, consultez la documentation destinée aux développeurs Android.

Requêtes d'intent

Pour lancer Google Maps avec un intent, vous devez d'abord créer un objet Intent, en spécifiant son action, son URI et son package.

  • Action: Tous les intents Google Maps sont appelés en tant qu'actions de vue (ACTION_VIEW).
  • URI : les intents Google Maps utilisent des URL encodées qui spécifient l'action souhaitée, ainsi que des données avec lesquelles effectuer l'action.
  • Package: si vous appelez setPackage("com.google.android.apps.maps"), l'application Google Maps pour Android gérera l'intent. Si le package n'est pas défini, le système détermine quelles applications peuvent gérer l'élément Intent. Si plusieurs applications sont disponibles, l'utilisateur peut être invité à choisir l'application qu'il souhaite utiliser.

Après avoir créé Intent, vous pouvez demander au système de lancer l'application associée de différentes manières. Une méthode courante consiste à transmettre Intent à la méthode startActivity(). Le système lancera l'application nécessaire (dans ce cas, Google Maps) et démarrera le Activity correspondant.

Java

// Create a Uri from an intent string. Use the result to create an Intent.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988");

// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps");

// Attempt to start an activity that can handle the Intent
startActivity(mapIntent);

Kotlin

// Create a Uri from an intent string. Use the result to create an Intent.
val gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988")

// Create an Intent from gmmIntentUri. Set the action to ACTION_VIEW
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
// Make the Intent explicit by setting the Google Maps package
mapIntent.setPackage("com.google.android.apps.maps")

// Attempt to start an activity that can handle the Intent
startActivity(mapIntent)

Si le système ne parvient pas à identifier une application susceptible de répondre à l'intent, votre application risque de planter. C'est pourquoi vous devez d'abord vérifier qu'une application destinataire est installée avant de présenter l'un de ces intents à un utilisateur.

Pour vérifier qu'une application est disponible pour recevoir l'intent, appelez resolveActivity() sur votre objet Intent. Si le résultat n'est pas nul, il existe au moins une application pouvant gérer l'intent et vous pouvez appeler startActivity() en toute sécurité. Si le résultat est null, vous ne devez pas utiliser l'intent et, si possible, désactiver la fonctionnalité qui l'appelle.

Java

if (mapIntent.resolveActivity(getPackageManager()) != null) {
  ...
}

Kotlin

mapIntent.resolveActivity(packageManager)?.let {
  ...
}

Par exemple, pour afficher une carte de San Francisco, vous pouvez utiliser le code suivant :

Java

Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
if (mapIntent.resolveActivity(getPackageManager()) != null) {
  startActivity(mapIntent);
}

Kotlin

val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
mapIntent.resolveActivity(packageManager)?.let {
  startActivity(mapIntent)
}

Chaînes de requête encodées au format URL

Toutes les chaînes transmises aux intentions Google Maps doivent être encodées sous forme d'URI. Par exemple, la chaîne "1st & Pike, Seattle" doit devenir 1st%20%26%20Pike%2C%20Seattle. Dans la chaîne, les espaces peuvent être encodés avec %20 ou remplacés par le signe plus (+).

Vous pouvez encoder vos chaînes à l'aide de la méthode android.net.Uri parse(). Exemple :

Java

Uri gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"));

Kotlin

val gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4192?q=" + Uri.encode("1st & Pike, Seattle"))

Afficher une carte

Utilisez l'intent geo: pour afficher une carte à un point géographique et à un niveau de zoom donnés.

geo:latitude,longitude?z=zoom

Paramètres

  • latitude et longitude définissent le point central de la carte.
  • z définit éventuellement le niveau de zoom initial de la carte. Les valeurs acceptées sont comprises entre 0 (monde entier) et 21 (bâtiments individuels). La limite supérieure peut varier en fonction des données cartographiques disponibles à l'emplacement sélectionné.

Exemples

Java

// Creates an Intent that will load a map of San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Creates an Intent that will load a map of San Francisco
val gmmIntentUri = Uri.parse("geo:37.7749,-122.4194")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Recherche d'un lieu

Utilisez cette intention pour afficher des requêtes de recherche au sein de la fenêtre d'affichage spécifiée. Lorsque la requête ne renvoie qu'un seul résultat, vous pouvez utiliser cet intent pour afficher un repère à un endroit ou une adresse spécifique, par exemple un point de repère, une entreprise, un élément géographique ou une ville.

geo:latitude,longitude?q=query
geo:0,0?q=my+street+address
geo:0,0?q=latitude,longitude(label)

Paramètres

En plus des paramètres utilisés pour afficher une carte, la recherche accepte les paramètres suivants:

  • q définit le ou les lieux à mettre en évidence sur la carte. Le paramètre q est obligatoire pour toutes les requêtes de recherche. Il accepte un lieu sous forme de nom ou d'adresse de lieu. La chaîne doit être encodée au format URL. Par conséquent, une adresse telle que "Hôtel de ville, New York, NY" doit être convertie en City+Hall,New+York,NY.

  • label vous permet de définir un libellé personnalisé à un lieu identifié sur la carte. L'élément label doit être spécifié en tant que chaîne.

Si vous spécifiez un terme de recherche générale, Google Maps tente de trouver un lieu à proximité de la latitude/longitude que vous avez spécifié. Si aucun lieu n'est spécifié, Google Maps tente de trouver des fiches à proximité. Exemple :

Java

// Search for restaurants nearby
Uri gmmIntentUri = Uri.parse("geo:0,0?q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

// Search for restaurants in San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Search for restaurants nearby
val gmmIntentUri = Uri.parse("geo:0,0?q=restaurants")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

// Search for restaurants in San Francisco
val gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4194?q=restaurants")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Recherche de restaurants à San Francisco

Vous pouvez affiner les résultats de la recherche en spécifiant un paramètre de zoom avec la chaîne de requête. Dans l'exemple ci-dessous, l'ajout d'un zoom de 10 tente de trouver des restaurants au niveau de la ville plutôt qu'à proximité.

Java

Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4194?z=10&q=restaurants")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

La recherche d'une adresse spécifique affiche un repère sur ce lieu.

Java

Uri gmmIntentUri = Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
  Uri.parse("geo:0,0?q=1600 Amphitheatre Parkway, Mountain+View, California")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

L'exemple ci-dessus définit une latitude/longitude de 0,0, mais transmet une adresse en tant que chaîne de requête. Lorsque vous recherchez un lieu très spécifique, la latitude et la longitude ne sont pas obligatoires. Toutefois, si vous ne connaissez pas l'adresse exacte, vous pouvez essayer de pondérer les résultats de la recherche en spécifiant une coordonnée. Par exemple, si vous recherchez "Main Street" (adresse principale), vous obtiendrez trop de résultats.

Java

// Searching for 'Main Street' will return too many results
Uri gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street");

Kotlin

// Searching for 'Main Street' will return too many results
val gmmIntentUri = Uri.parse("geo:0,0?q=101+main+street")

Si vous ajoutez un lat/lng à l'URI d'intent, les résultats seront orientés vers une zone particulière:

Java

// Searches for 'Main Street' near San Francisco
Uri gmmIntentUri = Uri.parse("geo:37.7749,-122.4194?q=101+main+street");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Searches for 'Main Street' near San Francisco
val gmmIntentUri =
  Uri.parse("geo:37.7749,-122.4194?q=101+main+street")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Si vous savez que votre recherche renvoie une seule valeur, vous pouvez transmettre un libellé facultatif. Les libellés doivent être spécifiés sous forme de chaîne et apparaissent sous le repère de la carte. Notez que les libellés ne sont disponibles que lorsque q est spécifié en tant que coordonnées de latitude/longitude.

Java

// Display a label at the location of Google's Sydney office
Uri gmmIntentUri = Uri.parse("geo:0,0?q=Google+Sydney@-33.8666,151.1957");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Display a label at the location of Google's Sydney office
val gmmIntentUri =
  Uri.parse("geo:0,0?q=-33.8666,151.1957(Google+Sydney)")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Au lieu d'une adresse postale ou d'une latitude/longitude, vous pouvez afficher un repère à un endroit connu à l'aide d'un plus code.

Java

// Display the location of Google, San Francisco using a global plus code.
Uri gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX");
// Equivalently, define the same location using a local plus code
gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco");
// Construct and use the Intent as in the examples above

Kotlin

// Display the location of Google, San Francisco using a global plus code.
var gmmIntentUri = Uri.parse("http://plus.codes/849VQJQ5+XX")
// Equivalently, define the same location using a local plus code
gmmIntentUri = Uri.parse("https://plus.codes/QJQ5+XX,San%20Francisco")
// Construct and use the Intent as in the examples above

Lancement de la navigation détaillée

Utilisez cette intention pour lancer la navigation Google Maps avec une navigation détaillée vers l'adresse ou les coordonnées spécifiées. Les itinéraires sont toujours fournis à partir de la position actuelle de l'utilisateur.

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude

Paramètres

  • q: définit le point d'arrivée des recherches de la navigation. Cette valeur peut être une latitude, des coordonnées de longitude ou une adresse au format requête. S'il s'agit d'une chaîne de requête qui renvoie plusieurs résultats, le premier résultat est sélectionné.

  • mode définit le mode de transport. Ce mode est facultatif et peut être défini sur l'une des valeurs suivantes:

    • d pour la voiture (par défaut)
    • b à vélo
    • l pour deux-roues
    • w à pied
  • avoid définit les éléments géographiques que l'itinéraire doit tenter d'éviter. L'option "Éviter" est facultative et peut être définie sur un ou plusieurs des éléments suivants:

    • t pour les péages
    • h pour les voies rapides
    • f pour les ferries

Exemples

Le Intent ci-dessous demandera la navigation détaillée jusqu'au zoo de Taronga, à Sydney, en Australie:

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
  Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Itinéraire vers le zoo de Taronga

Si vous préférez ne pas payer de péages ni faire de ferry, vous pouvez demander un itinéraire qui tente d'éviter ces activités.

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
  Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&avoid=tf")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Si vous préférez faire de l'exercice, vous pouvez demander un itinéraire à vélo.

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
  Uri.parse("google.navigation:q=Taronga+Zoo,+Sydney+Australia&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Si vous préférez opter pour un véhicule à deux-roues motorisé, vous pouvez demander que les itinéraires incluent des routes étroites et des sentiers non accessibles aux voitures. Le intent ci-dessous renvoie un itinéraire en Inde.

Java

Uri gmmIntentUri = Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

val gmmIntentUri =
  Uri.parse("google.navigation:q=Connaught+Place,+New+Delhi,Delhi&mode=l")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Afficher un panorama Street View

Utilisez l'intent google.streetview pour lancer Google Street View. Google Street View offre des vues panoramiques à partir de lieux spécifiques dans sa zone de couverture. Des photo-sphères ajoutées par les utilisateurs et des collections spéciales Street View sont également disponibles.

google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt
google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt

Paramètres

Tous les URI google.streetview doivent inclure un paramètre cbll ou panoid.

  • cbll accepte une latitude et une longitude sous forme de valeurs séparées par une virgule (46.414382,10.013988). L'application affiche le panorama photographié le plus proche de ce lieu. Étant donné que les images Street View sont régulièrement actualisées et que les photos peuvent être prises à des positions légèrement différentes à chaque fois, il est possible que votre position soit prise sur un panorama différent lorsque les images sont mises à jour.

  • panoid est un ID de panorama spécifique. Google Maps utilise l'ID de panorama si les champs panoid et cbll sont tous les deux spécifiés. Les ID de panorama sont disponibles pour une application Android à partir de l'objet StreetViewPanoramaLocation.

  • cbp est un paramètre facultatif qui ajuste l'orientation initiale de la caméra. Le paramètre cbp accepte cinq valeurs séparées par une virgule, toutes facultatives. Les valeurs les plus significatives sont les deuxième, quatrième et cinquième valeurs qui définissent l'orientation, le zoom et l'inclinaison, respectivement. Les première et troisième valeurs ne sont pas acceptées et doivent être définies sur 0.

    • bearing: indique l'orientation de la boussole, en degrés, vers la droite depuis le nord. Le nord géographique est à 0, l'est à 90, le sud à 180 et l'ouest à 270. Les valeurs transmises à la direction s'encapsulent, c'est-à-dire qu'elles pointent toutes dans la même direction, à savoir 0°, 360° et 720°. La direction est définie comme la deuxième des cinq valeurs séparées par une virgule.
    • zoom: définit le niveau de zoom de l'appareil photo. Le niveau de zoom par défaut est défini sur 0. Un zoom de 1 doublerait l'agrandissement. Le niveau de zoom est limité entre 0 et le niveau de zoom maximal pour le panorama en cours. Cela signifie que toute valeur qui se situe en dehors de cette plage sera définie sur l'extrême le plus proche de la plage. Par exemple, la valeur -1 est définie sur 0. Le zoom est la quatrième des cinq valeurs séparées par une virgule.
    • tilt : spécifie l'angle de la caméra (vers le haut ou vers le bas). Les valeurs sont comprises entre -90 et 0 et entre 0 et 90, 90 à la verticale vers le bas, 0 centré sur l'horizon et -90 à la verticale vers le haut.

Exemples

Vous trouverez ci-dessous quelques exemples d'utilisation de l'intention Street View.

Java

// Displays an image of the Swiss Alps
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=46.414382,10.013988");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

// Uses a PanoID to show an image from Maroubra beach in Sydney, Australia
Uri gmmIntentUri = Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

// Opens Street View between two Pyramids in Giza. The values passed to the
// cbp parameter will angle the camera slightly up, and towards the east.
Uri gmmIntentUri = Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);

Kotlin

// Displays an image of the Swiss Alps
val gmmIntentUri =
  Uri.parse("google.streetview:cbll=46.414382,10.013988")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

// Uses a PanoID to show an image from Maroubra beach in Sydney, Australia
val gmmIntentUri =
  Uri.parse("google.streetview:panoid=Iaa2JyfIggYAAAQfCZU9KQ")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

// Opens Street View between two Pyramids in Giza. The values passed to the
// cbp parameter will angle the camera slightly up, and towards the east.
val gmmIntentUri =
  Uri.parse("google.streetview:cbll=29.9774614,31.1329645&cbp=0,30,0,0,-15")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)

Pyramides dans Street View