Risposte:
Puoi usare qualcosa del genere:
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);
Per avviare la navigazione dalla posizione corrente, rimuovere il saddr
parametro e il valore.
È possibile utilizzare un indirizzo attuale anziché latitudine e longitudine. Tuttavia, ciò consentirà all'utente di scegliere una finestra di dialogo tra l'apertura tramite browser o Google Maps.
Ciò attiverà direttamente Google Maps in modalità di navigazione:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("google.navigation:q=an+address+city"));
AGGIORNARE
Nel maggio 2017 Google ha lanciato la nuova API per gli URL universali e multipiattaforma di Google Maps:
https://developers.google.com/maps/documentation/urls/guide
Puoi usare Intents anche con la nuova API.
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
Questo è un po 'fuori tema perché hai chiesto "indicazioni", ma puoi anche utilizzare lo schema URI geografico descritto nella documentazione di Android:
http://developer.android.com/guide/appendix/g-app-intents.html
Il problema con "geo: latitudine, longitudine" è che Google Maps si concentra solo sul tuo punto, senza spille o etichette.
È abbastanza confuso, soprattutto se devi indicare un luogo preciso o / e chiedere indicazioni stradali.
Se usi il parametro di query "geo: lat, lon? Q = name" per etichettare il tuo geopoint, usa la query per la ricerca e ignora i parametri lat / lon.
Ho trovato un modo per centrare la mappa con lat / lon e visualizzare un segnaposto con un'etichetta personalizzata, molto bello da visualizzare e utile quando chiedi indicazioni o qualsiasi altra azione:
Intent intent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=37.423156,-122.084917 (" + name + ")"));
startActivity(intent);
NOTA (di @TheNail): non funziona in Maps v.7 (ultima versione al momento della scrittura). Ignorerà le coordinate e cercherà un oggetto con il nome specificato tra parentesi. Vedi anche Intento per Google Maps 7.0.0 con posizione
geo:37.423156,-122.084917?q=37.423156,-122.084917 ...
?
Sebbene le risposte attuali siano fantastiche, nessuna di queste ha fatto esattamente quello che stavo cercando, volevo aprire solo l'app delle mappe, aggiungere un nome per ciascuna posizione e destinazione di origine, utilizzando lo schema URI geografico non avrebbe funzionato per me e il link web delle mappe non aveva etichette, quindi ho trovato questa soluzione, che è essenzialmente una fusione delle altre soluzioni e dei commenti fatti qui, si spera che sia utile per gli altri visualizzare questa domanda.
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);
Per utilizzare la posizione corrente come punto di partenza (purtroppo non ho trovato il modo di etichettare la posizione corrente), utilizzare quanto segue
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);
Per completezza, se l'utente non ha installato l'app per le mappe, sarà una buona idea catturare ActivityNotFoundException, quindi possiamo ricominciare l'attività senza la limitazione dell'app per le mappe, possiamo essere abbastanza sicuri che non avremo mai toast alla fine, poiché un browser Internet è un'applicazione valida per avviare anche questo schema di URL.
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();
}
}
PS Eventuali latitudini o longitudini utilizzate nel mio esempio non sono rappresentative della mia posizione, qualsiasi somiglianza con una posizione reale è pura coincidenza, ovvero non vengo dall'Africa: P
MODIFICARE:
Per le indicazioni stradali, ora è supportato un intento di navigazione 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);
Utilizzo degli ultimi URL di Google Maps multipiattaforma : anche se manca l'app Google Maps, questa si aprirà nel browser
Esempio 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);
Apri Google Maps utilizzando Intent con diverse modalità:
Possiamo aprire l'app di Google Maps usando l'intento:
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)
Qui, "mode = b" è per la bicicletta.
Possiamo impostare la modalità di guida, a piedi e in bicicletta utilizzando:
Puoi trovare ulteriori informazioni sull'intenzione con google maps qui .
Nota: se non esiste un percorso per la bicicletta / auto / a piedi, verrà visualizzato "Impossibile trovare la strada"
Puoi controllare la mia risposta originale qui .
Bene, puoi provare ad aprire l'applicazione integrata Android Maps utilizzando il Intent.setClassName
metodo
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);
Per i punti a più vie, è possibile utilizzare anche quanto segue.
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);
La prima serie di coordinate è la posizione iniziale. Tutti i prossimi sono punti intermedi, il percorso tracciato passa attraverso.
Continua ad aggiungere punti intermedi concedendo "/ latitudine, longitudine" alla fine. Apparentemente esiste un limite di 23 punti di passaggio secondo i documenti di Google . Non sono sicuro se questo vale anche per Android.
Se sei interessato a mostrare Latitudine e Longitudine dalla direzione corrente, puoi usare questo:
Le indicazioni vengono sempre fornite dalla posizione corrente dell'utente.
La seguente query ti aiuterà a farlo. Puoi passare la latitudine e la longitudine della destinazione qui:
google.navigation:q=latitude,longitude
Usa sopra come:
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 se vuoi mostrare tramite posizione, usa:
google.navigation:q=a+street+address
Maggiori informazioni qui: Google Maps Intents per Android
mapIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
Google DirectionsView
con posizione di origine come posizione corrente e destinazione come data come stringa
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);
}
In quanto sopra destinationCityName
è una stringa variabile modificata come richiesto.
prova questo
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);
se conosci il punto A, il punto B (e qualsiasi altra funzione o traccia tra di loro) puoi usare un file KML insieme alle tue intenzioni.
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);
per maggiori informazioni, vedi questa risposta SO
NOTA: in questo esempio viene utilizzato un file di esempio che (a partire da mar13) è ancora online. se è andato offline, trova un file kml online e cambia l'URL
Per prima cosa devi ora che puoi usare l'intento implicito, la documentazione di Android ci fornisce un intento comune molto dettagliato per implementare l'intento della mappa di cui hai bisogno per creare un nuovo intento con due parametri
Per l'azione che possiamo usare Intent.ACTION_VIEW
e per Uri dovremmo costruirlo, di seguito ho allegato un codice di esempio per creare, costruire, avviare l'attività.
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>
non URI opachi <scheme>:<opaque part>#<fragment>
. Il codice sopra riportato produce il seguente URI: geo:/0%2C0?Eiffel%20Tower
che provoca l'arresto anomalo dell'app Google Maps. Anche la documentazione ufficiale utilizza URI grezzi / opachi proprio per questo motivo. Il codice corretto sarebbe quindi:Uri.parse("geo:0,0?q=" + Uri.encode("Eiffel Tower"))
Una bella soluzione kotlin, che utilizza l'ultima risposta multipiattaforma menzionata da lakshman sai ...
Nessun Uri.toString non necessario e Uri.parse però, questa risposta pulita e minimale:
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
})
In questo modo puoi avviare Google Maps Directions tramite un intento su Android
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);
}
}
});