Maps API unter Wear OS

Eine Karte auf einem Wearable-Gerät

Mit dem Maps SDK for Android kannst du eine kartenbasierte Wearable-App erstellen, die direkt auf Wear OS by Google-Geräten läuft. Nutzer deiner App können ihren Standort auf der Karte ganz einfach sehen, indem sie einen Blick auf ihr Handgelenk werfen. Sie können beispielsweise ihre Position auf einer Route nachverfolgen, dann durch Vergrößern der Ansicht Details anzeigen oder durch Tippen auf eine Markierung ein Infofenster deiner App aufrufen.

Auf dieser Seite werden die auf einem Wear-Gerät verfügbaren API-Funktionen und die ersten Schritte zum Erstellen deiner App beschrieben.

Erste Schritte mit Wear OS

Die Erstellung einer Wearable-App mit dem Maps SDK for Android entspricht im Wesentlichen der Erstellung einer Google Maps-App für ein beliebiges Android-Gerät. Der Unterschied besteht im Design für den kleineren Formfaktor für das Wearable-Gerät, um die Nutzerfreundlichkeit und Leistung der App zu optimieren.

Wir empfehlen das Programm Android Studio für die Wear OS-Entwicklung, weil es die Projektkonfiguration, Einbindung von Bibliotheken sowie das Verpacken vereinfacht.

Allgemeine Hilfestellung zum Entwickeln einer Wearable-App findest du in den Designrichtlinien für Wear OS. Informationen zum Erstellen deiner ersten Wearable-App findest du in der Anleitung Wearable-Apps erstellen.

Erste Karten-App für Wear OS erstellen

In dieser Kurzanleitung wird vorausgesetzt, dass du mit dem Maps SDK for Android vertraut bist, die Wear OS-Anleitungen zum Erstellen eines Wearable-Moduls in deiner App befolgt hast und dass du jetzt eine Karte zum Wearable-Modul hinzufügen möchtest.

Abhängigkeiten für dein Wearable-Modul hinzufügen

Folgende Abhängigkeiten müssen in der Datei build.gradle des Wear OS-Moduls deiner App enthalten sein:

dependencies {
  compile fileTree(dir: 'libs', include: ['*.jar'])
  compile 'com.google.android.support:wearable:1.2.0'
  provided 'com.google.android.wearable:wearable:1.0.0'
  compile 'com.google.android.gms:play-services-maps:17.0.0'
}

Weitere Informationen zu den Abhängigkeiten findest du in der Anleitung zum Definieren von Layouts in Wear OS.

Dialogfeld hinzufügen, über das Nutzer die App beenden können

Es wird empfohlen, ein DismissOverlayView-Element zu verwenden, um die Karte auf dem Wearable-Gerät anzuzeigen. Mithilfe der Klasse „DismissOverlayView“ kannst du das UI-Muster long-press-to-dismiss implementieren, das Nutzern die Möglichkeit gibt, die App durch langes Klicken (langes Drücken) zu verlassen. Dieses Muster wird empfohlen, weil das Maps SDK for Android das standardmäßige Wischen von links nach rechts, das normalerweise zum Verlassen einer Wearable-App verwendet wird, überschreibt.

Layoutdefinition das Element DismissOverlayView hinzufügen:

<FrameLayout
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_height="match_parent"
   android:layout_width="match_parent">

  ...

  <android.support.wearable.view.DismissOverlayView
     android:id="@+id/dismiss_overlay"
     android:layout_height="match_parent"
     android:layout_width="match_parent"/>

</FrameLayout>

Wenn du das Objekt „DismissOverlayView“ in deine Aktivität einbindest, füge einen einführenden Text hinzu, um die Nutzer darüber zu informieren, dass sie die App durch eine lange Klick-/Tippbewegung verlassen können, wie nachfolgend dargestellt:

public class MainActivity extends WearableActivity
        implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {

    private MapFragment mMapFragment;
    private DismissOverlayView mDismissOverlay;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.basic_wear_demo);

        mDismissOverlay =
            (DismissOverlayView) findViewById(R.id.dismiss_overlay);
        mDismissOverlay.setIntroText(R.string.basic_wear_long_press_intro);
        mDismissOverlay.showIntroIfNecessary();

        mMapFragment = (MapFragment) getFragmentManager()
                .findFragmentById(R.id.map);
        mMapFragment.getMapAsync(this);
    }
    ...
}

Es wird auf eine lange Klick-/Tippbewegung gewartet, die zum Aufrufen von DismissOverlayView.show() führt, um eine Schaltfläche zum Beenden anzuzeigen. Durch Anklicken/-tippen dieser Schaltfläche wird deine Aktivität durch den Nutzer beendet:

public void onMapLongClick(LatLng point) {
    mDismissOverlay.show();
}

Karte hinzufügen

Verwende wie gewohnt die Callback-Methode onMapReady(GoogleMap), um ein Handle zum GoogleMap-Objekt zu erhalten. Der Callback wird ausgelöst, sobald die Karte einsatzbereit ist. In der Callback-Methode kannst du der Karte Markierungen oder Polylinien hinzufügen, Listener ergänzen oder die Kamera verschieben. Im folgenden Beispiel wird eine Markierung in der Nähe des Opernhauses von Sydney hinzugefügt:

