Z tego artykułu dowiesz się, 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ć jej typ i funkcje.
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 gesty użytkownika w czasie działania.
Główny interfejs 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 obiektuGoogleMapdopiero po pobraniu go z obiektuSupportMapFragmentlubMapView.SupportMapFragment– fragment do zarządzania cyklem życia obiektuGoogleMap.MapView– widok do zarządzania cyklem życia obiektuGoogleMap.OnMapReadyCallback– interfejs wywołania zwrotnego, który obsługuje zdarzenia i interakcje użytkownika z obiektemGoogleMap.
Obiekt GoogleMap automatycznie wykonuje te operacje:
- Łączę z usługą Map Google.
- Pobieram kafelki 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 przesuwania i powiększania przez przesuwanie mapy oraz powiększanie lub pomniejszanie widoku;
Aby używać obiektu GoogleMap w aplikacji, musisz użyć obiektu SupportMapFragment lub MapView jako obiektu kontenera mapy, a następnie pobrać obiekt GoogleMap z kontenera. Klasy kontenerów pochodzą z fragmentu lub widoku Androida, więc zapewniają mapie funkcje zarządzania cyklem życia i interfejsem użytkownika z klas bazowych Androida.
Klasa SupportMapFragment to nowocześniejszy i częściej używany kontener dla obiektu GoogleMap.
Wyświetlanie kodu
Poniższy kod pochodzi z pełnej aktywności w języku Java używanej w tym temacie podczas statycznego dodawania fragmentu. Projekt aplikacji na Androida został utworzony na podstawie szablonu pustego projektu, a następnie zaktualizowany zgodnie z przewodnikiem 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 opisano, jak dodać podstawową mapę, używając fragmentu jako kontenera mapy. Możesz jednak użyć widoku. Przykład znajdziesz w RawMapViewDemoActivity na GitHubie.
Podstawowe kroki:
Aby pobrać pakiet SDK, uzyskać klucz interfejsu API i dodać wymagane platformy, wykonaj te czynności:
Dodaj obiekt
SupportMapFragmentdo aktywności, która będzie obsługiwać mapę. Możesz dodać fragment statycznie lub dynamicznie.Zaimplementuj interfejs
OnMapReadyCallback.Ustaw plik układu jako widok treści.
Jeśli fragment został dodany statycznie, pobierz uchwyt do fragmentu.
Zarejestruj wywołanie zwrotne.
Pobierz uchwyt 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 w czasie działania.
Dodawanie fragmentu statycznie
W pliku układu aktywności, która będzie obsługiwać mapę:
- Dodaj element
fragment. - Dodaj deklarację nazwy
xmlns:map="http://schemas.android.com/apk/res-auto". Umożliwia to korzystanie zmapsniestandardowych atrybutów XML. - W elemencie
fragmentustaw atrybutandroid:namenacom.google.android.gms.maps.SupportMapFragment. - W elemencie
fragmentdodaj atrybutandroid:idi ustaw go na identyfikator zasobu R.id.map (@+id/map).
Oto przykład kompletnego 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:
- Utwórz instancję
SupportMapFragment. - Zatwierdź transakcję, która dodaje fragment do aktywności. Więcej informacji znajdziesz w artykule Transakcje fragmentów.
Na przykład:
Kotlin
val mapFragment = SupportMapFragment.newInstance() supportFragmentManager .beginTransaction() .add(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 zawartoś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); }
Pobieranie uchwytu do fragmentu i rejestrowanie wywołania zwrotnego
Aby uzyskać uchwyt do fragmentu, wywołaj metodę
FragmentManager.findFragmentByIdi przekaż jej identyfikator zasobu fragmentu w pliku układu. Jeśli fragment został dodany dynamicznie, pomiń ten krok, ponieważ uchwyt został już pobrany.Wywołaj metodę
getMapAsync, aby ustawić wywołanie zwrotne we fragmencie.
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);
Pobieranie uchwytu do obiektu GoogleMap
Użyj metody wywołania zwrotnego onMapReady, aby uzyskać uchwyt do obiektu GoogleMap. Wywołanie zwrotne jest aktywowane, gdy mapa jest gotowa do odbierania danych wejściowych użytkownika. Zapewnia instancję klasy GoogleMap o wartości innej niż null, której możesz użyć do zaktualizowania mapy.
W tym przykładzie wywołanie zwrotne onMapReady pobiera uchwyt do obiektu GoogleMap, a następnie do mapy dodawany jest 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")); }

Po skompilowaniu i uruchomieniu aplikacji wyświetli się mapa ze znacznikiem na wyspie Null (0 stopni szerokości geograficznej i 0 stopni długości geograficznej).
Wyświetl kod całej aktywności:
Co dalej?
Po wykonaniu tych czynności możesz skonfigurować ustawienia mapy.