Google Maps Intents per Android

L'app Google Maps per Android presenta diversi intent che puoi utilizzare per avviare Google Maps in modalità display, ricerca, navigazione o Street View. Se vuoi incorporare una mappa nella tua app, consulta la Guida introduttiva dell'API Google Maps per Android.

Panoramica

Gli intent ti consentono di avviare un'attività in un'altra app descrivendo una semplice azione che vuoi eseguire, ad esempio "visualizzare una mappa" o "mostrare le indicazioni stradali per l'aeroporto") in un oggetto Intent. L'app Google Maps per Android supporta diversi intent, consentendoti di lanciare l'app Google Maps ed eseguire una delle quattro azioni seguenti:

  1. Visualizza una mappa in una posizione specifica e con un livello di zoom specificato.
  2. Cerca luoghi o luoghi e visualizzali su una mappa.
  3. Richiedi indicazioni stradali da un luogo a un altro. Le indicazioni stradali possono essere restituite per tre modalità di trasporto: in auto, a piedi o in bicicletta.
  4. Visualizza immagini panoramiche in Google Street View.

In questa pagina vengono descritti gli intent che puoi utilizzare con l'app Google Maps per Android. Per saperne di più sui filtri per intent e intent o sugli intent comuni alla piattaforma Android, consulta la documentazione per gli sviluppatori Android.

Richieste di intent

Per avviare Google Maps con un intent, devi prima creare un oggetto Intent, specificandone l'azione, l'URI e il pacchetto.

  • Azione: tutti gli intent di Google Maps sono chiamati come azione di visualizzazione: ACTION_VIEW.
  • URI: gli intent di Google Maps utilizzano con codifica URL che specificano l'azione desiderata, insieme ad alcuni dati con cui eseguirla.
  • Pacchetto: la chiamata a setPackage("com.google.android.apps.maps") assicurerà che l'app Google Maps per Android gestisca l'intent. Se il pacchetto non è impostato, il sistema determinerà quali app sono in grado di gestire Intent. Se sono disponibili più app, all'utente potrebbe essere chiesto quale app vuole utilizzare.

Dopo aver creato Intent, puoi richiedere al sistema di avviare l'app correlata in diversi modi. Un metodo comune consiste nel passare Intent al metodo startActivity(). Il sistema avvierà l'app necessaria, in questo caso Google Maps, e avvierà il Activity corrispondente.

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)

Se il sistema non riesce a identificare un'app in grado di rispondere all'intent, l'app potrebbe arrestarsi in modo anomalo. Per questo motivo, devi verificare che un'applicazione ricevente sia installata prima di presentare uno di questi intent a un utente.

Per verificare che un'app sia disponibile per ricevere l'intent, chiama resolveActivity() sull'oggetto Intent. Se il risultato è diverso da null, esiste almeno un'app in grado di gestire l'intent ed puoi chiamare startActivity() in sicurezza. Se il risultato è null, non devi utilizzare l'intent e, se possibile, devi disattivare la funzionalità che richiama l'intent.

Java

if (mapIntent.resolveActivity(getPackageManager()) != null) {
  ...
}

Kotlin

mapIntent.resolveActivity(packageManager)?.let {
  ...
}

Ad esempio, per visualizzare una mappa di San Francisco, puoi utilizzare il seguente codice:

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

Stringhe di query con codifica URL

Tutte le stringhe passate a Google Maps Intent devono essere codificate in URI. Ad esempio, la stringa "1st & Pike, Seattle" dovrebbe diventare 1st%20%26%20Pike%2C%20Seattle. Gli spazi nella stringa possono essere codificati con %20 o sostituiti con il segno più (+).

Puoi utilizzare il metodo parse() android.net.Uri per codificare le stringhe. Ad esempio:

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

Visualizzazione di una mappa

Utilizza l'intent geo: per visualizzare una mappa in una posizione e con un livello di zoom specificati.

