Dodaj mapę

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

Ten temat opisuje, jak dodać podstawową mapę do aplikacji na Androida po skonfigurowaniu projektu pod kątem użycia Maps SDK na Androida. Po dodaniu mapy możesz zmienić typ i funkcje mapy.

Omówienie

Pakiet SDK Map na Androida oferuje 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, takie jak ustawianie początkowego stanu mapy i reagowanie na gesty użytkownika w czasie działania.

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

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

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

  • MapViewwidok 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.
  • Pobieranie kafelków mapy.
  • Wyświetlanie kafelków na ekranie urządzenia.
  • wyświetlanie różnych elementów sterujących, takich jak przesuwanie i powiększanie;
  • Reagowanie na gesty przesunięcia i powiększenia przez przesunięcie mapy oraz jej powiększenie lub pomniejszenie.

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. Klasy kontenerów pochodzą z fragmentu lub widoku Androida, dlatego umożliwiają Mapom zarządzanie cyklem życia oraz funkcjami interfejsu użytkownika ich klas podstawowych Androida. Klasa SupportMapFragment jest nowocześniejszym i bardziej typowym kontenerem dla obiektu GoogleMap.

Wyświetl kod

Ten kod pochodzi z pełnej aktywności Java używanej w tym temacie podczas statycznego dodawania fragmentu. Projekt na Androida został utworzony na podstawie pustego szablonu, a potem zaktualizowany przy użyciu 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 dowiesz się, jak dodać podstawową mapę, używając fragmentu jako kontenera mapy, ale możesz zamiast tego użyć widoku. Przykład znajdziesz na stronie RawMapViewDemoActivity na GitHubie.

Podstawowe czynności:

  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 na Androida Studio

  2. Dodaj obiekt SupportMapFragment do aktywności, która będzie obsługiwać mapę. Fragment możesz dodać statycznie lub dynamicznie.

  3. Zaimplementuj interfejs OnMapReadyCallback.

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

  5. Jeśli fragment został dodany statycznie, utwórz jego obsługę.

  6. Zarejestruj wywołanie zwrotne.

  7. Uchwyt do obiektu GoogleMap.

Dodaj obiekt SupportMapFragment

Obiekt SupportMapFragment możesz dodać do aplikacji statycznie lub dynamicznie. Najprostszym sposobem jest dodanie go statycznie. Jeśli dodasz fragment dynamicznie, możesz wykonywać na nim dodatkowe czynności, takie jak usunięcie i zastąpienie go w czasie działania.

Statyczne dodawanie fragmentu

W pliku układu aktywności obsługującej mapę:

  1. Dodaj element fragment.
  2. Dodaj deklarację nazwy xmlns:map="http://schemas.android.com/apk/res-auto". Umożliwia to korzystanie z mapsniestandardowych atrybutów XML.
  3. W elemencie fragment ustaw dla atrybutu android:name wartość com.google.android.gms.maps.SupportMapFragment.
  4. W elemencie fragment dodaj atrybut android:id i ustaw go na wartość R.id.mapidentyfikator zasobu (@+id/map).

Oto na przykład pełny plik układu zawierający 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"/>

Dynamiczne dodawanie fragmentu

W ramach tego ćwiczenia:

  1. utworzyć instancję SupportMapFragment;
  2. Zatwierdź transakcję, która dodaje fragment do aktywności. Więcej informacji znajdziesz w sekcji Transakcje.

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

      

Wdróż 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 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)
}

      

Uchwyć fragment i zarejestruj wywołanie zwrotne

  1. Aby uzyskać dostęp do fragmentu, wywołaj metodę FragmentManager.findFragmentById i przekaż mu identyfikator zasobu tego 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 we 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)

      

Uchwyt do obiektu GoogleMap

Aby uzyskać pomoc do obiektu GoogleMap, użyj metody wywołania zwrotnego onMapReady. Wywołanie zwrotne jest wywoływane, gdy mapa jest gotowa do otrzymania danych wejściowych użytkownika. Zawiera niepuste wystąpienie klasy GoogleMap, której można użyć do zaktualizowania mapy.

W tym przykładzie wywołanie zwrotne onMapReady pobiera nick do obiektu GoogleMap, a potem dodaje 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 wyśrodkowanym na wyspie Null.

Gdy stworzysz i uruchomisz aplikację, pojawi się mapa ze znacznikiem na Wyspie Null (szerokość geograficzna zero stopni i długość geograficzna).

Wyświetl kod całej aktywności:

Wyświetl Pełna aktywność


Co dalej?

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