Maps SDK for Android – Kurzanleitung

Auf dieser Seite wird beschrieben, wie du mit der Google Maps-Vorlage für Android Studio eine Android-App erstellst, in der eine Karte zu sehen ist. Wenn du ein bereits bestehendes Android Studio-Projekt einrichten möchtest, empfehlen wir den Artikel Bestehende Projektkonfiguration.

Diese Kurzanleitung ist für Entwickler gedacht, die mit den Grundlagen der Android-Entwicklung mit Java oder Kotlin vertraut sind.

Entwicklungsumgebung einrichten

  1. Für diese Schritte ist Android Studio erforderlich. Falls noch nicht geschehen, lade es herunter und installiere es.

  2. Füge das Google Play Services SDK in Android Studio ein. Du kannst es über den SDK-Manager hinzufügen. Das Maps SDK for Android ist darin enthalten.

Android-Gerät einrichten

Um eine App auszuführen, in der das Maps SDK for Android verwendet wird, musst du sie auf einem Android-Gerät oder einem Android Emulator bereitstellen, das bzw. der auf Android 4.0 oder höher basiert und Google APIs enthält.

Google Maps-Projekt erstellen

  1. Öffne Android Studio und klicke im Fenster Welcome to Android Studio (Willkommen in Android Studio) auf Create New Project (Neues Projekt erstellen).

  2. Klicke im Fenster New Project (Neues Projekt) in der Kategorie Phone and Tablet (Smartphone und Tablet) auf Google Maps Activity (Google Maps-Aktivitäten). Klicke dann auf Next (Weiter).

  3. Fülle das Formular Google Maps Activity aus:

    • Lege für Language (Programmiersprache) Java oder Kotlin fest. Beide Sprachen werden im Maps SDK for Android vollständig unterstützt. Weitere Informationen zu Kotlin findest du auf der Google Developers-Website.

    • Gib unter Minimum SDK (Min. SDK-Version) eine Android SDK-Version an, die von deinem Testgerät unterstützt wird.

  4. Klicke auf Finish (Fertigstellen).

Sobald der Vorgang abgeschlossen ist, wird Gradle von Android Studio gestartet und das Projekt erstellt. Dies kann einige Zeit dauern. Wenn der Build fertig ist, werden die Dateien google_maps_api.xml und MapsActivity von Android Studio geöffnet. Deine Aktivität hat möglicherweise einen anderen Namen, aber abgesehen davon wird nichts daran geändert.

Weitere Informationen zum Erstellen eines Projekts findest du in diesem Artikel auf der Google Developers-Website (in englischer Sprache).

Die Datei google_maps_api.xml enthält eine Anleitung, wie ein Google Maps API-Schlüssel abgerufen und anschließend in der Datei abgelegt werden kann. Füge nicht deinen eigenen API-Schlüssel hinzu, da er so weniger sicher gespeichert wird. Folge stattdessen der Anleitung im nächsten Abschnitt.

In der Cloud Console einrichten

Klicke auf die Tabs unten, um die Einrichtung in der Cloud Console vorzunehmen:

Schritt 1

  1. Klicke in der Google Cloud Console auf der Seite für die Projektauswahl auf Projekt erstellen, um ein neues Cloud-Projekt einzurichten.

    Zur Projektauswahl

  2. Die Abrechnung für das Cloud-Projekt muss aktiviert sein. Hier kannst du überprüfen, ob das der Fall ist.

    Google Cloud bietet einen Testzeitraum mit 300 $ Guthaben. Außerdem erhältst du jeden Monat ein Guthaben von 200 $ für die Google Maps Platform. Weitere Informationen findest du unter Guthaben für Rechnungskonten und unter GMP-Abrechnung.

Schritt 2

Damit du die Google Maps Platform verwenden kannst, musst du in der Cloud Console die APIs und SDKs aktivieren, die du in deinem Projekt nutzen möchtest.

Maps SDK for Android aktivieren

Schritt 3

Bei diesem Schritt wird der API-Schlüssel erstellt. Wenn du deinen API-Schlüssel in der Produktionsumgebung verwendest, solltest du ihn unbedingt einschränken. Weitere Informationen findest du auf der produktspezifischen Seite API-Schlüssel verwenden.

Der API-Schlüssel ist eine eindeutige ID. Damit werden die mit deinem Projekt verknüpften Anfragen zu Verwendungs- und Abrechnungszwecken authentifiziert. Du musst mindestens einen API-Schlüssel mit deinem Projekt verknüpft haben.

