Avvia Google Maps Directions tramite un'intenzione su Android

La mia app ha bisogno di mostrare le indicazioni Google Maps da A a B, ma non voglio mettere Google Maps nella mia applicazione – invece, voglio lanciarlo utilizzando un Intento. È ansible? Se sì, come?

  • Come creare un arrays multidimensionale?
  • Come aprire Google Maps utilizzando l'indirizzo?
  • Visualizzazione di un button di overflow del menu in una barra degli strumenti
  • Focus automaticamente la visualizzazione successiva di text
  • L'invocazione del metodo può produrre java NullpointerException
  • Come hide le righe specifiche di un cursore in android
  • Impostare TouchListener nella vista di root senza sovrascrivere i punti di vista di figlio?
  • Vorrei visualizzare la visualizzazione di text come un collegamento cliccabile
  • Il rilevamento del dispositivo per il debug (ADB) non funziona
  • Utilizzo di PowerMock e Robolectric - IncompatibleClassChangeError
  • Android: Mediaplayer è andato via con events non gestite
  • Come gestire il controllo e deselect la casella di controllo creata dynamicmente in android
  • 12 Solutions collect form web for “Avvia Google Maps Directions tramite un'intenzione su Android”

    Potresti usare qualcosa di simile:

    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 parametro e il valore saddr .

    È ansible utilizzare un indirizzo effettivo invece di latitudine e longitudine. Tuttavia ciò darà all'utente una window di dialogo per scegliere l'apertura tramite browser o Google Maps.

    Questo accenderà 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 URL universali e multipiatta di Google Maps:

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

    È anche ansible utilizzare Intenti con la nuova API.

    Questo è un po 'fuori discussione perché hai chiesto "indicazioni", ma puoi anche utilizzare lo schema URI Geo descritto nella Documentazione Android:

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

    Il problema con "geo: latitudine, longitudine" è che Google Maps centri solo al tuo punto, senza alcun pin o etichetta.

    Questo è abbastanza confuso, soprattutto se è necessario indicare un posto preciso e / o chiedere indicazioni.

    Se si utilizza il parametro query "geo: lat, lon? Q = nome" per etichettare il proprio geopoint, utilizza la query per la ricerca e respinge i parametri lat / lon.

    Ho trovato un modo per centrare la mappa con lat / lon e mostrare un perno con un'etichetta personalizzata, molto bello da mostrare e utile quando chiedere 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 (da @TheNail): non funziona in Maps v.7 (versione più recente al momento della scrittura). Ignora le coordinate e cercherà un object con il nome dato tra le parentesi. Vedere anche Intent per Google Maps 7.0.0 con posizione

    Anche se le risposte correnti sono ottime, nessuna di esse ha fatto abbastanza quello che stavo cercando, volevo aprire solo le app mappe, aggiungere un nome per ciascuna delle destinazioni di origine e destinazione, utilizzando lo schema URI di geo non functionrebbe per me a tutti e il link web mappe non ha avuto etichette, quindi ho trovato questa soluzione, che è essenzialmente una fusione delle altre soluzioni e commenti fatti qui, si spera che sia utile ad altri che visualizzano 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 un modo per etichettare la posizione corrente) quindi 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 la completezza, se l'utente non dispone dell'applicazione mappe installata, allora sarà una buona idea prendere l'ActivityNotFoundException, quindi possiamo riavviare l'attività senza restrizioni app per mappe, possiamo essere abbastanza sicuri che non saremo mai al Toast alla fine poiché un browser Internet è un'applicazione valida per lanciare anche questo schema 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 Qualsiasi latitudine o longitudine utilizzata nel mio esempio non sono rappresentative della mia posizione, qualsiasi somiglianza a una posizione vera è pura coincidenza, aka io non sono dall'Africa: P

    Bene, puoi provare ad aprire l'applicazione incorporata Android Maps utilizzando il metodo Intent.setClassName .

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

    Utilizzando gli ultimi URL di Google Maps tra piattaforma : anche se manca l'applicazione google maps apre 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); 

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

    Questo è ciò che ha funzionato per me:

     Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://maps.google.co.in/maps?q=" + yourAddress)); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } 

    In primo luogo è necessario che tu possa utilizzare l'intento implicito, la documentazione android ci fornisce una intenta comune molto dettagliata per implementare l'intento della mappa per creare un nuovo intento con due parametri

    • Azione
    • Uri

    Per l'azione possiamo usare Intent.ACTION_VIEW e per Uri dovremmo costruirlo, sotto ho allegato un codice di esempio per creare, build, 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); } 

    Per i punti a più vie, possono essere utilizzati anche seguenti.

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

    Il primo insieme di coordinate è la tua posizione di partenza. Tutti i successivi sono punti di strada, il path pianificato passa attraverso.

    Basta continuare a aggiungere punti di punti concatenando "/ latitudine, longitudine" alla fine. C'è apparentemente un limite di 23 punti di strada secondo i documenti di Google . Non è sicuro se questo vale anche per Android.

    se conosci il punto A, il punto B (e qualunque funzionalità o tracce tra di loro) puoi utilizzare un file KML insieme al tuo intento.

     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, vedere questa risposta SO

    NOTA: in questo esempio viene utilizzato un file di esempio che (a partire da mar13) è ancora in linea. se è andato in linea, trovare un file kml online e modificare il tuo url

    Se desideri mostrare la latitudine e la longitudine dalla direzione corrente, puoi utilizzare questo:

    Le indicazioni sono sempre fornite dalla posizione attuale degli utenti.

    La seguente query ti aiuterà a farlo. È ansible passare qui la latitudine e la longitudine di destinazione:

     google.navigation:q=latitude,longitude 

    Utilizza 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); 

    Oppure, se si desidera mostrare tramite la posizione, utilizzare:

     google.navigation:q=a+street+address 

    Ulteriori informazioni qui: Google Maps intenti per Android

     Uri.Builder directionsBuilder = new Uri.Builder() .scheme("https") .authority("www.google.com") .appendPath("maps") .appendPath("dir") .appendPath("") .appendQueryParameter("api", "1") .appendQueryParameter("destination", lat + "," + lon); startActivity(new Intent(Intent.ACTION_VIEW, directionsBuilder.build())); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.