Google Maps Intents para Android

Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

La app de Google Maps para Android expone varios intents que puedes usar para iniciar Google Maps en los modos de visualización, búsqueda, navegación o Street View. Si deseas incorporar un mapa en tu app, consulta la guía de introducción de la API de Google Maps para Android.

Descripción general

Los intents te permiten iniciar una actividad en otra app mediante la descripción de una acción simple que desees realizar (como "mostrar un mapa" o "mostrar instrucciones sobre cómo llegar al aeropuerto") en un objeto Intent. La app de Google Maps para Android admite varios intents diferentes, lo que te permite iniciar la app de Google Maps y realizar una de las siguientes cuatro acciones:

  1. Muestra un mapa en una ubicación y a un nivel de zoom especificados.
  2. Busca ubicaciones o lugares y muéstralos en un mapa.
  3. Solicitar indicaciones para ir de una ubicación a otra. Se pueden proporcionar instrucciones para tres modos de transporte: en automóvil, a pie y en bicicleta.
  4. Muestra imágenes panorámicas en Google Street View.

En esta página, se describen los intents que puedes usar con la app de Google Maps para Android. Para obtener más información sobre Intents y filtros de intents, o Intents comunes para la plataforma de Android, consulta la documentación para desarrolladores de Android.

Solicitudes de intent

Para iniciar Google Maps con un intent, primero debes crear un objeto Intent y especificar su acción, URI y paquete.

  • Acción: Todos los intents de Google Maps se llaman como una acción de vista: ACTION_VIEW.
  • URI: Los intents de Google Maps usan la codificación URL que especifica una acción deseada, junto con algunos datos para realizar la acción.
  • Paquete: Llamar a setPackage("com.google.android.apps.maps") garantizará que la app de Google Maps para Android controle el intent. Si no se configura el paquete, el sistema determinará qué apps pueden controlar los Intent. Si hay varias apps disponibles, se le puede preguntar al usuario qué app quiere usar.

Después de crear el Intent, puedes solicitar que el sistema inicie la app relacionada de varias maneras. Un método común es pasar el Intent al método startActivity(). El sistema iniciará la app necesaria (en este caso, Google Maps) e iniciará el Activity correspondiente.

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 el sistema no puede identificar una app que responda al intent, es posible que se bloquee. Por este motivo, primero debes verificar que se instale una aplicación receptora antes de presentarle uno de estos intents a un usuario.

Si quieres verificar que una app esté disponible para recibir el intent, llama a resolveActivity() en tu objeto Intent. Si el resultado no es nulo, hay al menos una app que puede controlar el intent y es seguro llamar a startActivity(). Si el resultado es null, no debes usar el intent y, si es posible, debes inhabilitar la función que invoca el intent.

Java

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

Kotlin

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

Por ejemplo, para mostrar un mapa de San Francisco puedes usar el siguiente código:

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)
}

Cadenas de consulta con codificación URL

Todas las cadenas pasadas a las intenciones de Google Maps deben tener codificación de URI. Por ejemplo, la string “1st & Pike, Seattle” debe convertirse en 1st%20%26%20Pike%2C%20Seattle. Los espacios de la cadena pueden codificarse con %20 o reemplazarse con el signo más (+).

Puedes usar el método android.net.Uri parse() para codificar tus strings. Por ejemplo:

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"))

Muestra de un mapa

Usa el intent geo: para mostrar un mapa en una ubicación y a un nivel de zoom especificados.

geo:latitude,longitude?z=zoom

Parámetros

  • latitude y longitude establecen el punto central del mapa.
  • z establece opcionalmente el nivel de zoom inicial del mapa. Los valores aceptados varían de 0 (todo el mundo) a 21 (edificios individuales). El límite superior puede variar según los datos del mapa disponibles en la ubicación seleccionada.

Ejemplos

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)

Buscar una ubicación

Usa esta intención para mostrar solicitudes de búsqueda dentro de un viewport especificado. Cuando la consulta tiene un solo resultado, puedes usar este intent para mostrar un marcador en un lugar o una dirección en particular, como un punto de referencia, una empresa, un elemento geográfico o un pueblo.

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

Parámetros

Además de los parámetros que se usan para mostrar un mapa, la Búsqueda admite los siguientes parámetros:

  • q define los lugares que se deben destacar en el mapa. El parámetro q es obligatorio para todas las solicitudes de búsqueda. Acepta una ubicación como un nombre de lugar o una dirección. La string debe estar codificada en la URL, por lo que una dirección como “City Hall, New York, NY” debe convertirse en City+Hall,New+York,NY.

  • label te permite establecer una etiqueta personalizada en un lugar identificado en el mapa. label debe especificarse como una string.

Si pasas un término de búsqueda general, Google Maps intentará encontrar una ubicación cerca de la latitud y longitud especificada por ti que coincida con tus criterios. Si no se especifica ninguna ubicación, Google Maps intentará encontrar fichas cercanas. Por ejemplo:

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)

Buscando restaurantes en San Francisco

Puedes restringir más los resultados de búsqueda si especificas un parámetro de zoom junto con la cadena de consulta. En el siguiente ejemplo, agregar un zoom de 10 intentará encontrar restaurantes a nivel de ciudad y no de cerca.

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 búsqueda de una dirección específica hará que se muestre una marca en dicha ubicación.

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)

En el ejemplo anterior, se establece un valor de latitud y longitud de 0, 0, pero se pasa una dirección como una string de consulta. Cuando se busca una ubicación muy específica, la latitud y la longitud no son obligatorias. Sin embargo, si no conoces la dirección exacta, puedes intentar restringir los resultados de la búsqueda mediante la especificación de una coordenada. Por ejemplo, una búsqueda de "Calle Principal" arroja demasiados resultados.

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 se agrega un valor de latitud y longitud al URI de intent, se restringirán los resultados de un área en particular:

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)

Cuando sepas que tu búsqueda mostrará un solo valor, es posible que quieras pasar una etiqueta opcional. Las etiquetas deben especificarse como una string y aparecerán debajo del marcador del mapa. Ten en cuenta que las etiquetas solo están disponibles cuando q se especifica como una coordenada de latitud y longitud.

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)

Como alternativa a una dirección o a una latitud y longitud, puedes mostrar un marcador en una ubicación conocida mediante un código plus.

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

Lanzamiento de la navegación paso a paso

Usa este intent para iniciar la navegación de Google Maps con instrucciones paso a paso sobre cómo llegar a la dirección o las coordenadas especificadas. Las indicaciones siempre se proporcionan desde la ubicación actual del usuario.

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

Parámetros

  • q: Configura el extremo para las búsquedas de navegación. Este valor puede ser coordenadas de latitud, longitud o una dirección con formato de consulta. Si es una string de consulta que muestra más de un resultado, se seleccionará el primer resultado.

  • mode establece el método de transporte. El modo es opcional y se puede establecer en una de las siguientes opciones:

    • d para conducir (predeterminado)
    • b en bicicleta
    • l para vehículo motorizado de dos ruedas
    • w a pie
  • avoid establece características que la ruta debe intentar evitar. Evita es opcional y se puede configurar en una o más de las siguientes opciones:

    • t para peajes
    • h para autopistas
    • f para ferris

Ejemplos

El siguiente archivo Intent solicitará la navegación paso a paso para el Taronga Zoo en Sídney, Australia:

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)

Cómo llegar al zoológico de Taronga

Si prefieres no pagar peajes ni abordar un transbordador, puedes solicitar que se intente hacer ese recorrido para evitar esas situaciones.

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 prefieres hacer ejercicio, puedes solicitar indicaciones para llegar en bicicleta.

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 prefieres tomar un vehículo motorizado de dos ruedas a motor, puedes solicitar que las instrucciones sobre cómo llegar incluyan rutas estrechas y senderos no disponibles para automóviles. El siguiente intent muestra una ruta en la India.

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)

Cómo mostrar una panorámica de Street View

Usa el intent google.streetview para iniciar Google Street View. Google Street View proporciona vistas panorámicas de ubicaciones designadas en su área de cobertura. También están disponibles las fotos esféricas aportadas por los usuarios y las colecciones especiales de Street View.

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

Parámetros

Todos los URI de google.streetview deben incluir un parámetro cbll o panoid.

  • cbll acepta una latitud y una longitud como valores separados por comas (46.414382,10.013988). La app mostrará la panorámica que se haya tomado más cerca de esta ubicación. Debido a que las imágenes de Street View se actualizan periódicamente y a que las fotografías pueden tomarse desde posiciones un poco diferentes cada vez, es posible que tu ubicación se integre a otra panorámica cuando se actualicen las imágenes.

  • panoid es un ID de panorámica específico. Google Maps usará el ID de panorámica si se especifican panoid y cbll. Los ID de panorámica están disponibles en una app para Android desde el objeto StreetViewPanoramaLocation.

  • cbp es un parámetro opcional que ajusta la orientación inicial de la cámara. El parámetro cbp toma 5 valores separados por comas. Todos son opcionales. Los valores más significativos son el segundo, el cuarto y el quinto, que establecen el rumbo, el zoom y la inclinación respectivamente. El primero y el tercer valor no son compatibles y deben establecerse en 0.

    • bearing: Indica la orientación de la cámara según la brújula en grados en sentido horario, partiendo del norte. El norte geográfico es el grado 0, el este el 90, el sur el 180 y el oeste el 270. Los valores pasados al rumbo se ajustarán; es decir, 0°, 360° y 720° apuntan en la misma dirección. El rumbo se define como el segundo de cinco valores separados por comas.
    • zoom: Establece el nivel de zoom de la cámara. El nivel de zoom predeterminado es 0. Un nivel de zoom de 1 duplicaría la magnificación. El zoom se redondea entre 0 y el nivel máximo para la panorámica actual. Esto significa que cualquier valor que se encuentre fuera de este rango se establecerá en el extremo más cercano que se encuentre dentro del rango. Por ejemplo, un valor de -1 se establecerá en 0. El zoom es el cuarto de los valores separados por comas.
    • tilt: Especifica el ángulo, ascendente o descendente, de la cámara. El rango es de -90 a 0 y 90; 90 representa la posición extrema inferior, 0 la posición centrada en el horizonte y -90 la posición extrema superior.

Ejemplos

A continuación se proporcionan algunos ejemplos de uso de la intención de 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)

Pirámides en Street View