So erstellst du einen API-Schlüssel:

  1. Rufe Google Maps Platform > Anmeldedaten auf.

    Zur Seite „Anmeldedaten“

  2. Klicke auf der Seite Anmeldedaten auf Anmeldedaten erstellen > API-Schlüssel.
    Im Dialogfeld API-Schlüssel erstellt wird der neu erstellte API-Schlüssel angezeigt.
  3. Klicke auf Schließen.
    Der neue API-Schlüssel wird auf der Seite Anmeldedaten unter API-Schlüssel aufgeführt.
    Denke daran, den API-Schlüssel einzuschränken, bevor du ihn in der Produktionsumgebung verwendest.

API-Schlüssel in die App einfügen

In diesem Abschnitt wird beschrieben, wie du deinen API-Schlüssel speicherst, damit er von deiner App sicherer referenziert werden kann. Er sollte nicht in deinem Versionsverwaltungssystem eingecheckt werden. Stattdessen empfehlen wir dir, ihn im Stammverzeichnis deines Projekts in der Datei local.properties zu speichern. Weitere Informationen zur Datei local.properties findest du unter Gradle properties files (in englischer Sprache).

Du kannst das Secrets Gradle Plugin for Android verwenden, um diese Aufgabe zu optimieren.

So installierst du das Plug-in und speicherst deinen API-Schlüssel:

  1. Öffne in Android Studio die Datei build.gradle auf Stammebene und füge folgenden Code in das Element dependencies unter buildscript ein:
    buildscript {
        dependencies {
            // ...
            classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0"
        }
    }
        
  2. Öffne dann die Datei build.gradle auf App-Ebene und füge dem Element plugins den folgenden Code hinzu.
    id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
        
  3. Speichere die Datei und synchronisiere dein Projekt mit Gradle.
  4. Öffne die Datei local.properties in deinem Verzeichnis auf Projektebene und füge den folgenden Code ein: Ersetze hierbei YOUR_API_KEY durch deinen eigenen API-Schlüssel.
    MAPS_API_KEY=YOUR_API_KEY
        
  5. Speichere die Datei und synchronisiere dein Projekt mit Gradle.
  6. Gehe in der Datei AndroidManifest.xml zu com.google.android.geo.API_KEY und nimm folgende Änderungen am android:value attribute vor:
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="${MAPS_API_KEY}" />
        

Hinweis: Für den API-Schlüssel wird com.google.android.geo.API_KEY als Metadatenname empfohlen (siehe oben). Ein Schlüssel mit diesem Namen kann zur Authentifizierung bei mehreren Google Maps-basierten APIs auf der Android-Plattform verwendet werden, einschließlich Maps SDK for Android. Aus Gründen der Abwärtskompatibilität unterstützt die API auch den Namen com.google.android.maps.v2.API_KEY. Für diesen alten Namen wird nur die Authentifizierung bei Version 2 der Android Maps API unterstützt. In der Anwendung kann nur einer der Metadatennamen für den API-Schlüssel festgelegt werden. Falls beide angegeben werden, gibt die API eine Ausnahme aus.

Code ansehen

Überprüfe den in der Vorlage bereitgestellten Code. Sieh dir insbesondere die folgenden Dateien in deinem Android Studio-Projekt an.

Datei zur Google Maps-Aktivität

Dies ist die Hauptaktivität für die App. Sie enthält den Code zum Verwalten und Darstellen der Karte. Der Name der Datei, die die Aktivität definiert, ist standardmäßig MapsActivity.java. Wenn Kotlin als Sprache festgelegt ist, heißt sie MapsActivity.kt.

Die Hauptelemente der Google Maps-Aktivität:

  • Vom SupportMapFragment-Objekt wird der Lebenszyklus der Karte verwaltet. Es ist das übergeordnete Element der App-UI.

  • Über das GoogleMap-Objekt ist der Zugriff auf die Kartendaten und die -ansicht möglich. Dies ist die wichtigste Klasse des Maps SDK for Android. Eine ausführlichere Beschreibung der Objekte SupportMapFragment und GoogleMap findest du im Leitfaden zu Kartenobjekten.

  • Mit der Funktion moveCamera wird die Karte auf die LatLng-Koordinaten von Sydney (Australien) zentriert. Die ersten Einstellungen, die beim Hinzufügen einer Karte konfiguriert werden, sind in der Regel die Kartenposition und die Kameraeinstellungen, etwa Blickwinkel, Kartenausrichtung und Zoomstufe. Weitere Informationen findest du im Leitfaden zu Kamera und Ansichten.

  • Mit der Funktion addMarker wird auf den Koordinaten von Sydney eine Markierung hinzugefügt. Weitere Informationen findest du im Leitfaden zu Markierungen.

