Karte hinzufügen

Plattform auswählen: Android iOS JavaScript

Hier erfahren Sie, wie Sie eine Basiskarte in eine Android-App einbinden, nachdem Sie das Projekt für das Maps SDK for Android konfiguriert haben. Nachdem die Karte erfolgreich eingebunden wurde, können Sie Kartentyp und -elemente ändern.

Übersicht

Das Maps SDK for Android enthält mehrere Klassen, mit denen über die App der Lebenszyklus, die Funktionen und die Daten einer Karte verwaltet werden können. Die Klassen ermöglichen Nutzerinteraktionen basierend auf dem Android-UI-Modell. So kann die App beispielsweise den Anfangszustand der Karte festlegen oder während der Laufzeit auf Gesten reagieren.

Die wichtigsten Schnittstellen und Klassen für die Verarbeitung von Karten sind:

  • GoogleMap – der Einstiegspunkt zum Verwalten der zugrunde liegenden Kartenmerkmale und -daten. Die App kann erst auf ein GoogleMap-Objekt zugreifen, nachdem es aus einem SupportMapFragment- oder MapView-Objekt abgerufen wurde.

  • SupportMapFragment – ein Fragment, mit dem der Lebenszyklus eines GoogleMap-Objekts verwaltet wird.

  • MapView – eine Ansicht, mit der der Lebenszyklus eines GoogleMap-Objekts verwaltet wird.

  • OnMapReadyCallback – eine Callback-Oberfläche, über die Ereignisse und Nutzerinteraktionen für das GoogleMap-Objekt verarbeitet werden.

Ein GoogleMap-Objekt führt automatisch folgende Vorgänge aus:

  • Verbindung zum Google Maps-Dienst herstellen
  • Kartenkacheln herunterladen
  • Kacheln auf dem Gerätebildschirm anzeigen
  • Verschiedene Steuerelemente z. B. zum Schwenken und Zoomen anzeigen
  • Auf Touch-Gesten zum Schwenken und Zoomen reagieren, indem die Karte verschoben oder heran- bzw. herausgezoomt wird

Wenn Sie ein GoogleMap-Objekt in Ihrer App einsetzen möchten, müssen Sie ein SupportMapFragment- oder ein MapView-Objekt als Containerobjekt für die Karte verwenden und dann das GoogleMap-Objekt aus dem Container abrufen. Die Containerklassen werden entweder aus einem Android-Fragment oder einer Android-Ansicht abgeleitet. Sie stellen daher für die Karte die Funktionen für die UI sowie für die Lebenszyklusverwaltung ihrer Android-Basisklassen zur Verfügung. Die SupportMapFragment-Klasse ist der modernere und meist verwendete Container für ein GoogleMap-Objekt.

Code ansehen

Der folgende Code stammt aus der vollständigen Java-Aktivität, die in diesem Artikel verwendet wird, um ein statisches Fragment hinzuzufügen. Das Android-Projekt wurde anhand der leeren Projektvorlage erstellt und dann gemäß des Leitfadens zur Konfiguration bestehender Projekte bearbeitet. Nachdem du die hier aufgeführten Schritte ausgeführt hast, kann dein Code je nach Projektvorlage variieren.

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

Karte hinzufügen

In diesem Abschnitt wird beschrieben, wie du eine Basiskarte einbindest. Als Kartencontainer dient hier das Fragment, aber du kannst alternativ auch eine Ansicht verwenden. Ein Beispiel findest du auf GitHub unter RawMapViewDemoActivity (in englischer Sprache).

Grundlegende Schritte:

  1. Hinweis: Stelle zuerst sicher, dass die Schritte im Leitfaden zur Konfiguration bestehender Projekte ausgeführt wurden, damit das Projekt mit dem Maps SDK for Android kompatibel ist.

  2. Füge der Aktivität, mit der die Karte verarbeitet wird, ein SupportMapFragment-Objekt hinzu. Das Fragment kann statisch oder dynamisch eingebunden werden.

  3. Implementiere die OnMapReadyCallback-Schnittstelle.

  4. Lege die Layoutdatei als Inhaltsansicht fest.

  5. Wenn du das Fragment statisch hinzugefügt hast, rufe dafür einen Handle ab.

  6. Registriere den Callback.

  7. Rufe einen Handle für das GoogleMap-Objekt ab.