public class MainActivity extends WearableActivity
        implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {

    private static final LatLng SYDNEY = new LatLng(-33.85704, 151.21522);
    private GoogleMap mMap;

    ...

    @Override
    public void onMapReady(GoogleMap map) {
        mMap = map;
        mMap.addMarker(new MarkerOptions().position(SYDNEY)
            .title("Sydney Opera House"));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SYDNEY, 10));
        mMap.setOnMapLongClickListener(this);
    }
}

Inaktivmodus aktivieren

Das Maps SDK for Android unterstützt den Inaktivmodus für Wearable-Apps. Apps, die den Inaktivmodus unterstützen, werden auch als Always-On-Apps bezeichnet. Der Inaktivmodus wird aktiviert, wenn der Nutzer die App nicht mehr aktiv verwendet, und sorgt dafür, dass die App weiterhin auf dem Wearable-Gerät sichtbar sein kann.

Das Maps SDK for Android ermöglicht ein vereinfachtes Rendern der Karte mit geringer Farbtiefe für die Verwendung im Inaktivmodus, und das Kartenformat wird automatisch angepasst, wenn das Gerät vom interaktiven Modus in den Inaktivmodus wechselt. Alle Markierungen, Objekte und UI-Steuerelemente werden im Inaktivmodus ausgeblendet. Das reduziert den Stromverbrauch deiner App und ermöglicht gleichzeitig ein einheitliches Erscheinungsbild wie bei anderen Apps mit Inaktivitätsdisplay, z. B. Android Wear-Uhren.

Mithilfe der folgenden Schritte kannst du sicherstellen, dass deine App den Inaktivmodus der Karte verwendet:

  1. Aktualisiere dein Android SDK, um die Plattform Android 5.1 (API-Level 22) oder höher einzusetzen, die die nötigen APIs zum Aufrufen des Inaktivmodus umfasst. Informationen zum Aktualisieren deines SDK findest du in der Android-Dokumentation SDK-Pakete hinzufügen.
  2. Achte darauf, dass dein Projekt für Android 5.1 oder höher ausgerichtet ist. Lege dazu targetSdkVersion im App-Manifest auf 22 oder höher fest.
  3. Füge der Datei build.gradle deiner App die Wearable-Abhängigkeiten hinzu. Auf dieser Seite kannst du dir ein Beispiel ansehen.
  4. Füge den Eintrag der freigegebenen Wearable-Bibliothek dem App-Manifest hinzu, wie im Android-Schulungskurs zum Thema Sicherstellen der Sichtbarkeit der App beschrieben.
  5. Füge die Berechtigung WAKE_LOCK dem Handheld- und Wearable-App-Manifest hinzu, wie im Android-Schulungskurs zum Thema Sicherstellen der Sichtbarkeit der App beschrieben.
  6. Erstelle eine Aktivität, die WearableActivity erweitert.
  7. Rufe in der Methode onCreate() deiner Aktivität die Methode setAmbientEnabled() auf. Dadurch erhält das Betriebssystem die Information, dass die App immer aktiviert ist. Wenn das Gerät also in den Energiesparmodus übergeht, sollte die App in den Inaktivmodus wechseln, anstatt das Zifferblatt auf dem Gerät anzuzeigen.
  8. Lege fest, dass deine Karte den Inaktivmodus unterstützt. Dazu kannst du das Attribut map:ambientEnabled="true" in der XML-Layoutdatei der Aktivität festlegen oder es programmatisch einrichten, indem du GoogleMapOptions.ambientEnabled(true) festlegst. Diese Einstellung gibt vor, dass die API vorab die erforderlichen Kartenkacheln für die Verwendung im Inaktivmodus lädt.
  9. Wenn die Aktivität in den Inaktivmodus wechselt, ruft das System die Methode onEnterAmbient() in deiner Wearable-Aktivität auf. Überschreibe onEnterAmbient() und rufe MapFragment.onEnterAmbient(ambientDetails) oder MapView.onEnterAmbient(ambientDetails) auf. Die API wechselt zum nicht interaktiven Rendern mit geringer Farbtiefe.
  10. Rufe in onExitAmbient() entsprechend MapFragment.onExitAmbient() oder MapView.onExitAmbient() auf. Die API wechselt zum normalen Rendering der Karte.

Der folgende Beispielcode aktiviert den Inaktivmodus in der App und in der Karte:

