Dodawanie mapy

Wybierz platformę: Android iOS JavaScript

W tym temacie opisujemy, jak dodać podstawową mapę do aplikacji na Androida po skonfigurowaniu projektu pod kątem korzystania z pakietu SDK Map Google na Androida. Po dodaniu mapy możesz zmienić typ i funkcje mapy.

Przegląd

Pakiet SDK Map Google na Androida zawiera 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, np. ustawianie początkowego stanu mapy czy reagowanie na gesty wprowadzone przez użytkownika w czasie działania.

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

  • GoogleMap – punkt wejścia do zarządzania podstawowymi funkcjami mapy i danymi. Twoja aplikacja może uzyskać dostęp do obiektu GoogleMap dopiero po pobraniu go z obiektu SupportMapFragment lub MapView.

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

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

  • OnMapReadyCallback – interfejs wywołania zwrotnego, który obsługuje zdarzenia i interakcje użytkownika związane z obiektem GoogleMap.

Obiekt GoogleMap automatycznie wykonuje te operacje:

  • Łączę z usługą Mapy Google.
  • Pobieram fragmenty mapy.
  • Wyświetlam kafelki na ekranie urządzenia.
  • Wyświetlanie różnych elementów sterujących, takich jak przesuwanie i powiększanie.
  • Reakcja na gesty przesunięcia i powiększenia polegająca na przesuwaniu mapy oraz powiększaniu i pomniejszaniu.

Aby użyć w aplikacji obiektu GoogleMap, musisz użyć obiektu SupportMapFragment lub MapView jako obiektu kontenera mapy, a następnie pobrać obiekt GoogleMap z kontenera. Ponieważ klasy kontenerów wywodzą się z fragmentu lub widoku Androida, udostępniają mapie możliwości zarządzania cyklem życia i funkcje interfejsu użytkownika dostępne w klasach podstawowych Androida. Klasa SupportMapFragment jest nowoczesnym i najczęściej używanym kontenerem obiektu GoogleMap.

Wyświetl kod

Poniższy 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 zaktualizowany zgodnie z przewodnikiem po konfiguracji projektu. Po wykonaniu czynności opisanych w tym temacie Twój 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 dowiesz się, jak dodać mapę podstawową przy użyciu fragmentu jako kontenera mapy. Możesz jednak użyć widoku. Przykład znajdziesz w pliku RawMapViewDemoActivity w GitHubie.

Podstawowe kroki:

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

    1. Skonfiguruj w konsoli Google Cloud

    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żna dodawać statycznie lub dynamicznie.

  3. Wdróż 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. Pobierz uchwyt do obiektu GoogleMap.

Dodaj obiekt SupportMapFragment

Obiekt SupportMapFragment możesz dodawać do aplikacji statycznie lub dynamicznie. Najprostszym sposobem jest dodanie jej w sposób statyczny. Jeśli dodasz fragment dynamicznie, możesz wykonać na nim dodatkowe działania, np. usunąć go i zastąpić go w czasie działania.

Aby statycznie dodać fragment

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

  1. Dodaj element fragment.
  2. Dodaj deklarację nazwy xmlns:map="http://schemas.android.com/apk/res-auto". Umożliwia to korzystanie z 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"/>

Aby dynamicznie dodawać fragment

W ramach ćwiczenia:

  1. Utwórz instancję SupportMapFragment.
  2. Zatwierdź transakcję, która doda fragment do działania. Więcej informacji znajdziesz w artykule o transakcjach z fragmentem kodu.

Na przykład:

Kotlin



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

      

Java


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

      

Wdróż interfejs OnMapReadyCallback

Zaktualizuj deklarację dotyczącą aktywności w ten sposób:

Kotlin



class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Java


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

      

Ustawianie widoku treści

W metodzie onCreate 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:

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

      

Uzyskanie nicka dla fragmentu i zarejestrowanie wywołania zwrotnego

  1. Aby uzyskać uchwyt dla fragmentu, wywołaj metodę FragmentManager.findFragmentById i przekaż do niej 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 dla fragmentu.

Jeśli na przykład dodasz fragment statycznie:

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

      

Pobierz nick do obiektu GoogleMap

Aby uzyskać uchwyt do obiektu GoogleMap, użyj metody wywołania zwrotnego onMapReady. Wywołanie zwrotne jest aktywowane, gdy mapa jest gotowa do przyjęcia danych wejściowych użytkownika. Udostępnia niepustą instancję klasy GoogleMap, której możesz użyć do aktualizowania mapy.

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

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

      

Zrzut ekranu z mapą i znacznikiem pośrodku wyspy Null.

Gdy stworzysz i uruchomisz aplikację, wyświetli się mapa ze znacznikiem na Wyspie Null (szerokości geograficznej zerowej i zerowej długości geograficznej).

Wyświetl kod całego modułu:

Wyświetl ukończoną aktywność


Co dalej?

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