Questo argomento descrive come aggiungere una mappa di base a un'app per Android dopo aver configurato il progetto in modo da utilizzare Maps SDK for Android. Dopo aver aggiunto una mappa, puoi modificarne il tipo e le caratteristiche.
Panoramica
Maps SDK for Android fornisce diverse classi che la tua app può utilizzare per gestire il ciclo di vita, la funzionalità e i dati di una mappa. Le classi supportano le interazioni degli utenti in base al modello di UI di Android, ad esempio l'impostazione dello stato iniziale della mappa e la risposta all'input dei gesti dell'utente in fase di runtime.
L'interfaccia e le classi principali per la gestione delle mappe:
GoogleMap: il punto di accesso per la gestione delle funzionalità e dei dati della mappa sottostante. La tua app può accedere a un oggettoGoogleMapsolo dopo che è stato recuperato da un oggettoSupportMapFragmentoMapView.SupportMapFragment: un frammento per gestire il ciclo di vita di un oggettoGoogleMap.MapView: una vista per la gestione del ciclo di vita di un oggettoGoogleMap.OnMapReadyCallback: un'interfaccia di callback che gestisce gli eventi e l'interazione dell'utente per l'oggettoGoogleMap.
Un oggetto GoogleMap esegue automaticamente queste operazioni:
- Connessione al servizio Google Maps.
- Download dei riquadri della mappa.
- Visualizzazione dei riquadri sullo schermo del dispositivo.
- Visualizzazione di vari controlli, come spostamento e zoom.
- Rispondere ai gesti di panoramica e zoom spostando la mappa e aumentando o diminuendo lo zoom.
Per utilizzare un oggetto GoogleMap nella tua app, devi utilizzare un oggetto SupportMapFragment o MapView come oggetto contenitore per la mappa e poi recuperare l'oggetto GoogleMap dal contenitore. Poiché le classi container derivano da un frammento o da una visualizzazione Android, forniscono alla mappa le funzionalità di gestione del ciclo di vita e dell'interfaccia utente delle classi base Android.
La classe SupportMapFragment è il container più moderno e comune per un oggetto GoogleMap.
Visualizza il codice
Il seguente codice proviene dall'attività Java completa utilizzata in questo argomento per l'aggiunta statica di un frammento. Il progetto Android è stato creato dal modello di progetto vuoto e poi aggiornato in base alla guida alla configurazione del progetto. Dopo aver eseguito i passaggi descritti in questo argomento, il codice potrebbe variare in base al modello di progetto.
package com.example.mapsetup; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; // Implement OnMapReadyCallback. public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Set the layout file as the content view. setContentView(R.layout.activity_main); // Get a handle to the fragment and register the callback. SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map); mapFragment.getMapAsync(this); } // Get a handle to the GoogleMap object and display marker. @Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions() .position(new LatLng(0, 0)) .title("Marker")); } }
Per aggiungere una mappa
Questa sezione descrive come aggiungere una mappa di base utilizzando un frammento come contenitore della mappa. Tuttavia, puoi utilizzare una visualizzazione. Per un esempio, consulta RawMapViewDemoActivity su GitHub.
I passaggi di base sono i seguenti:
Per scaricare l'SDK, ottenere una chiave API e aggiungere i framework richiesti, segui i passaggi descritti in:
Aggiungi un oggetto
SupportMapFragmentall'attività che gestirà la mappa. Puoi aggiungere il frammento in modo statico o dinamico.Implementa l'interfaccia
OnMapReadyCallback.Imposta il file di layout come visualizzazione dei contenuti.
Se hai aggiunto il frammento in modo statico, ottieni un handle per il frammento.
Registra il callback.
Ottieni un handle per l'oggetto
GoogleMap.
Aggiungi un oggetto SupportMapFragment
Puoi aggiungere un oggetto SupportMapFragment alla tua app in modo statico o dinamico.
Il modo più semplice è aggiungerlo in modo statico. Se aggiungi il frammento in modo dinamico, puoi eseguire azioni aggiuntive sul frammento, ad esempio rimuoverlo e sostituirlo in fase di runtime.
Per aggiungere un frammento in modo statico
Nel file di layout dell'attività che gestirà la mappa:
- Aggiungi un elemento
fragment. - Aggiungi la dichiarazione del nome
xmlns:map="http://schemas.android.com/apk/res-auto". In questo modo è possibile utilizzare gli attributi XML personalizzati dimaps. - Nell'elemento
fragment, imposta l'attributoandroid:namesucom.google.android.gms.maps.SupportMapFragment. - Nell'elemento
fragment, aggiungi l'attributoandroid:ide impostalo sull'ID risorsa R.id.map (@+id/map).
Ad esempio, ecco un file di layout completo che include un elemento fragment:
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-auto"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
Per aggiungere un frammento in modo dinamico
Nell'attività:
- Crea un'istanza
SupportMapFragment. - Esegui il commit di una transazione che aggiunge il frammento all'attività. Per saperne di più, consulta Transazioni di frammenti.
Ad esempio:
Kotlin
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(R.id.map_container, mapFragment) .commit()
Java
SupportMapFragment mapFragment = SupportMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.add(R.id.map_container, mapFragment); fragmentTransaction.commit();
Implementa l'interfaccia OnMapReadyCallback
Aggiorna la dichiarazione dell'attività come segue:
Kotlin
class MainActivity : AppCompatActivity(), OnMapReadyCallback { // ... }
Java
class MainActivity extends AppCompatActivity implements OnMapReadyCallback { // ... }
Imposta la visualizzazione dei contenuti
Nel metodo onCreate della tua attività, chiama il metodo setContentView e imposta il file di layout come visualizzazione dei contenuti.
Ad esempio, se il file di layout è denominato main.xml:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.main) }
Java
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Ottieni un handle per il frammento e registra il callback
Per ottenere un handle per il frammento, chiama il metodo
FragmentManager.findFragmentByIde passagli l'ID risorsa del frammento nel file di layout. Se hai aggiunto il frammento in modo dinamico, salta questo passaggio perché hai già recuperato l'handle.Chiama il metodo
getMapAsyncper impostare il callback sul frammento.
Ad esempio, se hai aggiunto il frammento in modo statico:
Kotlin
val mapFragment = supportFragmentManager .findFragmentById(R.id.map) as SupportMapFragment mapFragment.getMapAsync(this)
Java
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(this);
Ottieni un handle per l'oggetto GoogleMap
Utilizza il metodo di callback onMapReady per ottenere un handle per l'oggetto GoogleMap. Il callback viene attivato quando la mappa è pronta per ricevere l'input dell'utente. Fornisce un'istanza non null della classe GoogleMap che puoi utilizzare per aggiornare la mappa.
In questo esempio, il callback onMapReady recupera un handle per l'oggetto GoogleMap e poi viene aggiunto un indicatore alla mappa:
Kotlin
override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker( MarkerOptions() .position(LatLng(0.0, 0.0)) .title("Marker"), ) }
Java
@Override public void onMapReady(GoogleMap googleMap) { googleMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); }

Quando crei ed esegui l'app, verrà visualizzata una mappa con un indicatore su Null Island (zero gradi di latitudine e zero gradi di longitudine).
Visualizza il codice per l'attività completa:
Visualizza l'attività completata
Passaggi successivi
Dopo aver completato questi passaggi, puoi configurare le impostazioni della mappa.