Die Datei zur Google Maps-Aktivität enthält folgenden Code:

Java

// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.maps.example;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import com.google.android.gms.maps.CameraUpdateFactory;
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;

public class MapsActivity extends AppCompatActivity implements OnMapReadyCallback {

    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     *
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;

        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions()
                .position(sydney)
                .title("Marker in Sydney"));
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
    }
}

      

Kotlin

// Copyright 2020 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package com.google.maps.example.kotlin

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

import com.google.android.gms.maps.CameraUpdateFactory
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
import com.google.maps.example.R

internal class MapsActivity : AppCompatActivity(), OnMapReadyCallback {

    private lateinit var mMap: GoogleMap

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_maps)
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        val mapFragment = supportFragmentManager
            .findFragmentById(R.id.map) as SupportMapFragment
        mapFragment.getMapAsync(this)
    }

    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    override fun onMapReady(googleMap: GoogleMap) {
        mMap = googleMap

        // Add a marker in Sydney and move the camera
        val sydney = LatLng(-34.0, 151.0)
        mMap.addMarker(MarkerOptions()
            .position(sydney)
            .title("Marker in Sydney"))
        mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
    }
}
      

Gradle-Datei auf App-Ebene

Die Datei build.gradle auf App-Ebene enthält folgende Kartenabhängigkeit, die für das Maps SDK for Android erforderlich ist:

dependencies {
    implementation 'com.google.android.gms:play-services-maps:17.0.1'
    // ...
}

Weitere Informationen zum Verwalten der Kartenabhängigkeit findest du im Leitfaden zur Versionsverwaltung (in englischer Sprache).

XML-Layoutdatei

Die Datei activity_maps.xml ist die XML-Layoutdatei, mit der die Strukturen der App-UI definiert werden. Sie befindet sich im Verzeichnis res/layout. In der Datei activity_maps.xml ist ein Fragment deklariert, das die folgenden Elemente enthält:

  • Mit tools:context wird die Standardaktivität des Fragments auf MapsActivity festgelegt. Die entsprechende Definition ist in der Datei zur Maps-Aktivität enthalten.
  • Mit android:name wird der Klassenname des Fragments auf SupportMapFragment festgelegt. Dies ist der Fragmenttyp, der in der Datei zur Maps-Aktivität verwendet wird.

Die XML-Layoutdatei enthält folgenden Code:

<fragment xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/map"
    tools:context=".MapsActivity"
    android:name="com.google.android.gms.maps.SupportMapFragment" />

App bereitstellen und ausführen

Screenshot der Karte mit Markierung auf Sydney

Wenn die App korrekt programmiert ist und ausgeführt wird, ist dort nun eine Karte zu sehen, auf der Sydney markiert ist (wie im Screenshot oben dargestellt).

So stellst du die App bereit und führst sie aus:

  1. Klicke in Android Studio auf die Menüoption Run (Ausführen) oder das Wiedergabesymbol.
  2. Wähle dann das Gerät aus:
    • Entweder nimmst du das Android-Gerät, das mit deinem Computer verbunden ist,
    • oder du klickst auf Launch Emulator (Launch-Emulator) und wählst das von dir eingerichtete virtuelle Gerät aus.
  3. Klicke dann auf OK. In Android Studio wird Gradle gestartet, um deine App zu erstellen. Die Ergebnisse werden dann auf deinem Gerät oder in deinem Emulator angezeigt. Es kann einige Minuten dauern, bis die App gestartet wird.

Nächste Schritte

  • Karte einrichten: In diesem Artikel wird beschrieben, wie die Anfangs- und Laufzeiteinstellungen für die Karte festgelegt werden, beispielsweise Kameraposition, Kartentyp, UI-Komponenten und Touch-Gesten.

  • Karte zu Android-App hinzufügen (Kotlin): In diesem Codelab wirst du Schritt für Schritt durch eine App geführt, in der einige Zusatzfunktionen des Maps SDK for Android veranschaulicht werden.