Respuestas:
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 el valor.
Puede usar una dirección real en lugar de latitud y 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 activará Google Maps en 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 universales multiplataforma de Google Maps:
https://developers.google.com/maps/documentation/urls/guide
También puedes usar Intents con la nueva API.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Esto está un poco fuera de tema porque solicitó "instrucciones", pero también puede usar el esquema Geo URI descrito en la Documentación de Android:
http://developer.android.com/guide/appendix/g-app-intents.html
El problema al usar "geo: latitud, longitud" 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 indicaciones.
Si utiliza el parámetro de consulta "geo: lat, lon? Q = name" para etiquetar su geopunto, utiliza la consulta para buscar y descartar los parámetros lat / lon.
Encontré una forma de centrar el mapa con lat / lon y mostrar un pin con una etiqueta personalizada, muy agradable de mostrar y útil al solicitar 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 la redacción). Ignorará las coordenadas y buscará un objeto con el nombre entre paréntesis. Ver también Intención para Google Maps 7.0.0 con ubicación
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Aunque las respuestas actuales son geniales, 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 geo URI no funcionaría para mí en absoluto y el enlace web de los mapas no tenía etiquetas, así que se me ocurrió esta solución, que es esencialmente una amalgama de las otras soluciones y comentarios hechos aquí, espero que sea útil para otros que ven 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 la ActivityNotFoundException, entonces podemos comenzar la actividad nuevamente sin la restricción de la aplicación de mapas, podemos estar bastante seguros de que nunca obtendremos Toast al final ya que un navegador de Internet es una aplicación válida para lanzar 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 verdadera es pura coincidencia, es decir, no soy de África: P
EDITAR:
Para obtener instrucciones, 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);
Uso de las últimas URL de Google Maps multiplataforma : incluso si falta la aplicación Google Maps , se abrirá en el navegador
Ejemplo https://www.google.com/maps/dir/?api=1&origin=81.23444,67.0000&destination=80.252059,13.060604
Uri.Builder builder = new Uri.Builder();
builder.scheme("https")
.authority("www.google.com")
.appendPath("maps")
.appendPath("dir")
.appendPath("")
.appendQueryParameter("api", "1")
.appendQueryParameter("destination", 80.00023 + "," + 13.0783);
String url = builder.build().toString();
Log.d("Directions", url);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
Abra Google Maps usando Intent con diferentes modos:
Podemos abrir la aplicación Google Maps con la intención:
val gmmIntentUri = Uri.parse("google.navigation:q="+destintationLatitude+","+destintationLongitude + "&mode=b")
val mapIntent = Intent(Intent.ACTION_VIEW, gmmIntentUri)
mapIntent.setPackage("com.google.android.apps.maps")
startActivity(mapIntent)
Aquí, "modo = b" es para bicicleta.
Podemos configurar el modo de conducir, caminar y andar en bicicleta usando:
Puede encontrar más información sobre la intención con google maps aquí .
Nota: Si no hay una ruta para la bicicleta / automóvil / caminata, le mostrará "No puedo encontrar el camino"
Puedes consultar mi respuesta original aquí .
Bueno, puedes intentar abrir la aplicación integrada Android Maps utilizando el Intent.setClassName
método.
Intent i = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.827500,-122.481670"));
i.setClassName("com.google.android.apps.maps",
"com.google.android.maps.MapsActivity");
startActivity(i);
Para puntos de paso múltiples, también se puede utilizar el siguiente.
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("https://www.google.com/maps/dir/48.8276261,2.3350114/48.8476794,2.340595/48.8550395,2.300022/48.8417122,2.3028844"));
startActivity(intent);
El primer conjunto de coordenadas es su ubicación inicial. Todos los siguientes son puntos de ruta, la ruta trazada pasa.
Simplemente siga agregando puntos de ruta concatenando "/ latitud, longitud" al final. Aparentemente, hay un límite de 23 puntos de referencia según los documentos de Google . No estoy seguro si eso también se aplica a Android.
Si está interesado en mostrar la latitud y la longitud desde la dirección actual, puede usar esto:
Siempre se dan instrucciones desde la ubicación actual de los usuarios.
La siguiente consulta lo ayudará a realizar eso. Puede pasar la latitud y longitud de destino aquí:
google.navigation:q=latitude,longitude
Use arriba como:
Uri gmmIntentUri = Uri.parse("google.navigation:q=latitude,longitude");
Intent mapIntent = new Intent(Intent.ACTION_VIEW, gmmIntentUri);
mapIntent.setPackage("com.google.android.apps.maps");
startActivity(mapIntent);
O si desea mostrar por ubicación, use:
google.navigation:q=a+street+address
Más información aquí: Google Maps Intents para Android
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google DirectionsView
con la ubicación de origen como ubicación actual y la ubicación de destino como una cadena
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?f=d&daddr="+destinationCityName));
intent.setComponent(new ComponentName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity"));
if (intent.resolveActivity(getPackageManager()) != null) {
startActivity(intent);
}
En lo anterior destinationCityName
hay una cadena variable modificable según sea necesario.
prueba esto
Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr="+src_lat+","+src_ltg+"&daddr="+des_lat+","+des_ltg));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
si conoce el punto A, el punto B (y las características o pistas intermedias) puede usar un archivo KML junto con su intención.
String kmlWebAddress = "http://www.afischer-online.de/sos/AFTrack/tracks/e1/01.24.Soltau2Wietzendorf.kml";
String uri = String.format(Locale.ENGLISH, "geo:0,0?q=%s",kmlWebAddress);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
startActivity(intent);
para más información, ver esta respuesta SO
NOTA: este ejemplo utiliza un archivo de muestra que (a partir de mar13) todavía está en línea. si se ha desconectado, busque un archivo kml en línea y cambie su url
Primero necesita ahora que puede usar la intención implícita, la documentación de Android nos proporciona intenciones comunes muy detalladas para implementar la intención del mapa que necesita para crear una nueva intención con dos parámetros
Para la acción que podemos usar Intent.ACTION_VIEW
y para Uri debemos compilarlo, a continuación adjunto un código de muestra para crear, construir e iniciar la actividad.
String addressString = "1600 Amphitheatre Parkway, CA";
/*
Build the uri
*/
Uri.Builder builder = new Uri.Builder();
builder.scheme("geo")
.path("0,0")
.query(addressString);
Uri addressUri = builder.build();
/*
Intent to open the map
*/
Intent intent = new Intent(Intent.ACTION_VIEW, addressUri);
/*
verify if the devise can launch the map intent
*/
if (intent.resolveActivity(getPackageManager()) != null) {
/*
launch the intent
*/
startActivity(intent);
}
<scheme>://<authority><absolute path>?<query>#<fragment>
no URI opacos <scheme>:<opaque part>#<fragment>
. El código anterior produce el siguiente URI: lo geo:/0%2C0?Eiffel%20Tower
que hace que la aplicación Google Maps se bloquee. Incluso la documentación oficial usa URI sin procesar / opacos por esta misma razón. El código correcto sería:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Una buena solución de Kotlin, utilizando la última respuesta multiplataforma mencionada por lakshman sai ...
Sin embargo, no es necesario Uri.toString y Uri.parse, esta respuesta es limpia y mínima:
val intentUri = Uri.Builder().apply {
scheme("https")
authority("www.google.com")
appendPath("maps")
appendPath("dir")
appendPath("")
appendQueryParameter("api", "1")
appendQueryParameter("destination", "${yourLocation.latitude},${yourLocation.longitude}")
}.build()
startActivity(Intent(Intent.ACTION_VIEW).apply {
data = intentUri
})
Puede iniciar Direcciones de Google Maps a través de una intención en Android de esta manera
btn_search_route.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String source = et_source.getText().toString();
String destination = et_destination.getText().toString();
if (TextUtils.isEmpty(source)) {
et_source.setError("Enter Soruce point");
} else if (TextUtils.isEmpty(destination)) {
et_destination.setError("Enter Destination Point");
} else {
String sendstring="http://maps.google.com/maps?saddr=" +
source +
"&daddr=" +
destination;
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse(sendstring));
startActivity(intent);
}
}
});