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 a 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 quieras 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:
- Mostrar un mapa en una ubicación y a un nivel de zoom especificados.
- Buscar ubicaciones o lugares y mostrarlos en un mapa.
- Solicitar instrucciones sobre cómo llegar de una ubicación a otra Se pueden proporcionar instrucciones para tres modos de transporte: en automóvil, a pie y en bicicleta.
- Mostrar imágenes panorámicas en Google Street View.
En esta página, se describen las intenciones 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 de la plataforma de Android, consulta la documentación para desarrolladores de Android.
Solicitudes de intents
Para iniciar Google Maps con una intención, primero debes crear un objeto Intent
y especificar su acción, su URI y el paquete.
- Acción: Todos los intents de Google Maps se llaman como una acción de View:
ACTION_VIEW
. - URI: Los intents de Google Maps usan URL codificadas que especifican una acción deseada, junto con algunos datos con los que realizarla.
- Paquete: Llamar a
setPackage("com.google.android.apps.maps")
garantizará que la app de Google Maps para Android controle la intención. Si no se configura el paquete, el sistema determinará qué apps pueden controlar elIntent
. Si se encuentran disponibles varias aplicaciones, se puede solicitar al usuario que especifique cuál desea 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 lanzará 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 pueda responder al intent, es posible que la app falle. Por esta razón, primero debes verificar que se instale una aplicación receptora antes de presentar una de estas intenciones a un usuario.
Para verificar que haya disponible una app para recibir la intención, llama a resolveActivity()
en tu objeto Intent
. Si el resultado no es nulo, hay al menos una app que puede administrar la intent y es seguro llamar a startActivity()
.
Si el resultado es null
, no debes usar la intent y, si es posible, debes inhabilitar la función que la invoca.
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 de URL
Todas las cadenas pasadas a las intenciones de Google Maps deben tener codificación de URI. Por ejemplo, la cadena "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 parse()
de android.net.Uri
para codificar tus cadenas.
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 un nivel de zoom específicos.
geo:latitude,longitude?z=zoom
Parámetros
latitude
ylongitude
establecen el punto central del mapa.- De manera opcional,
z
establece el nivel de zoom inicial del mapa. Los valores aceptados van 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)
Cómo 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 pin en un lugar o una dirección en particular, como un punto de referencia, una empresa, un componente geográfico o una ciudad.
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ámetroq
es obligatorio para todas las solicitudes de búsqueda. Acepta una ubicación como un nombre de lugar o una dirección. La cadena debe estar codificada como URL, de modo que una dirección como “City Hall, New York, NY” se convierta en City+Hall,New+York,NY.label
te permite establecer una etiqueta personalizada en un lugar identificado en el mapa. Ellabel
se debe especificar como una cadena.
Búsqueda categórica
Si pasas un término general, Google Maps intentará hallar una ubicación cerca de la latitud y longitud especificada por ti que coincida con tus criterios. Si no se especifica una 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)
Puedes personalizar aún más los resultados de la búsqueda si especificas un parámetro de zoom junto con la cadena de consulta. En el ejemplo siguiente, con 10 puntos de zoom se intentará encontrar restaurantes al nivel de la ciudad y no de las cercanías.
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)
Búsqueda por ubicación
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 una latitud/longitud de 0
,0
, pero se pasa una dirección como una cadena de consulta. Al buscar una ubicación muy específica, no se necesitan valores de latitud y longitud. Sin embargo, si no conoces la dirección exacta, puedes intentar restringir los resultados de la búsqueda especificando una coordenada. Por ejemplo, si realizas una búsqueda de direcciones para "Calle principal", se mostrarán 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 la intención, 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 devolverá un solo valor, te recomendamos que pases una etiqueta opcional. Las etiquetas deben especificarse como un elemento String, y aparecerán debajo del marcador del mapa. Ten en cuenta que las etiquetas solo se encuentran 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 una latitud/longitud, puedes mostrar un pin en una ubicación conocida con 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
Cómo iniciar la navegación paso a paso
Usa este intent para iniciar la navegación de Google Maps con instrucciones sobre cómo llegar a la dirección o coordenada especificada. Las instrucciones sobre cómo llegar siempre se proporcionan desde la ubicación actual del usuario.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
Parámetros
q
: Establece el punto de llegada para búsquedas de navegación. Este valor puede ser latitud, coordenadas de longitud o una dirección con formato de consulta. Si es una cadena de consulta que muestra más de un resultado, se seleccionará el primero.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
para andar en bicicletal
para vehículos motorizados de dos ruedasw
para caminar
avoid
establece las características que la ruta debe evitar. Avoid es opcional y se puede fijar en una o más de las siguientes opciones:t
para peajesh
para autopistasf
para ferris
Ejemplos
El siguiente Intent
solicitará navegación paso a paso al zoológico de Taronga, 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)
Si prefieres no pagar peajes ni abordar un transbordador, puedes solicitar que en las indicaciones se intente evitarlos.
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 usar un vehículo de dos ruedas motorizado, puedes solicitar que las instrucciones 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 la intención google.streetview
para iniciar Google Street View. Google Street View proporciona vistas panorámicas de ubicaciones designadas en su área de cobertura.
También se encuentran disponibles las fotos esféricas aportadas por los usuarios y las recopilaciones 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 URIs 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 fotografiada más cercana a esta ubicación. Debido a que las imágenes de Street View se actualizan de manera periódica, y a que las fotografías pueden tomarse desde posiciones ligeramente diferentes en cada ocasión, es posible que tu ubicación se integre a otra panorámica cuando se actualicen las imágenes.panoid
es un ID de panorama específico. Google Maps usará el ID de panorama si se especificanpanoid
ycbll
. Los IDs de panorama están disponibles para una app para Android desde el objetoStreetViewPanoramaLocation
.cbp
es un parámetro opcional que ajusta la orientación inicial de la cámara. El parámetrocbp
toma 5 valores separados por comas, todos los cuales 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 en0
.bearing
: Indica la orientación de la cámara según la brújula en grados en sentido horario a partir 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 que se pasan al rumbo se repiten; 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 valor 1 de zoom duplicaría la magnificación. El zoom se encuentra fijo entre 0 y el nivel máximo para el panorama actual. Esto significa que cualquier valor que esté fuera de este rango se fijará en el extremo más cercano que entre en el rango. Por ejemplo, un valor de -1 se establecerá en 0. El zoom es el cuarto de los cinco valores separados por comas.tilt
: Especifica el ángulo, ascendente o descendente, de la cámara. El rango es de -90 a 0 y 90, donde 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)