Google Maps Intents per Android

La App Google Maps per Android espone diversi intent che puoi utilizzare per avviare Google Maps nella Rete Display, ricerca, navigazione o Street View. Se vuoi incorpora una mappa nella tua app, fai riferimento all'API Google Maps per Android Guida introduttiva.

Panoramica

Gli intent ti consentono di iniziare un'attività in un'altra app descrivendo una semplice azione che desideri eseguire (ad esempio "visualizza una mappa" o "mostra le indicazioni stradali al aeroporto") in un Intent . La App Google Maps per Android supporta diversi intent, consentendoti di avviare l'app Google Maps ed eseguire una delle quattro azioni seguenti:

  1. Visualizza una mappa in una posizione e un livello di zoom specificati.
  2. Cercare luoghi o luoghi e visualizzarli su una mappa.
  3. Richiesta di 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.
  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 ulteriori informazioni su intent e intenzioni Filtri, o intent comuni ad Android , consulta la documentazione per gli sviluppatori Android.

Richieste di intent

Per avviare Google Maps con un intento, devi prima creare un Intent specificando 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 la codifica URL che specifica dell'azione, insieme ad alcuni dati con cui eseguire l'azione.
  • Pacchetto: la chiamata a setPackage("com.google.android.apps.maps") assicurati che l'app Google Maps per Android gestisca l'intent. Se 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 che desiderano utilizzare.

Dopo aver creato Intent, puoi richiedere al sistema di avviare i relativi dell'app in vari modi. Un metodo comune è passare Intent alla startActivity() . Il sistema avvierà l'app necessaria, in questo caso Google. Maps e avvia la 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, la tua app potrebbe arrestarsi in modo anomalo. Per questo motivo, è necessario innanzitutto verificare che un utente dell'applicazione viene installata prima di presentare uno di questi intent a un utente.

Per verificare che un'app sia disponibile per ricevere l'intent, chiama resolveActivity() su Intent . Se il risultato non è null, esiste almeno un'app in grado di gestire ed è sicuro chiamare startActivity() Se il risultato è null, non devi utilizzare l'intent e, se possibile, deve 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 trasmesse agli intent di Google Maps devono avere 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 android.net.Uri parse() 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 un livello di zoom specificati.

geo:latitude,longitude?z=zoom

Parametri

  • latitude e longitude impostano il punto centrale della mappa.
  • z consente di impostare il livello di zoom iniziale della mappa facoltativamente. Intervallo di valori accettati da 0 (tutto il mondo) a 21 (edifici singoli). Il limite superiore può variano a seconda dei dati della mappa disponibili nella 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 intent per mostrare le query di ricerca all'interno di un'area visibile specifica. Quando query ha un solo risultato, puoi usare questo intent per mostrare un segnaposto luogo o indirizzo particolare, come un punto di riferimento, un'attività commerciale, 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 parametri seguenti parametri:

  • q definisce i luoghi da evidenziare sulla mappa. Il parametro q è necessaria per tutte le richieste della Ricerca. Accetta una posizione come luogo nome o indirizzo. La stringa deve essere codificata nell'URL, quindi un indirizzo quale "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. La label deve essere specificato come stringa.

Se passi un termine di ricerca generico, Google Maps proverà a trovare una località accanto a latitudine/longitudine specificati che corrisponde ai criteri. Se nessuna località è specificato, Google Maps proverà a trovare le 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)

Cercare ristoranti a San Francisco

Puoi influenzare ulteriormente i risultati della ricerca specificando un parametro di zoom con la stringa di query. Nell'esempio seguente, l'aggiunta di uno zoom di 10 tenterà di 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, in quella posizione verrà visualizzato un segnaposto.

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 una latitudine/longitudine di 0,0, ma passa un indirizzo come query stringa. Quando cerchi una località molto specifica, la latitudine e la longitudine non sono obbligatori. Tuttavia, se non conosci l'indirizzo esatto, puoi tentano di differenziare i risultati della ricerca specificando una coordinata. Per esempio, eseguendo una ricerca di indirizzi per "via principale" ne restituirà troppi che consentono di analizzare i dati e visualizzare i 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 latitudine/longitudine all'URI di intent assegnerà 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)

Se sai che la tua ricerca restituirà un singolo valore, ti consigliamo di trasmettere un un'etichetta facoltativa. Le etichette devono essere specificate come stringa e verranno visualizzate sotto indicatore di mappa. Tieni presente che le etichette sono disponibili solo quando q è specificato come coordinata 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 all'indirizzo o alla 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

Utilizza questo intent per avviare la navigazione in Google Maps con indicazioni stradali passo passo all'indirizzo o alla coordinata specificati. Le indicazioni stradali vengono sempre fornite la 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 di navigazione. Questo valore può essere coordinate di latitudine e longitudine o un indirizzo in formato query. Se si tratta di una query che restituisce più di un risultato, il primo sarà selezionato.

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

    • d per la guida (impostazione predefinita)
    • b per andare in bicicletta
    • l per veicoli a due ruote
    • w a piedi
  • avoid imposta caratteristiche che il percorso dovrebbe cercare di evitare. "Evita" è facoltativo e può essere impostato su uno o più dei seguenti valori:

    • t per strade a pedaggio
    • h per le autostrade
    • f per i traghetti

Esempi

Il Intent seguente richiederà la navigazione passo passo per Taronga Zoo, tra 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 non spostarti sul traghetto, puoi richiedere l'itinerario 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 fare un po' di esercizio fisico, puoi richiedere le 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 prendere un motociclo, puoi richiedere le indicazioni stradali includere strade strette e sentieri non accessibili alle auto. I resi di intent riportati di seguito una rotta 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 località designate in tutto il suo area di copertura. 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 cbll o panoid .

  • cbll accetta latitudine e 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 visualizzate periodicamente aggiornato e le fotografie potrebbero essere scattate da posizioni leggermente diverse ogni volta, è possibile che la posizione si posizioni su un panoramica quando le immagini vengono aggiornate.

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

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

    • bearing: indica l'orientamento della fotocamera in gradi in senso orario dal nord. Il vero nord è 0, l'est è 90, il sud è 180, l'ovest è 270. Valori passate all'orientamento si avvolgeranno; ovvero 0°, 360° e 720° tutti punta nella stessa direzione. L'orientamento è definito come il secondo di cinque separati da virgole.
    • zoom: imposta il livello di zoom della fotocamera. Il livello di zoom predefinito è impostato a 0. Uno zoom pari a 1 raddoppia l'ingrandimento. Lo zoom è bloccato tra 0 e il livello di zoom massimo per la panoramica corrente. Ciò significa che qualsiasi valore che non rientra in questo intervallo verrà impostato più vicino che rientra nell'intervallo. Ad esempio, il valore -1 verrà impostato su 0. Lo zoom è il quarto di cinque valori separati da virgole.
    • tilt: specifica l'angolazione, verso l'alto o verso il basso, della videocamera. L'intervallo è -90 da 0 a 90, con 90 rivolto verso il basso, 0 centrato sull'orizzonte, e -90 puntano verso l'alto.

Esempi

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

Piramidi in Street View