SupportMapFragment-Objekt hinzufügen

Ein SupportMapFragment-Objekt kann statisch oder dynamisch in die App eingebunden werden. Die statische Variante ist am einfachsten. Wenn Sie das Fragment dynamisch hinzufügen, können Sie weitere Aktionen dafür durchführen und es z. B. während der Laufzeit entfernen oder ersetzen.

Fragment statisch hinzufügen

Führe in der Layoutdatei der Aktivität, mit der die Karte verarbeitet wird, folgende Schritte aus:

  1. Füge ein fragment-Element hinzu.
  2. Gib die folgende Namensdeklaration an: xmlns:map="http://schemas.android.com/apk/res-auto". Dadurch können benutzerdefinierte XML-Attribute von maps verwendet werden.
  3. Lege im fragment-Element das android:name-Attribut auf com.google.android.gms.maps.SupportMapFragment fest.
  4. Fügen Sie im fragment-Element das android:id-Attribut hinzu und legen Sie es auf die Ressourcen-ID von R.id.map (@+id/map) fest.

Hier ein Beispiel einer vollständigen Layoutdatei mit einem fragment-Element:

<?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"/>

Fragment dynamisch hinzufügen

Führe in der Aktivität folgende Schritte aus:

  1. Erstelle eine SupportMapFragment-Instanz.
  2. Führe den Commit einer Transaktion durch, mit der das Fragment zur Aktivität hinzugefügt wird. Weitere Informationen findest du im Artikel zu Fragment-Transaktionen auf der Google Developers-Website (in englischer Sprache).

Beispiel:

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

      

OnMapReadyCallback-Schnittstelle implementieren

Ändere die Deklaration der Aktivität folgendermaßen:

Java


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

      

Kotlin


class MainActivity : AppCompatActivity(), OnMapReadyCallback {

    // ...
}

      

Inhaltsansicht festlegen

Rufen Sie in der onCreate-Methode der Aktivität die setContentView-Methode auf und legen Sie die Layoutdatei als Inhaltsansicht fest.

In diesem Beispiel wird main.xml als Name der Layoutdatei angenommen:

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

      

Handle für Fragment abrufen und Callback registrieren

  1. Rufen Sie die FragmentManager.findFragmentById-Methode auf und übergeben Sie die Ressourcen-ID des Fragments in der Layoutdatei, um einen Handle zum Fragment zu erhalten. Wenn Sie das Fragment dynamisch hinzugefügt haben, überspringen Sie diesen Schritt, da Sie den Handle bereits abgerufen haben.

  2. Rufe die getMapAsync-Methode auf, um den Callback für das Fragment festzulegen.

In diesem Beispiel wird angenommen, dass das Fragment statisch hinzugefügt wurde:

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)

      

Handle für das GoogleMap-Objekt abrufen

Verwende die Callback-Methode onMapReady, um einen Handle für das GoogleMap-Objekt zu erhalten. Der Callback wird ausgelöst, sobald Nutzereingaben auf der Karte ausgeführt werden können. Hiermit wird eine Nicht-Null-Instanz der GoogleMap-Klasse bereitgestellt, mit der sich die Karte aktualisieren lässt.

In diesem Beispiel ruft der Callback onMapReady einen Handle zum GoogleMap-Objekt ab. Daraufhin wird der Karte eine Markierung hinzugefügt:

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

      


Screenshot mit Karte und Markierung auf Null Island

Wenn die App korrekt programmiert und ausgeführt wurde, ist dort nun eine Karte mit einer Markierung auf Null Island (Punkt auf der Erde mit Längen- und Breitengrad 0°N, 0°E) zu sehen.

Code der vollständigen Aktivität ansehen:

Vollständige Aktivität ansehen


Nächste Schritte

Ist dieser Vorgang abgeschlossen, kannst du die Karteneinstellungen konfigurieren.