Saltar al contenido

Lanzamiento de Google Maps Directions a través de un intent en Android

Solución:

Podrías usar algo como esto:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
    Uri.parse("http://maps.google.com/maps?saddr=20.344,34.34&daddr=20.5666,45.345"));
startActivity(intent);

Para iniciar la navegación desde la ubicación actual, elimine el saddr parámetro y valor.

Puede utilizar una dirección postal real en lugar de la latitud y la longitud. Sin embargo, esto le dará al usuario un cuadro de diálogo para elegir entre abrirlo a través del navegador o Google Maps.

Esto iniciará Google Maps en el modo de navegación directamente:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
    Uri.parse("google.navigation:q=an+address+city"));

ACTUALIZAR

En mayo de 2017, Google lanzó la nueva API para URL de Google Maps universales y multiplataforma:

https://developers.google.com/maps/documentation/urls/guide

También puede usar Intents con la nueva API.

Esto es un poco fuera de tema porque solicitó “direcciones”, pero también puede usar el esquema de URI geográfico que se describe en la documentación de Android:

http://developer.android.com/guide/appendix/g-app-intents.html

El problema al usar “geo: latitude, longitude” es que Google Maps solo se centra en su punto, sin ningún pin o etiqueta.

Eso es bastante confuso, especialmente si necesita señalar un lugar preciso o pedir direcciones.

Si utiliza el parámetro de consulta “geo: lat, lon? Q = name” para etiquetar su punto geográfico, utiliza la consulta para buscar y descarta los parámetros lat / lon.

Encontré una manera de centrar el mapa con lat / lon y mostrar un pin con una etiqueta personalizada, muy agradable de mostrar y útil al pedir direcciones o cualquier otra acción:

Intent intent = new Intent(android.content.Intent.ACTION_VIEW, 
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);

NOTA (por @TheNail): No funciona en Maps v.7 (última versión en el momento de escribir este artículo). Ignorará las coordenadas y buscará un objeto con el nombre de pila entre paréntesis. Consulte también Intención para Google Maps 7.0.0 con ubicación

Aunque las respuestas actuales son excelentes, ninguna de ellas hizo exactamente lo que estaba buscando, solo quería abrir la aplicación de mapas, agregar un nombre para cada ubicación de origen y destino, usar el esquema de URI geo no funcionaría para mí en absoluto y el enlace web de mapas no tenía etiquetas, así que se me ocurrió esta solución, que es esencialmente una combinación de las otras soluciones y comentarios hechos aquí, espero que sea útil para otros que vean esta pregunta.

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", sourceLatitude, sourceLongitude, "Home Sweet Home", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);

Para usar su ubicación actual como punto de partida (desafortunadamente no he encontrado una manera de etiquetar la ubicación actual), use lo siguiente

String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", destinationLatitude, destinationLongitude, "Where the party is at");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setPackage("com.google.android.apps.maps");
startActivity(intent);

Para completar, si el usuario no tiene la aplicación de mapas instalada, entonces será una buena idea detectar ActivityNotFoundException, luego podemos comenzar la actividad nuevamente sin la restricción de la aplicación de mapas, podemos estar bastante seguros de que nunca obtendremos al Toast al final, ya que un navegador de Internet es una aplicación válida para iniciar este esquema de URL también.

        String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?daddr=%f,%f (%s)", 12f, 2f, "Where the party is at");
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
        intent.setPackage("com.google.android.apps.maps");
        try
        {
            startActivity(intent);
        }
        catch(ActivityNotFoundException ex)
        {
            try
            {
                Intent unrestrictedIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
                startActivity(unrestrictedIntent);
            }
            catch(ActivityNotFoundException innerEx)
            {
                Toast.makeText(this, "Please install a maps application", Toast.LENGTH_LONG).show();
            }
        }

PD Las latitudes o longitudes utilizadas en mi ejemplo no son representativas de mi ubicación, cualquier semejanza con una ubicación real es pura coincidencia, es decir, no soy de África: P

EDITAR:

Para obtener indicaciones, ahora se admite una intención de navegación con google.navigation

Uri navigationIntentUri = Uri.parse("google.navigation:q=" + 12f +"," + 2f);//creating intent with latlng
Intent mapIntent = new Intent(Intent.ACTION_VIEW, navigationIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *