Dodawanie mapy

Wybierz platformę: Android iOS JavaScript

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

Przegląd

Pakiet 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żytkownika oparte na modelu interfejsu Androida, takie jak ustawianie stanu początkowego mapy i reagowanie na dane wejściowe użytkownika w czasie działania aplikacji.

Główne interfejsy i klasy do obsługi map:

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

  • SupportMapFragment – fragment do zarządzania cyklem życia obiektu GoogleMap.

  • MapView – widok do zarządzania cyklem życia obiektu GoogleMap.

  • OnMapReadyCallback – interfejs wywołania zwrotnego, który obsługuje zdarzenia i interakcje użytkownika dla obiektu GoogleMap.

Obiekt GoogleMap automatycznie wykonuje te operacje:

  • Łączenie z usługą Map Google.
  • Pobieranie kart mapy.
  • Wyświetlanie kart na ekranie urządzenia.
  • Wyświetlanie różnych elementów sterujących, takich jak przesuwanie i powiększanie.
  • Reagowanie na gesty przesuwania i powiększania przez przesuwanie mapy oraz powiększanie lub pomniejszanie.

Aby używać obiektu GoogleMap w aplikacji, musisz użyć obiektu SupportMapFragment lub MapView jako obiektu kontenera mapy, a następnie pobrać z niego obiekt GoogleMap. Ponieważ klasy kontenerów pochodzą z fragmentu lub widoku Androida, zapewniają mapie zarządzanie cyklem życia i funkcje interfejsu użytkownika swoich podstawowych klas Androida. Klasa SupportMapFragment jest nowocześniejszym i bardziej powszechnym kontenerem dla obiektu GoogleMap.

Wyświetl kod

Poniższy kod pochodzi z pełnej aktywności w języku Java używanej w tym artykule podczas statycznego dodawania fragmentu. Projekt aplikacji na Androida został utworzony na podstawie szablonu Pusty projekt, a następnie zaktualizowany zgodnie z przewodnikiem po konfiguracji projektu. Po wykonaniu czynności opisanych w tym artykule 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ć podstawową mapę za pomocą fragmentu jako kontenera mapy. Możesz jednak użyć widoku. Przykład znajdziesz w RawMapViewDemoActivity w GitHubie.

Podstawowe czynności:

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

    1. Konfigurowanie w konsoli Google Cloud

    2. Używanie klucza interfejsu API

    3. Konfigurowanie projektu w Android Studio

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

  3. Zaimplementuj interfejs OnMapReadyCallback.

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

  5. Jeśli fragment został dodany statycznie, uzyskaj do niego dostęp.

  6. Zarejestruj wywołanie zwrotne.

  7. Uzyskaj dostęp do obiektu GoogleMap.

Dodawanie obiektu 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 działania, takie jak usuwanie i zastępowanie go w czasie działania aplikacji.

Aby dodać fragment statycznie

W pliku układu aktywności, która będzie obsługiwać mapę:

  1. Dodaj element fragment.
  2. Dodaj deklarację nazwy xmlns:map="http://schemas.android.com/apk/res-auto". Umożliwia to 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, który zawiera 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 dodać fragment dynamicznie

W aktywności:

  1. Utwórz instancję SupportMapFragment.
  2. Zatwierdź transakcję, która doda fragment do aktywności. Więcej informacji znajdziesz w artykule zobacz Transakcje fragmentów.

Na przykład:

Kotlin

if (context is FragmentActivity) {
    val mapFragment = SupportMapFragment.newInstance()
    context.supportFragmentManager
        .beginTransaction()
        .add(com.example.snippets.common.R.id.map_container, mapFragment)
        .commit()
}

      

Java

SupportMapFragment mapFragment = SupportMapFragment.newInstance();
FragmentTransaction fragmentTransaction =
        getSupportFragmentManager().beginTransaction();
fragmentTransaction.add(R.id.map_container, mapFragment);
fragmentTransaction.commit();

      

Implementowanie interfejsu OnMapReadyCallback

Zaktualizuj deklarację 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);
}

      

Uzyskiwanie dostępu do fragmentu i rejestrowanie wywołania zwrotnego

  1. Aby uzyskać dostęp do fragmentu, wywołaj metodę FragmentManager.findFragmentById i przekaż jej identyfikator zasobu fragmentu w pliku układu. Jeśli fragment został dodany dynamicznie, pomiń ten krok, ponieważ dostęp został już uzyskany.

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

Jeśli na przykład fragment został dodany 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);

      

Uzyskiwanie dostępu do obiektu GoogleMap

Aby uzyskać dostęp do obiektu GoogleMap, użyj metody wywołania zwrotnego onMapReady. Wywołanie zwrotne jest wywoływane, gdy mapa jest gotowa do odbierania danych wejściowych od użytkownika. Udostępnia ono niepustą instancję klasy GoogleMap, której możesz użyć do zaktualizowania mapy.

W tym przykładzie wywołanie zwrotne onMapReady pobiera dostęp do obiektu GoogleMap , a następnie dodaje 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 wyśrodkowanymi na wyspie Null Island.

Po pomyślnej kompilacji i uruchomieniu aplikacji wyświetli się mapa ze znacznikiem na Wyspie Zero (0 stopni szerokości geograficznej i 0 stopni długości geograficznej).

Wyświetl kod pełnej aktywności:

Wyświetl pełną aktywność


Co dalej?

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