geo:latitude,longitude?z=zoom

Parametri

  • latitude e longitude impostano il punto centrale della mappa.
  • Se vuoi, z imposta il livello di zoom iniziale della mappa. I valori accettati sono compresi tra 0 (tutto il mondo) e 21 (singoli edifici). Il limite massimo può variare a seconda dei dati della mappa disponibili nella posizione selezionata.

Esempi

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)

Ricerca di una località

Utilizza questo intent per mostrare le query di ricerca all'interno di un'area visibile specifica. Quando la query ha un unico risultato, puoi utilizzare questo intent per visualizzare un segnaposto in corrispondenza di un luogo o indirizzo specifico, ad esempio un punto di riferimento, un'attività, un elemento geografico o una città.

geo:latitude,longitude?q=query
geo:0,0?q=my+street+address
geo:0,0?q=latitude,longitude(label)

Parametri

Oltre ai parametri utilizzati per visualizzare una mappa, la Ricerca supporta i seguenti parametri:

  • q definisce i luoghi da evidenziare sulla mappa. Il parametro q è obbligatorio per tutte le richieste di ricerca. che accetta una località come nome o indirizzo. La stringa deve essere con codifica URL, quindi un indirizzo come "City Hall, New York, NY" deve essere convertito in City+Hall,New+York,NY.

  • label ti consente di impostare un'etichetta personalizzata in un luogo identificato sulla mappa. label deve essere specificato come stringa.

Se trasmetti un termine di ricerca generico, Google Maps tenterà di trovare una località vicina alla latitudine/longitudine specificata che corrisponde ai tuoi criteri. Se non viene specificata alcuna posizione, Google Maps cercherà di trovare schede nelle vicinanze. Ad esempio:

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)

Ricerca di ristoranti a San Francisco

Puoi influenzare ulteriormente i risultati della ricerca specificando un parametro di zoom insieme alla stringa di query. Nell'esempio seguente, l'aggiunta di uno zoom di 10 tenterà di trovare ristoranti a livello di città anziché nelle vicinanze.

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)

Se cerchi un indirizzo specifico, verrà visualizzato un segnaposto in quella posizione.

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)

L'esempio riportato sopra imposta lat/lng di 0,0, ma passa un indirizzo come stringa di query. Quando cerchi una località molto specifica, la latitudine e la longitudine non sono obbligatorie. Tuttavia, se non conosci l'indirizzo esatto, puoi tentare di polarizzare i risultati della ricerca specificando una coordinata. Ad esempio, se cerchi un indirizzo per "Strada principale", verranno restituiti troppi risultati.

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

L'aggiunta di lat/lng all'URI dell'intent condurrà i risultati a una determinata area:

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)

Quando sai che la ricerca restituirà un singolo valore, potresti voler passare un'etichetta facoltativa. Le etichette devono essere specificate come stringa e verranno visualizzate sotto l'indicatore della mappa. Tieni presente che le etichette sono disponibili solo quando q viene specificato come coordinata lat/lng.

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)

In alternativa all'indirizzo o a una latitudine/longitudine, puoi mostrare un segnaposto in una posizione nota utilizzando un plus code.

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

Avvio della navigazione passo passo in corso...

Utilizza questo intent per avviare la navigazione in Google Maps con indicazioni passo passo per raggiungere l'indirizzo o la coordinata specificati. Le indicazioni stradali vengono sempre fornite dalla posizione corrente dell'utente.

google.navigation:q=a+street+address
google.navigation:q=latitude,longitude

