L'app Google Maps per Android mostra diversi intent che puoi utilizzare per lanciare Google Maps in modalità di visualizzazione, ricerca, navigazione o Street View. Se vuoi incorporare una mappa nella tua app, consulta la Guida introduttiva di Google Maps per le API Android.
Panoramica
Gli intent ti consentono di avviare un'attività in un'altra app descrivendo una semplice azione che vuoi compiere (ad esempio, "visualizzare una mappa" o "mostrare indicazioni stradali per l'aeroporto") in un oggetto Intent
. L'app Google Maps per Android supporta vari intent, consentendoti di lanciare l'app Google Maps ed eseguire una delle quattro azioni seguenti:
- Visualizza una mappa in una posizione e un livello di zoom specifici.
- Cerca luoghi o luoghi e visualizzali su una mappa.
- Richiedere indicazioni stradali da una località a un'altra. Le indicazioni stradali possono essere restituite per tre modalità di trasporto: in auto, a piedi e in bicicletta.
- 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 scoprire di più sui intent e sui filtri per intent o sui intent comuni alla piattaforma Android, consulta la documentazione per gli sviluppatori di 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 codificato in URL che specifica un'azione desiderata, oltre ad alcuni dati con cui eseguire l'azione.
- Package: chiamando
setPackage("com.google.android.apps.maps")
, assicurerai che l'app Google Maps per Android gestisca l'intent. Se il pacchetto non è impostato, il sistema determina quali app possono gestireIntent
. Se sono disponibili più app, è possibile che all'utente venga chiesto quale app vuole usare.
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à la corrispondente Activity
.
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, prima di presentare uno di questi intent a un utente, devi verificare che sia installata un'applicazione di destinazione.
Per verificare che un'app sia disponibile per ricevere l'intent, chiama resolveActivity()
nell'oggetto Intent
. Se il risultato non è null, esiste almeno un'app in grado di gestire l'intent ed è sicuro chiamare startActivity()
.
Se il risultato è null
, non devi utilizzare l'intent e, se possibile, devi disabilitare 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 dell'URL
Tutte le stringhe passate agli intent di Google Maps devono avere la codifica 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()
di 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'intenzione geo:
per visualizzare una mappa in una posizione e a un livello di zoom specificati.
geo:latitude,longitude?z=zoom
Parametri
latitude
elongitude
impostano il punto centrale della mappa.z
facoltativamente imposta il livello di zoom iniziale della mappa. I valori accettati variano da 0 (tutto il mondo) a 21 (singoli edifici). Il limite massimo può variare a seconda dei dati della mappa disponibili per la località 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 intento per visualizzare le query di ricerca all'interno di un'area visibile specificata. Quando la query ha un singolo risultato, puoi utilizzare questo intento per visualizzare un segnaposto in un luogo o un indirizzo specifico, ad esempio un punto di riferimento, un'attività, una funzione geografica 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 parametroq
è obbligatorio per tutte le richieste della Ricerca. Accetta la località come toponimo o indirizzo. La stringa deve essere con codifica URL, quindi un indirizzo come "City Hall, New York, NY" dovrebbe 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.
Ricerca categorica
Se trasmetti un termine di ricerca generale, Google Maps tenterà di trovare una località vicino alla latitudine/longitudine specificata che corrisponda ai tuoi criteri. Se non viene specificata alcuna località, Google Maps tenterà 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)
Puoi perfezionare ulteriormente i risultati di ricerca specificando un parametro zoom insieme alla stringa di query. Nell'esempio riportato di seguito, 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)
Ricerca di località
Se cerchi un indirizzo specifico, verrà visualizzato un segnaposto in tale 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 precedente imposta lat/lng di 0
,0
, ma trasmette 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 bias nei risultati della ricerca specificando una coordinata. Ad esempio, la ricerca di un indirizzo per "Via principale" restituirà 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 compensa i risultati in base a un'area specifica:
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 tua ricerca restituirà un solo valore, ti consigliamo di passare un'etichetta facoltativa. Le etichette devono essere specificate come stringa e vengono visualizzate sotto l'indicatore della mappa. Tieni presente che le etichette sono disponibili solo quando q
è specificato come coordinata di latitudine/longitudine.
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 a un indirizzo o a una latitudine/longitudine, puoi visualizzare 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
Utilizza questo intento per avviare la navigazione in Google Maps con indicazioni stradali passo passo all'indirizzo o alla coordinata specificati. Le indicazioni stradali vengono sempre fornite in base alla posizione attuale dell'utente.
google.navigation:q=a+street+address google.navigation:q=latitude,longitude
Parametri
q
: imposta il punto di arrivo per le ricerche durante la navigazione. Puoi specificare questo valore: latitudine, longitudine o indirizzo formattato come 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 uno di:d
in auto (predefinito)b
in biciclettal
per veicoli a due ruotew
a piedi
avoid
imposta le caratteristiche che il percorso deve cercare di evitare. Evita è facoltativo e può essere impostato su uno o più dei seguenti elementi:t
per i pedaggih
per le autostradef
per i traghetti
Esempi
I seguenti Intent
richiederanno la navigazione passo passo per lo Zoo di Taronga,
a Sydney, in 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)
Se preferisci non pagare i pedaggi o salire sul traghetto, puoi richiedere il percorso che cerca di 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 allenarti, 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 l'uso di un motociclo, puoi richiedere che le indicazioni stradali includono strade strette e percorsi non disponibili per le auto. Il seguente intent
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 di Street View
Utilizza l'intenzione google.streetview
per avviare Google Street View. Google Street View
offre viste panoramiche dalle località indicate all'interno dell'
area di copertura.
Sono disponibili anche foto sferiche fornite dagli utenti e raccolte 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 una latitudine e una 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 tua posizione venga agganciata a una diversa panoramica quando le immagini vengono aggiornate.panoid
è un ID panorama specifico. Google Maps utilizzerà l'ID panoramica se sono specificati siapanoid
siacbll
. Gli ID panoramica sono disponibili per un'app Android dall'oggettoStreetViewPanoramaLocation
.cbp
è un parametro facoltativo che regola l'orientamento iniziale della fotocamera. Il parametrocbp
accetta 5 valori separati da virgole, tutti facoltativi. I valori più significativi sono il secondo, il quarto e il quinto che impostano rispettivamente il rilevamento, lo zoom e l'inclinazione. Il primo e il terzo valore non sono supportati e devono essere impostati su0
.bearing
: indica l'intestazione della bussola in gradi in senso orario da nord. Il nord nord è 0, l'est è 90, il sud è 180, l'ovest è 270. I valori trasmessi al cuscinetto si uniranno; ciò significa che tutti i punti, 0°, 360° e 720° nella stessa direzione. Il rilevamento è il secondo dei cinque valori separati da virgole.zoom
: imposta il livello di zoom della fotocamera. Il livello di zoom predefinito è impostato su 0. Uno zoom pari a 1 raddoppierebbe l'ingrandimento. Lo zoom è bloccato tra 0 e il livello massimo di zoom per il panorama corrente. Ciò significa che qualsiasi valore che non rientra in questo intervallo verrà impostato sul valore più vicino che rientra nell'intervallo. Ad esempio, un valore -1 verrà impostato su 0. Lo zoom è il quarto di cinque valori separati da virgole.tilt
: consente di specificare l'angolazione, verso l'alto o verso il basso, della videocamera. L'intervallo è compreso tra -90 e 00 e 90, dove 90 è rivolto verso il basso, 0 è allineato all'orizzonte e -90 è rivolto verso l'alto.
Esempi
Di seguito sono riportati alcuni esempi di utilizzo di 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)