Dodaj mapę

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Wybierz platformę: Android iOS JavaScript

Z tego artykułu dowiesz się, jak dodać podstawową mapę do aplikacji na Androida po skonfigurowaniu projektu, aby korzystać z pakietu Maps SDK na Androida. Po dodaniu mapy możesz zmienić typ mapy i jej funkcje.

Przegląd

Maps SDK na Androida udostępnia kilka klas, których aplikacja może używać do zarządzania cyklem życia, funkcjami i danymi mapy. Klasy obsługują interakcje użytkowników na podstawie modelu interfejsu Androida, na przykład ustawiając początkowy stan mapy i odpowiadając na gesty użytkownika w czasie działania.

Główny interfejs i klasy do obsługi map:

  • GoogleMap – punkt wejścia do zarządzania bazowymi funkcjami i danymi map. Twoja aplikacja ma dostęp do obiektu GoogleMap tylko po jego pobraniu z obiektu SupportMapFragment lub MapView.

  • SupportMapFragmentfragment do zarządzania cyklem życia obiektu GoogleMap.

  • MapViewwidok służący do zarządzania cyklem życia obiektu GoogleMap.

  • OnMapReadyCallback – interfejs wywołania zwrotnego, który obsługuje zdarzenia i interakcję użytkownika z obiektem GoogleMap.

Obiekt GoogleMap automatycznie wykonuje te operacje:

  • Łączę z usługą Mapy Google.
  • Pobieram kafelki mapy.
  • Wyświetlanie kafelków na ekranie urządzenia.
  • Wyświetlanie różnych elementów sterujących, takich jak przesunięcie i powiększenie.
  • Reagowanie na gesty przesunięcia i powiększenia przez przesuwanie mapy oraz powiększanie i pomniejszanie.

Aby użyć obiektu GoogleMap w aplikacji, musisz użyć obiektu SupportMapFragment lub MapView jako obiektu kontenera na mapie, a następnie pobrać obiekt GoogleMap z kontenera. Kontenery klasyfikują się na podstawie fragmentu lub widoku Androida, dlatego udostępniają mapę możliwości zarządzania cyklem życia i możliwości interfejsu użytkownika klas podstawowych Androida. Klasa SupportMapFragment to bardziej nowoczesny i typowy kontener obiektu GoogleMap.

Wyświetlanie kodu

Ten kod pochodzi z pełnej aktywności w Javie używanej w tym temacie podczas statycznego dodawania fragmentu. Projekt na Androida został utworzony na podstawie pustego szablonu projektu, a następnie został zaktualizowany na podstawie przewodnika po konfiguracji projektu. Po wykonaniu czynności opisanych w tym temacie kod może się różnić w zależności od szablonu projektu.

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

Dodawanie mapy

W tej sekcji opisujemy, jak dodać mapę podstawową za pomocą fragmentu jako kontenera mapy, ale zamiast tego możesz użyć widoku. Przykład: RawMapViewDemoActivity na GitHubie.

Czynności podstawowe:

  1. Aby uzyskać pakiet SDK, uzyskaj klucz interfejsu API i dodaj wymagane platformy, wykonaj te czynności:

    1. Konfiguracja w Google Cloud Console

    2. Używanie klucza interfejsu API

    3. Konfigurowanie projektu Android Studio

  2. Dodaj obiekt SupportMapFragment do działania, które będzie obsługiwać mapę. Fragment możesz dodać statyczne lub dynamiczne.

  3. Zaimplementuj interfejs OnMapReadyCallback.

  4. Ustaw plik układu jako widok treści.

  5. Jeśli fragment został dodany statycznie, uzyskaj do niego uchwyt.

  6. Zarejestruj wywołanie zwrotne.

  7. Pobiera obiekt do obiektu GoogleMap.

Dodawanie obiektu SupportMapFragment

Statycznie lub dynamicznie dodajesz obiekt SupportMapFragment do aplikacji. Najprostszym sposobem jest dodanie go statycznie. Jeśli dodasz fragment dynamicznie, możesz wykonywać na nim dodatkowe działania, np. usuwać go lub zastępować w czasie działania.

Aby dodać fragment statyczny

W pliku układu aktywności, która obejmie mapę:

  1. Dodaj element fragment.
  2. Dodaj deklarację nazwy xmlns:map="http://schemas.android.com/apk/res-auto". Pozwala to na używanie maps niestandardowych atrybutów XML.
  3. W elemencie fragment ustaw atrybut android:name na com.google.android.gms.maps.SupportMapFragment.
  4. W elemencie fragment dodaj atrybut android:id i ustaw go na identyfikator zasobu R.id.map (@+id/map).

Oto przykład pełnego pliku układu zawierającego element 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"/>

Dodawanie dynamicznego fragmentu

W aktywności:

  1. utworzyć instancję SupportMapFragment,
  2. Potwierdź transakcję, która dodaje fragment do aktywności. Więcej informacji znajdziesz w artykule na temat transakcji fragmentów.

Przykład:

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

      

Zaimplementuj interfejs OnMapReadyCallback

Zaktualizuj deklarację aktywności:

Java


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

      

Kotlin


class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Ustawianie widoku treści

W metodzie onCreate swojej aktywności wywołaj metodę setContentView i ustaw plik układu jako widok treści.

Jeśli na przykład plik układu ma nazwę 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)
}

      

Pobranie uchwytu do fragmentu i zarejestrowanie wywołania zwrotnego

  1. Aby uzyskać nick dla fragmentu, wywołaj metodę FragmentManager.findFragmentById i przekaż mu identyfikator zasobu fragmentu w pliku układu. Jeśli fragment został dodany dynamicznie, pomiń ten krok, ponieważ uchwyt został już pobrany.

  2. Wywołaj metodę getMapAsync, aby ustawić wywołanie zwrotne w fragmencie.

Jeśli fragment został dodany statycznie:

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)

      

Pobranie obiektu GoogleMap

Użyj metody wywołania zwrotnego onMapReady, aby uzyskać nick do obiektu GoogleMap. Wywołanie zwrotne jest wywoływane, gdy mapa jest gotowa do danych wejściowych użytkownika. Zawiera niepustą instancję klasy GoogleMap, której możesz użyć do aktualizacji mapy.

W tym przykładzie wywołanie zwrotne onMapReady pobiera uchwyt do obiektu GoogleMap, a następnie jest dodawany do mapy znacznik:

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

      

Zrzut ekranu z mapą i znacznikiem położonym na wyspie Null.

Gdy utworzysz i uruchomisz aplikację, zobaczysz mapę ze znacznikiem na wyspie Null (zerowa i zerowa szerokość geograficzna).

Wyświetl kod pełnej aktywności:

Wyświetl pełną aktywność


Co dalej

Po wykonaniu tych czynności możesz skonfigurować ustawienia mapy.