Parametri

  • q: imposta il punto di arrivo per le ricerche di navigazione. Questo valore può essere le coordinate di latitudine e longitudine o un indirizzo formattato di query. Se si tratta di una stringa di query che restituisce più di un risultato, verrà selezionato il primo risultato.

  • mode imposta il metodo di trasporto. La modalità è facoltativa e può essere impostata su una delle seguenti opzioni:

    • d per la guida (impostazione predefinita)
    • b per andare in bicicletta
    • l per motocicli
    • w per camminare
  • avoid imposta le funzionalità che il percorso dovrebbe cercare di evitare. Evita è facoltativo e può essere impostato su uno o più dei seguenti elementi:

    • t per i pedaggi
    • h per le autostrade
    • f per i traghetti

Esempi

Il seguente Intent richiederà la navigazione passo passo per lo zoo di Taronga, a Sydney, 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)

Indicazioni stradali per Taronga Zoo

Se preferisci non pagare pedaggi o viaggiare su un traghetto, puoi richiedere i percorsi per evitare queste cose.

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)

Se preferisci fare un po' di esercizio fisico, puoi richiedere indicazioni in bicicletta.

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)

Se preferisci utilizzare un veicolo a due ruote motorizzato, puoi richiedere che le indicazioni stradali includano strade strette e sentieri non disponibili per le auto. Il valore intent riportato di seguito restituisce un percorso in 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)

Visualizzazione di una panoramica in Street View

Utilizza l'intent google.streetview per avviare Google Street View. Google Street View offre viste panoramiche da luoghi designati in tutta la sua area di copertura. Sono inoltre disponibili foto sferiche fornite dagli utenti e collezioni speciali di Street View.

google.streetview:cbll=latitude,longitude&cbp=0,bearing,0,zoom,tilt
google.streetview:panoid=id&cbp=0,bearing,0,zoom,tilt

Parametri

Tutti gli URI google.streetview devono includere un parametro cbll o panoid.

  • cbll accetta la latitudine e la longitudine come valori separati da virgole (46.414382,10.013988). L'app mostrerà il panorama fotografato più vicino a questa località. Poiché le immagini di Street View vengono aggiornate periodicamente e le fotografie possono essere scattate da posizioni leggermente diverse ogni volta, è possibile che la posizione possa essere agganciata a una panoramica diversa quando le immagini vengono aggiornate.

  • panoid è un ID panorama specifico. Google Maps utilizzerà l'ID panoramica se sono specificati sia un elemento panoid che un cbll. Gli ID panorama sono disponibili per un'app per Android dall'oggetto StreetViewPanoramaLocation.

  • cbp è un parametro facoltativo che regola l'orientamento iniziale della fotocamera. Il parametro cbp accetta 5 valori separati da virgole, tutti facoltativi. I valori più significativi sono il secondo, il quarto e il quinto, che impostano rispettivamente l'orientamento, lo zoom e l'inclinazione. Il primo e il terzo valore non sono supportati e devono essere impostati su 0.

    • bearing: indica l'orientamento della fotocamera in gradi in senso orario a partire da nord. Il vero nord è 0, l'est è 90, il sud è 180, l'ovest è 270. I valori passati all'orientamento fino a -0°, 360° e 720° sono tutti punti nella stessa direzione. L'orientamento è il secondo di cinque valori separati da virgole.
    • zoom: imposta il livello di zoom della fotocamera. Il livello di zoom predefinito è impostato su 0. Uno zoom di 1 raddoppia l'ingrandimento. Lo zoom viene bloccato tra 0 e il livello massimo di zoom della panoramica corrente. Ciò significa che qualsiasi valore che non rientra in questo intervallo verrà impostato all'estremità più vicina che rientra nell'intervallo. Ad esempio, il valore -1 sarà impostato su 0. Lo zoom è il quarto dei cinque valori separati da virgole.
    • tilt: specifica l'angolazione, verso l'alto o verso il basso, della videocamera. L'intervallo è compreso tra -90 e 0-90, con 90 per l'orizzonte verso il basso, 0 per l'orizzonte e -90 per l'orizzonte verso l'alto.

Esempi

Di seguito sono riportati alcuni esempi di utilizzo dell'intent 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)

Piramidi in Street View