Aggiungere una mappa

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.
Seleziona piattaforma: Android iOS JavaScript

In questo argomento viene descritto come aggiungere una mappa di base a un'app per Android dopo aver configurato il progetto in modo che utilizzi l'SDK Maps per Android. Dopo aver aggiunto una mappa, puoi modificare il tipo di mappa e le relative funzionalità.

Panoramica

L'SDK Maps per Android offre diverse classi che l'app può utilizzare per gestire il ciclo di vita, le funzionalità e i dati di una mappa. Le classi supportano le interazioni degli utenti basate sul modello dell'interfaccia utente 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 principale e le classi per la gestione delle mappe:

  • GoogleMap: il punto di accesso per la gestione delle funzionalità e dei dati cartografici di base. La tua app può accedere a un oggetto GoogleMap solo dopo essere stato recuperato da un oggetto SupportMapFragment o MapView.

  • SupportMapFragment: un frammento per la gestione del ciclo di vita di un oggetto GoogleMap.

  • MapView: una vista per la gestione del ciclo di vita di un oggetto GoogleMap.

  • OnMapReadyCallback: un'interfaccia di callback che gestisce gli eventi e l'interazione dell'utente per l'oggetto GoogleMap.

Un oggetto GoogleMap esegue automaticamente queste operazioni:

  • Connessione al servizio Google Maps.
  • Download di riquadri della mappa in corso.
  • Visualizzazione dei riquadri sullo schermo del dispositivo.
  • Visualizzazione di vari controlli come panoramica 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 container per la mappa e poi recuperare l'oggetto GoogleMap dal container. Poiché le classi container derivano da un frammento o da una vista Android, forniscono alla mappa le funzionalità di gestione del ciclo di vita e UI delle loro classi di base Android. La classe SupportMapFragment è il container più moderno e comune per un oggetto GoogleMap.

Visualizza il codice

Il codice seguente deriva dall'attività Java completa utilizzata in questo argomento quando si aggiunge un frammento in modo statico. 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 in questo argomento, il codice può 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 di una mappa; tuttavia, puoi utilizzare una visualizzazione. Per un esempio, vedi RawMapViewDemoActivity su GitHub.

Passaggi di base:

  1. Per ottenere l'SDK, ottenere una chiave API e aggiungere i framework richiesti, segui i passaggi in:

    1. Configurazione in Google Cloud Console

    2. Utilizzare una chiave API

    3. Configurare un progetto Android Studio

  2. Aggiungi un oggetto SupportMapFragment all'attività che gestirà la mappa. Puoi aggiungere il frammento in modo statico o dinamico.

  3. Implementare l'interfaccia di OnMapReadyCallback.

  4. Imposta il file di layout come visualizzazione di contenuti.

  5. Se hai aggiunto il frammento in modo statico, ottieni un handle al frammento.

  6. Registra il callback.

  7. Ottieni un handle nell'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:

  1. Aggiungi un elemento fragment.
  2. Aggiungi la dichiarazione del nome xmlns:map="http://schemas.android.com/apk/res-auto". Ciò consente l'utilizzo di maps attributi XML personalizzati.
  3. Nell'elemento fragment, imposta l'attributo android:name su com.google.android.gms.maps.SupportMapFragment.
  4. Nell'elemento fragment, aggiungi l'attributo android:id e impostalo sull'ID risorsa (.@+id/map) R.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à:

  1. Crea un'istanza SupportMapFragment.
  2. Esegui il commit di una transazione che aggiunge il frammento all'attività. Per maggiori informazioni, consulta la pagina Transazioni frammenti.

Ad esempio:

Java


SupportMapFragment mapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager()
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit();

      

Kotlin


val mapFragment = SupportMapFragment.newInstance()
supportFragmentManager
    .beginTransaction()
    .add(R.id.my_container, mapFragment)
    .commit()

      

Implementare l'interfaccia di OnMapReadyCallback

Aggiorna la dichiarazione dell'attività come segue:

Java


class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    // ...
}

      

Kotlin


class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Impostare la visualizzazione dei contenuti

Nel metodo onCreate della tua attività, chiama il metodo setContentView e imposta il file di layout come visualizzazione di contenuti.

Ad esempio, se il nome del file di layout è main.xml:

Java


@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

      

Kotlin


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.main)
}

      

Ottieni un handle nel frammento e registra il callback

  1. Per ottenere un handle al frammento, chiama il metodo FragmentManager.findFragmentById e passalo l'ID risorsa del frammento nel file di layout. Se hai aggiunto il frammento in modo dinamico, salta questo passaggio perché hai già recuperato il punto di manipolazione.

  2. Chiama il metodo getMapAsync per impostare il callback sul frammento.

Ad esempio, se hai aggiunto il frammento in modo statico:

Java


SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
    .findFragmentById(R.id.map);
mapFragment.getMapAsync(this);

      

Kotlin


val mapFragment = supportFragmentManager
    .findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)

      

Ottieni un handle nell'oggetto GoogleMap

Utilizza il metodo di callback onMapReady per ottenere un handle all'oggetto GoogleMap. Il callback viene attivato quando la mappa è pronta per ricevere l'input 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 nell'oggetto GoogleMap e poi viene aggiunto un indicatore alla mappa:

Java


@Override
public void onMapReady(GoogleMap googleMap) {
    googleMap.addMarker(new MarkerOptions()
        .position(new LatLng(0, 0))
        .title("Marker"));
}

      

Kotlin


override fun onMapReady(googleMap: GoogleMap) {
    googleMap.addMarker(
        MarkerOptions()
            .position(LatLng(0.0, 0.0))
            .title("Marker")
    )
}

      

Screenshot con la mappa e l&#39;indicatore centrati sull&#39;isola di Null.

Quando crei ed esegui l'app, verrà visualizzata una mappa con un indicatore sull'isola di null (zero gradi di latitudine e zero gradi di longitudine).

Visualizza il codice per visualizzare l'attività completa:

Visualizza l'attività completa


Passaggi successivi

Dopo aver completato questi passaggi, puoi configurare le impostazioni della mappa.