public class MainActivity extends WearableActivity
        implements OnMapReadyCallback, GoogleMap.OnMapLongClickListener {

    private MapFragment mMapFragment;

    public void onCreate(Bundle savedState) {
        super.onCreate(savedState);

        // Enable ambient support, so the map remains visible in a simplified,
        // low-color display when the user is no longer actively using the app
        // and the app is still visible on the watch face.
        setAmbientEnabled();

        // ... Perform other activity setup processes here too ...
    }

    /**
     * Starts ambient mode on the map.
     * The API swaps to a non-interactive and low-color rendering of the map
     * when the user is no longer actively using the app.
     */
    @Override
    public void onEnterAmbient(Bundle ambientDetails) {
        super.onEnterAmbient(ambientDetails);
        mMapFragment.onEnterAmbient(ambientDetails);
    }

    /**
     * Exits ambient mode on the map.
     * The API swaps to the normal rendering of the map when the user starts
     * actively using the app.
     */
    @Override
    public void onExitAmbient() {
        super.onExitAmbient();
        mMapFragment.onExitAmbient();
    }
}

Du kannst den Bildschirm aktualisieren, während die App im Inaktivmodus ausgeführt wird. Weitere Informationen zum Aktualisieren von Inhalten und zum allgemeinen Inaktivmodus findest du im Android-Schulungskurs zum Sicherstellen der Sichtbarkeit der App.

Street View unter Wear OS verwenden

Street View wird auf Wearable-Geräten vollständig unterstützt.

Um den Nutzern die Möglichkeit zu geben, die App während der Anzeige eines Street View-Panoramas zu beenden, verwende die Schnittstelle StreetViewPanorama.OnStreetViewPanoramaLongClickListener. Wenn ein Nutzer lange auf eine beliebige Stelle des Street View-Bilds klickt/tippt, wird ein onStreetViewPanoramaLongClick(StreetViewPanoramaOrientation)-Ereignis empfangen. Rufe DismissOverlayView.show() auf, um eine Schaltfläche zum Beenden anzuzeigen.

Beispielcode

Auf GitHub ist eine Beispiel-App verfügbar, die du als Ausgangspunkt zum Erstellen einer App verwenden kannst. Aus dem Beispiel geht hervor, wie du eine einfache Google Maps-Karte unter Wear OS konfigurierst.

Unterstützte Funktionen in Maps API unter Wear OS

In diesem Abschnitt wird umrissen, welche Unterschiede bei den unterstützten Funktionen für Karten auf Wearable- und Handheld-Geräten (Smartphones und Tablets) bestehen. Alle API-Funktionen, die nachfolgend nicht aufgeführt sind, sollten wie dokumentiert für die gesamte API funktionieren.

Funktionen
Vollständiger Interaktivmodus und Lite-Modus

Du kannst das Maps SDK for Android im vollständigen Interaktivmodus oder im Lite-Modus verwenden. Der Lite-Modus empfiehlt sich, wenn du die Performance des Wearable-Geräts optimieren möchtest und für deine App Interaktionen wie Gesten oder das Verschieben/Vergrößern von Karten nicht unterstützt werden müssen.

Im Lite-Modus ist das Starten der mobilen Google Maps App beim Antippen der Karte deaktiviert und kann auf einem Wearable-Gerät nicht aktiviert werden.

Eine vollständige Liste der Unterschiede zwischen dem Lite-Modus und dem vollständigen Interaktivmodus findest du in der Dokumentation zum Lite-Modus.

Kartensymbolleiste Die Kartensymbolleiste ist deaktiviert und kann auf einem Wearable-Gerät nicht aktiviert werden.
UI-Steuerelemente Die UI-Steuerelemente sind auf Wearable-Geräten standardmäßig deaktiviert. Das umfasst die Steuerelemente für Zoom, Kompass und den eigenen Standort. Um diese zu aktivieren, verwendest du wie gewohnt die UiSettings-Klasse.
Gesten Single-Touch-Gesten können wie gewohnt verwendet werden. Beispiele: Berühren und Ziehen zum Verschieben der Karte, Doppeltippen zum Vergrößern und Zweifingertippen zum Verkleinern der Karte. Welche Multi-Touch-Gesten unterstützt werden, ist vom jeweiligen Gerät des Nutzers abhängig. Zu den Multi-Touch-Gesten gehören Zweifingerschieben zum Neigen der Karte, Zusammendrücken zum Vergrößern und Zweifingerdrehung.
Indoor-Karten und Gebäude Indoor-Karten sind auf einem Wearable-Gerät standardmäßig deaktiviert. Du kannst sie aktivieren, indem du GoogleMap.setIndoorEnabled(true) aufrufst. Sind Indoor-Karten aktiviert, wird die Standardebene der Karte angezeigt. Das UI-Element zur Levelauswahl wird auf Wearable-Geräten nicht unterstützt.
Kachel-Overlays Kachel-Overlays werden auf Wearable-Geräten nicht unterstützt.

Best Practices für die Entwicklung mit der Maps API unter Wear OS

So optimierst du die Nutzererfahrung für deine App:

  • Die Karte sollte einen großen Teil des Bildschirms einnehmen. So wird die Nutzerfreundlichkeit der Karte auf den kleinen Formfaktor eines Wearable-Geräts optimiert.
  • Berücksichtige bei der Gestaltung der Nutzerfreundlichkeit deiner App, dass ein Wearable-Gerät nur eine schwache Akkuleistung hat. Ein durchgängig aktiver Bildschirm und eine permanente Anzeige der Karte beeinträchtigen die Akkuleistung.