Apps-Grundlage

Das Auto als Leinwand: Android-Entwicklung für die Straße

Lautsprecher

Info

Über den Vortrag

Da die Displays in Fahrzeugen mit Android Auto und Android Automotive OS immer größer werden, stehen Entwickler vor einer doppelten Herausforderung: Sie müssen umfangreiche, adaptive Funktionen für geparkte Fahrzeuge und fahrersichere, vorlagenbasierte Funktionen für die Fahrt bereitstellen. In dieser umfassenden 30-minütigen technischen Session werden die End-to-End-Architektur und die Entwicklungsansätze für die Anpassung von Android-Apps an Autos erläutert.

Von den Grundlagen des Designs von Apps für die Nutzung im Auto bis hin zu den neuesten Ansätzen für die Entwicklung von Medien-Erlebnissen, die von Audio zu Video wechseln, wenn das Auto von „Fahren“ zu „Parken“ wechselt – hier erfährst du alles, was du wissen musst, um deine App auf die Straße zu bringen.

Zusammenfassung

  • Android für Autos ist auf zwei Plattformen ausgerichtet: Android Auto und Android Automotive OS. Bei der einen Variante wird die App von einem Smartphone projiziert, bei der anderen wird sie direkt im Fahrzeug ausgeführt.
  • Die Car App Library bietet Vorlagen für fahrzeugoptimierte Oberflächen, die sich an verschiedene Hardwarekonfigurationen von Autos anpassen.
  • Apps für geparkte Autos nutzen standardmäßige Android-Aktivitäten für umfangreiche Funktionen wie Videostreaming, Spiele und Webbrowser.
  • Die Car App Library 1.9 bietet neue UI-Komponenten und Tokens zur Markenanpassung. Außerdem wird die Unterstützung für Medienvorlagen vollständig auf Android Automotive OS ausgeweitet.
  • Mit den Park-to-Drive-Funktionen werden beim Parken dynamisch native Videoaktivitäten gestartet. Beim Losfahren wird dann wieder zu Medienvorlagen gewechselt, damit die Audiowiedergabe nicht unterbrochen wird.

Ressourcen

Gemini Notebook

Themen

  • android-for-cars
  • android-auto
  • android-automotive-os
  • car-app-library
  • media3
  • parked-apps

Transkript

Einführung in Android für Autos

  • Okay.

  • Hallo zusammen.

  • Vielen Dank für Ihre Teilnahme an dieser Session. Das Auto ist Ihre Leinwand.

  • In dieser Session geht es darum, wie ihr Android-Apps für die Straße entwickelt.

  • Ich bin Paul Lammertsma.

  • Und ich bin Thomas Weathers.

  • Wir sind Developer Relations Engineers im Android for Cars-Team.

  • Viele von Ihnen haben sicher viel Zeit und Energie investiert, damit Ihre Apps auf einer Vielzahl von Bildschirmen und Geräten – Smartphones, Foldables, Tablets und anderen – gut aussehen und funktionieren.

  • Heute konzentrieren wir uns auf einen Bildschirm, an den Sie vielleicht noch nicht gedacht haben.

  • Außerdem können Sie Ihre Nutzer auf einzigartige Weise erreichen.

  • Das ist das Autodisplay.

  • Beginnen wir mit einem kurzen Überblick darüber, was wir unter Android for Cars verstehen.

  • Android for Cars ist kein monolithisches System.

  • Es gibt zwei Plattformen, auf die Sie Ihre Anzeigen ausrichten können.

  • Erstens gibt es Android Auto, ein Smartphone-basiertes, projiziertes System.

  • Bei Android Auto wird die App auf Ihrem Smartphone ausgeführt und die Benutzeroberfläche über eine kabelgebundene oder kabellose Verbindung auf das Display im Auto projiziert.

  • Und zweitens gibt es Android Automotive OS, eine Variante von Android, die direkt auf dem Fahrzeug selbst ausgeführt wird.

  • Android Automotive OS wird unabhängig vom Smartphone ausgeführt, hat direkten Zugriff auf die Fahrzeughardware, z. B. die Klimaanlage und das Radio, und verwaltet auch seine eigene Datenverbindung.

  • Eine Untergruppe von Autos mit Android Automotive OS sind Autos mit integrierten Google-Funktionen.

  • Autos mit integrierten Google-Funktionen sind auch mit Google-Apps und ‑Diensten wie dem Play Store, Gemini und Google Maps ausgestattet.

  • Obwohl es zwei Plattformen gibt, möchten wir es Ihnen so einfach wie möglich machen, Apps zu entwickeln, die auf beiden Plattformen eine hervorragende Nutzererfahrung bieten.

  • Hier ist ein Beispiel für eine Medien-App, die einmal mit der Car App Library erstellt wurde, und wie sie sowohl in Android Auto als auch in Android Automotive OS auf verschiedenen Displaygrößen und ‑formen aussehen würde.

  • Es gibt viele verschiedene Arten von Geräten und Oberflächen, für die Sie entwickeln können.

  • Das wirft die Frage auf: Warum dann für Autos?

  • Erstens ist der Umfang hier ziemlich groß.

  • Derzeit sind über 250 Millionen Android Auto-kompatible Autos auf den Straßen unterwegs und es gibt über 100 Modelle von Autos mit integrierten Google-Funktionen von 16 verschiedenen Marken.

  • Wenn Ihre Apps in Autos verfügbar sind, erreichen Sie Nutzer auf dem täglichen Weg zur Arbeit, auf dem Weg zu Familienaktivitäten, beim Erledigen von Besorgungen und sogar auf Reisen.

  • Laut der American Driving Survey 2024 der AAA verbringen Fahrer in den USA durchschnittlich 60 Minuten pro Tag hinter dem Steuer.

  • Sie erreichen Nutzer aber nicht nur, während sie aktiv fahren.

  • Außerdem erreichen Sie sie, wenn sie geparkt haben.

  • Vielleicht laden sie ihr Fahrzeug an einer Ladestation für Elektrofahrzeuge auf oder warten in der Schlange, um ihre Kinder von der Schule abzuholen.

  • Und mit der zunehmenden Verbreitung von Displays für Beifahrer erwarten wir in Zukunft noch mehr Möglichkeiten, die Interaktion mit Nutzern zu fördern.

  • Okay.

  • Sehen wir uns nun die verschiedenen Arten von Funktionen an, die Sie für Autos entwickeln können.

  • Wenn Sie Apps für Autos entwickeln möchten, sollten Sie die beiden Hauptsituationen und ‑zustände kennen, die für Apps im Fahrzeug gelten.

  • Erstens: Apps, die Sie während der Fahrt verwenden.

  • Diese sind für das Autofahren optimiert und können verwendet werden, während sich das Fahrzeug bewegt.

  • Dazu gehören Apps in den Kategorien, die Sie hier auf dem Bildschirm sehen, z. B. Audio-Apps, die wir normalerweise als Medien-, Messaging- und Kommunikations-Apps, Navigations-Apps usw. bezeichnen.

  • Für das Fahren optimierte Apps müssen strenge Kriterien zur Vermeidung von Ablenkung erfüllen.

  • Bei der Entwicklung einer Benutzeroberfläche für eine App, die während der Fahrt sicher verwendet werden kann, müssen besondere Aspekte berücksichtigt werden.

  • Es gibt verschiedene Möglichkeiten, für das Fahren optimierte Apps zu entwickeln.

Übersicht über die Programmbibliothek Car App

  • In diesem Vortrag konzentrieren wir uns jedoch auf die Verwendung der Auto-App-Bibliothek.

  • Dabei handelt es sich um eine Reihe von Jetpack-Bibliotheken, die ein vorlagenbasiertes Framework für fahrzeugoptimierte Benutzeroberflächen bereitstellen und gleichzeitig die Anpassung an die verschiedenen Hardwarekonfigurationen in Autos übernehmen.

  • Denken Sie also an Eingabemodalitäten, Bildschirmgrößen und Seitenverhältnisse.

  • Das ist zwar nicht die einzige Möglichkeit, fahrzeugoptimierte Funktionen für Autos zu entwickeln, aber in diesem Vortrag möchte ich mich auf die Entwicklung mit der Android for Cars-App-Bibliothek konzentrieren.

  • Wir nennen das oft kurz CAL.

  • Wie bereits erwähnt, ist die Car App-Bibliothek eine Sammlung von Bibliotheken, mit denen Sie Ihre Apps für die Verwendung in Fahrzeugen entwickeln können.

  • Es ist ein vorlagenbasiertes Framework, das für das Fahren optimierte Benutzeroberflächen bietet und die Anpassung an verschiedene Hardwarekonfigurationen übernimmt.

  • Und Sie können Ihre App so entwickeln, dass sie auf allen diesen verschiedenen Konfigurationen gut funktioniert, egal ob sie unter Android Auto oder Android Automotive OS ausgeführt wird.

  • Apps, die mit CAL erstellt werden, können diese Host-Client-Architektur nutzen.

  • Die Host-App, also entweder Android Auto selbst oder der Google Automotive App Host bei Autos mit integrierten Google-Funktionen, ist der System-Renderer.

  • Sie steuert letztendlich, was auf den Displays der Nutzer angezeigt werden soll.

  • Als App-Entwickler zeichnen Sie also nicht die Pixel.

  • Stattdessen stellen Sie den Vorlagen der Car App Library strukturierte Daten und den Status Ihrer Daten zur Verfügung.

  • Dieser Host nimmt dann diese Daten und stellt sie sicher, konform und mit einem Layout dar, das Ablenkungen minimiert.

  • Sehen wir uns also die Klassen in der CAL an, die Sie erweitern müssen, um Ihre App zu erstellen, beginnend mit dem CarAppService.

  • Dies ist eine Unterklasse des Android-Dienstes, die als Einstiegspunkt für Hostanwendungen dient, um mit Client-Apps zu kommunizieren. Ihr Zweck ist es, Sitzungsinstanzen zu erstellen, mit denen der Host dann interagiert.

  • Eine Sitzung ist eine Instanz einer Client-App, die auf einem Display im Fahrzeug ausgeführt wird.

  • Wie andere Android-Komponenten hat sie einen eigenen Lebenszyklus, der zum Initialisieren und Löschen von Ressourcen verwendet werden kann, die während der Existenz der Sitzungsinstanz verwendet werden.

  • Dies ist eine 1:n-Beziehung zwischen dem CarAppService und einer Sitzung.

  • Ein „CarAppService“ kann beispielsweise zwei Sitzungsinstanzen haben: eine für ein primäres Display und eine für ein Kombiinstrument-Display für Navigations-Apps, die Kombiinstrument-Displays unterstützen.

  • Hier ist ein Beispiel dafür: Ein Auto hat ein primäres Display und ein Kombiinstrument. Jedes Display ist mit einer eigenen Sitzung verknüpft. So können Sie als App-Entwickler Fahrzeuge mit mehreren Displays unterstützen.

  • Innerhalb einer Sitzung sind dann Bildschirm-Instanzen für die Generierung der Benutzeroberflächen verantwortlich, die von Host-Apps gerendert werden.

  • Diese Benutzeroberflächen werden durch Vorlagenklassen dargestellt, die jeweils einen bestimmten Layouttyp modellieren, z. B. ein Raster oder eine Liste.

  • In jeder Sitzung wird also ein Stack von Bildschirm-Instanzen verwaltet, die die Nutzerflüsse in verschiedenen Teilen Ihrer Anwendung verarbeiten. Wie die Sitzung hat auch ein Bildschirm einen eigenen Lebenszyklus, den Sie nutzen können.

  • Aber nur weil der Host Ihre Benutzeroberfläche rendert und Sie Vorlagen der Car App Library verwenden, bedeutet das nicht, dass Sie stark eingeschränkt sind oder Ihre Anwendung nicht anpassen können.

  • Es gibt eine Vielzahl von Vorlagen und Komponenten, die Sie verwenden und kombinieren können, um die gewünschte Umgebung zu erhalten.

  • Es gibt Vorlagen für allgemeine Zwecke, die von allen Arten von Apps in der Car App Library verwendet werden können, und Vorlagen für spezielle Zwecke, die für bestimmte App-Anwendungen wie Navigation oder POIs gedacht sind.

  • Bevor wir uns die Details zum Erstellen von fahrtoptimierten Apps ansehen, möchte ich auf die andere Situation eingehen, in der Sie Apps in Autos ausführen können: wenn das Auto geparkt ist.

Apps für geparkte Autos entwickeln

  • Es gibt bestimmte Kategorien von Apps, die nur verwendet werden können, wenn das Fahrzeug geparkt ist. Dazu gehören natürlich Video-Apps, Spiele und Browser.

  • Wenn das Auto nicht in Bewegung ist, werden die Richtlinien zum Ablenkungsgrad des Fahrers aufgehoben und Sie können Inhalte anbieten, die besser zu Ihrer vorhandenen adaptiven UI passen.

  • Geparkte Apps sind aktivitätsbasiert und ähneln den Aktivitäten, die auf anderen Geräten wie Smartphones oder Tablets verwendet werden, oder sind sogar identisch. Im nächsten Abschnitt gehen wir genauer auf geparkte Apps ein.

  • Für Apps, die im geparkten Zustand verwendet werden, werden vorhandene adaptive Aktivitäten wiederverwendet. Es gibt jedoch fahrzeugspezifische Qualitätsrichtlinien, die Sie einhalten müssen, von Manifestdeklarationen und Display-Aussparungen bis hin zum Pausieren der Wiedergabe, wenn das Auto losfährt.

  • Um diese Arbeit zu automatisieren, haben wir einen neuen Android-Skill für geparkte Apps eingeführt.

  • Bevor Sie beginnen, müssen Sie die Android-Befehlszeile installieren. Sie finden sie über diesen Kurzlink.

  • Nachdem Sie das eingerichtet haben, führen Sie android skills list aus, um die verfügbaren Skills zu sehen.

    android skills list
    android skills add android-for-cars-parked-apps
  • Es gibt eine ganze Reihe von Fähigkeiten, mit denen Sie Ihre Android-Entwicklung auf die nächste Stufe bringen können.

  • Speziell für Android für Autos können Sie android skills add android-for-cars-parked-apps verwenden, um den Skill dem Kontext Ihres Agenten hinzuzufügen.

  • Egal, welchen KI-Agenten Sie bevorzugen, er bietet Ihnen eine Schritt-für-Schritt-Anleitung, um Ihr Manifest für Android Auto oder Android Automotive OS zu konfigurieren. Dabei werden Fenster-Insets und die Rückwärtsnavigation berücksichtigt und Wiedergabeeinschränkungen zur Vermeidung von Ablenkungen des Fahrers durchgesetzt. Außerdem kann er Ihre Video-, Spiele- oder Browser-App prüfen, bevor Sie sie bei Google Play einreichen.

Übersicht über die Kategorien von Auto-Apps

  • Die Entwicklung von Apps für Autos ist auch wegen dieser App-Kategorien etwas Besonderes.

  • Wie bereits erwähnt, gibt es bestimmte Kategorien von Apps, die während der Fahrt verwendet werden können, und andere Kategorien von Apps, die nur im geparkten Zustand verwendet werden können.

  • Diese hervorgehobenen Kategorien können während der Fahrt verwendet werden.

  • Einige davon sind mit CAL gekennzeichnet. Wie bereits erwähnt, steht dies für die Car App Library. Apps in dieser Kategorie verwenden Vorlagen wie die, die wir gerade gesehen haben.

  • Ich gehe diese Punkte jetzt schnell durch, ohne zu sehr ins Detail zu gehen.

  • Beginnen wir mit Medien-Apps. Das sind Apps, die Audio, aber kein Video wiedergeben.

  • Es gibt zwei Möglichkeiten, sie zu erstellen.

  • Die oberste Option, die mit „MediaBrowserService“ gekennzeichnet ist, ist die einfachste.

  • Sie stellen Metadaten bereit, während die Benutzeroberfläche des Infotainment-Bildschirms die Wiedergabe- und Medienbrowser-Benutzeroberfläche für das Auto optimiert rendert.

  • Die andere Möglichkeit besteht darin, Medien-Apps mit der Car App Library zu erstellen. Dadurch haben Sie mehr Kontrolle und Optionen, um das Design und die Präsentation Ihrer Medien-Apps anzupassen. Thomas wird gleich mehr dazu sagen.

  • Navigations-Apps sind natürlich ein wichtiger Anwendungsfall, da sie Routen und detaillierte Routenführungen bieten.

  • Apps für Fahrer von Mitfahrgelegenheiten fallen ebenfalls in diese Kategorie.

  • Mit Apps für POIs (Points of Interest) können Sie nützliche Orte in der Nähe finden, z. B. Ladestationen für Elektrofahrzeuge oder Parkplätze.

  • Mit IoT-Apps (Internet of Things, Internet der Dinge) können Sie unterwegs auf Smart-Home-Geräte zugreifen, z. B. für die Verwaltung Ihres Zuhauses.

  • Außerdem sind Wetter-Apps verfügbar, die beispielsweise Echtzeit-Radar, Unwetterwarnungen und standortspezifische Vorhersagen bieten.

  • Und schließlich gibt es drei Unterkategorien für die Kommunikation: die Erweiterung grundlegender Benachrichtigungen auf das Auto, Messaging- und Videoanruf-Apps.

  • Und dann gibt es noch die Kategorien, die nur im geparkten Zustand verfügbar sind: Video-Streaming-Apps, Spiele und Webbrowser.

  • Und ich freue mich, Ihnen mitteilen zu können, dass seit ein paar Wochen alle Entwickler Spiele auf Android Auto und Android Automotive OS veröffentlichen können.

  • Einige dieser Kategorien sind als „Offen“, andere als „In der Betaphase“ und wieder andere als „Demnächst verfügbar“ gekennzeichnet.

  • „Offen“ bedeutet, dass jeder Entwickler eine App in dieser Kategorie direkt in der Produktion einreichen kann.

  • „Beta“ bedeutet, dass Sie die App zwar in internen oder geschlossenen Tracks veröffentlichen können, aber nicht in der Produktion, es sei denn, Sie werden in ein Early-Access-Programm aufgenommen.

  • Die Dokumentation für jede dieser Kategorien enthält weitere Informationen und einen Link zu unserem Antragsformular.

  • „Demnächst verfügbar“ ist für Kategorien, die derzeit nicht unterstützt werden, aber in Zukunft unterstützt werden sollen.

  • Unser Ziel ist es, die Plattform zu vereinheitlichen.

  • Wir möchten, dass Sie unabhängig von der Kategorie mit nur einmaligem Schreiben und Verteilen an Android Auto und Android Automotive OS die größtmögliche Reichweite erzielen.

  • Jetzt übergebe ich an Thomas, der über Medien sprechen wird.

Medienupdates für die Auto-App-Bibliothek

  • Viele Grüße

  • Sehr gut.

  • Letztes Jahr haben wir die Car App Library für Medien-Apps in Version 1.8 eingeführt, um Android Auto mit Vorlagen für die Benutzeroberfläche zum Durchsuchen und benutzerdefinierten Aktionen auszustatten.

  • Dazu gehörte auch die Vorlage für die Medienwiedergabe, die Sie hier links sehen.

  • Auf der diesjährigen I/O haben wir mit der Auto-App-Bibliothek 1.9 weitere Benutzeroberflächen vorgestellt, die sich durchsuchen lassen.

  • Mit der Betaversion von CAL 1.9 können Sie jetzt wichtige Funktionsupdates für Android Auto und Android Automotive OS nutzen.

  • Zu den Highlights gehören die Markenanpassung über App-Ausdrücke, mit denen Sie Farb- und Form-Tokens mit vom Host gerenderten Layouts anpassen und gleichzeitig Sicherheitsregeln einhalten können, sowie neue UI-Komponenten wie Spotlight-Bereiche, komprimierte Listenelemente, scrollbare Chips und ein dauerhafter Miniplayer.

  • Außerdem wird mit CAL 1.9 die Unterstützung von Medienvorlagen vollständig auf AAOS ausgeweitet, was zu einer echten Plattformvereinheitlichung über beide Ökosysteme hinweg führt.

  • Die nächste Version der Auto-App-Bibliothek, CAL Version 10, wird bald veröffentlicht.

  • Mit CAL Version 10 werden mehr benutzerdefinierte Vorlagen für Kommunikations-Apps eingeführt, die während der Fahrt mehr robuste und benutzerdefinierte Anruffunktionen bieten.

  • Außerdem haben wir eine neue Kategorie von Apps und Vorlagen für Apps mit Konversationsmodus während der Fahrt hinzugefügt.

  • Außerdem sind weitere Funktionen in Arbeit, die mit den Vorlagen der Car App Library für einen noch nahtloseren Übergang vom Parken zum Fahren sorgen sollen.

  • Wir melden uns bald wieder mit weiteren Infos.

Funktionen für das Parken und Fahren

  • Mit den Park-to-Drive-Funktionen der Car App-Bibliothek kann Ihre App im Stand dynamisch zwischen den Modi wechseln und adaptive Inhalte anzeigen. Während der Fahrt wechselt sie nahtlos zurück zu den Vorlagen der Car App-Bibliothek.

  • Zu den wichtigsten Anwendungen gehören maßgeschneiderte Authentifizierungsabläufe, wenn Sie sich nicht bewegen, oder die Aktivierung einer speziellen Parkfunktion, z. B. das Streamen von Video-Podcasts oder Musikclips.

  • Diese wird direkt in die Vorlage für die Medienwiedergabe eingebunden.

  • In stehenden Fahrzeugen haben Fahrer also vollständigen Zugriff auf die native Android-Aktivität Ihrer App, sodass sie Rich Media wie Videostreaming nutzen können.

  • Sobald das Auto in einen Gang geschaltet wird, werden die Schutzmaßnahmen gegen Ablenkung aktiviert. Dadurch wird Ihre App aufgefordert, wieder zur Medienvorlage der Car App Library zu wechseln, um eine konforme und unterbrechungsfreie Audiowiedergabe zu ermöglichen.

  • Wir befinden uns an einem Wendepunkt für die Nutzung von Infotainmentsystemen im Auto.

  • Medien-Apps sollen sich über herkömmliche Oberflächen zum Suchen und Abspielen hinaus entwickeln, um Fahrern und Mitfahrern gleichermaßen umfassendere, immersivere und interaktivere Momente zu bieten.

  • Wir sehen uns jetzt ein Beispiel an, wie Sie mit der Media3-Bibliothek eine native Videoaktivität hinzufügen können, die abgespielt wird, wenn das Auto geparkt wird.

  • Dazu verbindest du eine Videorendering-Oberfläche direkt mit deiner Instanz für die Hintergrundwiedergabe.

    override fun onStart() {
           super.onStart()
           ...
           controllerFuture = MediaController.Builder(
             this,
             sessionToken
           ).buildAsync()
    
           controllerFuture?.addListener({
               mediaController = controllerFuture?.get()
               playerView.player = mediaController
           }, ContextCompat.getMainExecutor(this))
    }
  • Sie möchten vermeiden, dass in dieser Aktivität ein separater Mediaplayer instanziiert wird. Stattdessen möchten Sie einen zentralen ExoPlayer oder Mediaplayer in Ihrem primären Dienst beibehalten, z. B. einen Media3-Mediathek-Dienst, der sowohl Audio- als auch Videostreams verarbeitet.

  • Während der Fahrt, wenn kein aktiver Dienst gebunden ist, decodiert der Player also nur Audio. Wenn Fahrer dann im geparkten Zustand Ihre Videoaktivität öffnen, möchten Sie die Rendering-Oberfläche direkt an den zugrunde liegenden Dienstplayer anhängen.

  • Bei Media3 implementiert mediaController den Player nativ, sodass eine direkte Zuweisung möglich ist, wie Sie hier sehen: playerView wird playerView.player direkt auf mediaController festgelegt.

  • Als Nächstes registrieren Sie Ihren nativen Einstiegspunkt mit ParkedOnlyOnClickListener.

    val watchVideoAction = Action.Builder()
      .setTitle("Watch Video")
      .setIcon(videoCarIcon)
      .setOnClickListener(
        ParkedOnlyOnClickListener.create {
          val intent = Intent(
            carContext,
            VideoPlayerActivity::class.java
          )
            .apply {
              addFlags(
                Intent.FLAG_ACTIVITY_NEW_TASK
              )
            }
          carContext.startActivity(intent)
        })
      .build()
  • Dieser Wrapper stellt einen Intent-Trigger in der Kopfzeile der Benutzeroberfläche für die Medienwiedergabe bereit.

  • Wir fügen also eine Aktion zum Starten der Videowiedergabe hinzu und verpacken den Auswahl-Listener in ein ParkedOnlyOnClickListener.

  • Im Fahrmodus werden diese Berührungen von der Host-App abgefangen, die eine Systemsicherheitsmeldung anzeigt. Sie können also während der Fahrt nicht auf diesen Bildschirm zugreifen. Wenn Sie jedoch geparkt haben, löst der Callback die startActivity innerhalb von carContext aus, um die entsprechende Vollbildaktivität zu starten.

  • Denken Sie daran, dass Sie in diesen Apps der Car App Library Ihr Videoziel im Manifest als distractionOptimized=false kennzeichnen müssen, damit das Betriebssystem erkennt, dass es sich nur um einen Workflow für geparkte Fahrzeuge handelt.

    <activity
       android:name=".VideoPlayerActivity"
       android:exported="false"
       android:launchMode="singleTop">
       <meta-data
           android:name="distractionOptimized"
           android:value="false" />
    </activity>

Übergänge von der Parkstellung in den Fahrmodus verarbeiten

  • Sehen wir uns nun an, was passiert, wenn der Fahrer vom Parkmodus in den Fahrmodus wechselt.

  • Wenn die Aktivität nicht für die Nutzung während der Fahrt optimiert ist und während der Fahrt aktiv bleibt, zeigt AAOS ein Overlay an, das Sie darauf hinweist, dass Sie parken müssen, um die App weiter zu verwenden.

  • Um diesen blockierten Bildschirm zu vermeiden, möchten wir nahtlos zur Vorlage für die Medienwiedergabe zurückkehren, ohne die Audiowiedergabe zu unterbrechen.

  • Wenn isRequiresDistractionOptimization hier also „true“ ergibt, wird die Videowiedergabeoberfläche aus der zugrunde liegenden Mediensitzung gelöscht und „finish“ für die Player-Aktivität aufgerufen. Da sie über der CAL-Oberfläche gestartet wurde, wird durch das Beenden direkt zur Medienwiedergabevorlage zurückgekehrt und die Audiowiedergabe fortgesetzt.

    class VideoPlayerActivity : ComponentActivity(){
      override fun onStart() {
    
        …
    
        if (uxRestrictionsManager?
            .currentCarUxRestrictions?
            .isRequiresDistractionOptimization
                == true) {
          revertToCarAppTemplate()
        }
      }
    
      private fun revertToCarAppTemplate() {
        mediaControllerCompat
          .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                       null, null)
        finish()
      }
    }
  • Eine unterbrechungsfreie Audiowiedergabe ist entscheidend für eine gute Nutzererfahrung. Wenn Sie Ihre Mediensitzung als Dienst im Vordergrund aktiv halten, wird der Ton bei diesen Statusänderungen nahtlos fortgesetzt.

    <activity
            android:name="androidx.car.app.activity.CarAppActivity"
            android:exported="true"
            android:launchMode="singleTask">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
    
            <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
        </intent-filter>
        <meta-data
                android:name="distractionOptimized"
                android:value="true" />
    </activity>
  • Außerdem sollten Sie die onNewIntent auf dem CAL-Bildschirm überschreiben, um SHOW_MEDIA_PLAYBACK-Intents zu erfassen.

    class MyCarAppSession : Session() {
        override fun onCreateScreen(intent: Intent): Screen {
            // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
            val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
            mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)
    
            // 2. Handle deep link if cold-started from the vehicle's media widget
            handlePlaybackIntent(intent)
            return HomeScreen(carContext)
        }
        override fun onNewIntent(intent: Intent) {
            super.onNewIntent(intent)
    
            // 3. Handle deep link when the session is already running
            handlePlaybackIntent(intent)
        }
    }
  • Wenn Nutzer mit einem Medien-Widget des Fahrzeugsystems auf dem Startbildschirm des Autos interagieren, werden sie über den Deeplink direkt zur Ansicht „Aktuelle Wiedergabe“ in der Car App Library weitergeleitet.

  • Die Validierung dieser Übergänge während des Entwicklungsprozesses ist also wirklich einfach.

  • Du kannst adb-Befehle auf AAOS ausführen.

  • In diesem Fall wäre es emulate-driving-state drive oder emulate-driving-state park, wenn du wieder zwischen Aktivitäten wechseln möchtest.

  • Hier ist ein Beispiel mit unserer neuen Media3-Beispiel-Medien-App, die die Car App Library mit Videowiedergabe beim Parken verwendet.

  • Seht euch das also bald an unserem Stand für adaptives Android im Erdgeschoss und in unserem GitHub-Repository für Auto-Beispiele an.

  • Die Park-to-Drive-Funktionen sind derzeit unter Android Automotive OS für Medien-Apps verfügbar, die bereits in die CAL für Autos integriert sind, um ein Fahrerlebnis zu bieten, bei dem sie jetzt im geparkten Zustand mehr Funktionen anbieten können.

  • Weitere Informationen dazu finden Sie demnächst in unserer Dokumentation auf developer.android.com. Dort können Sie auch Ihr Interesse an dieser Funktion für Ihre App bekunden.

  • Paul.

Neu in der Auto-App-Bibliothek

  • Sehr gut.

  • Danke, Thomas.

  • Bevor wir zum Ende kommen, möchte ich Ihnen noch ein paar Möglichkeiten vorstellen, wie Sie mehr über die Neuerungen erfahren können, die im Laufe des Jahres eingeführt werden.

  • Wie Thomas bereits erwähnt hat, befindet sich CAL 1.9 derzeit in der Alphaphase.

  • Die Funktion wird bald in die Betaphase übergehen.

  • Und CAL 1.10 wird noch vor Ende des Jahres in die Alpha-Phase gehen, sodass Sie mit der Evaluierung von konversationellen Benutzeroberflächen und den neuesten Kommunikations- und Park-to-Drive-Funktionen beginnen können.

  • Wie bereits erwähnt, sind Spiele jetzt auch für Android Auto und Android Automotive OS verfügbar. Es ist also der perfekte Zeitpunkt, um Ihre Spiele für Autos zu optimieren.

  • Weitere Informationen zur Implementierung finden Sie in der Dokumentation im Leitfaden „Spiele für Autos entwickeln“.

  • Weitere Informationen dazu, wie Sie Ihre Spiele für Autos anpassen und was es sonst noch Neues und Geändertes bei Android für Autos gibt, finden Sie auf unserer Seite „Neuigkeiten“.

  • Wir hoffen, dass Sie gesehen haben, dass Autos und ihre Nutzer bereit für Ihre Apps sind.

  • Sie können Ihre vorhandenen adaptiven Apps für die Nutzung im geparkten Fahrzeug optimieren und eine Vielzahl von Vorlagen aus der Auto-App-Mediathek verwenden, um diese für die sichere Nutzung während der Fahrt zu optimieren.

  • Vor der Veröffentlichung können Sie Ihre App mit dem Desktop-Infotainmentsystem, den Emulatoren, AAOS auf dem Pixel Tablet oder dem Firebase Test Lab gründlich testen.

  • Sie haben bereits die nötigen Kenntnisse, um für dieses Ökosystem zu entwickeln, und Millionen von Autos warten auf Ihre Apps. Bringen Sie Ihre App also auf die Straße.

Code

Code-Snippets

Shell-Snippet bei 09:03 in „Apps für geparkte Fahrzeuge entwickeln“
android skills list
android skills add android-for-cars-parked-apps
Kotlin-Snippet bei 15:20 in „Park-to-drive capabilities“
override fun onStart() {
       super.onStart()
       ...
       controllerFuture = MediaController.Builder(
         this,
         sessionToken
       ).buildAsync()

       controllerFuture?.addListener({
           mediaController = controllerFuture?.get()
           playerView.player = mediaController
       }, ContextCompat.getMainExecutor(this))
}
Kotlin-Snippet bei 16:06 in „Park-to-drive capabilities“
val watchVideoAction = Action.Builder()
  .setTitle("Watch Video")
  .setIcon(videoCarIcon)
  .setOnClickListener(
    ParkedOnlyOnClickListener.create {
      val intent = Intent(
        carContext,
        VideoPlayerActivity::class.java
      )
        .apply {
          addFlags(
            Intent.FLAG_ACTIVITY_NEW_TASK
          )
        }
      carContext.startActivity(intent)
    })
  .build()
XML-Snippet bei 16:42 in „Park-to-drive capabilities“
<activity
   android:name=".VideoPlayerActivity"
   android:exported="false"
   android:launchMode="singleTop">
   <meta-data
       android:name="distractionOptimized"
       android:value="false" />
</activity>
Kotlin-Snippet bei 17:17 in „Handling transitions from park to drive“
class VideoPlayerActivity : ComponentActivity(){
  override fun onStart() {

    …

    if (uxRestrictionsManager?
        .currentCarUxRestrictions?
        .isRequiresDistractionOptimization
            == true) {
      revertToCarAppTemplate()
    }
  }

  private fun revertToCarAppTemplate() {
    mediaControllerCompat
      .sendCommand("CMD_CLEAR_VIDEO_SURFACE",
                   null, null)
    finish()
  }
}
XML-Snippet bei 17:36 in „Handling transitions from park to drive“
<activity
        android:name="androidx.car.app.activity.CarAppActivity"
        android:exported="true"
        android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />

        <action android:name="androidx.car.app.media.action.SHOW_MEDIA_PLAYBACK" />
    </intent-filter>
    <meta-data
            android:name="distractionOptimized"
            android:value="true" />
</activity>
Kotlin-Snippet bei 17:49 in „Handling transitions from park to drive“
class MyCarAppSession : Session() {
    override fun onCreateScreen(intent: Intent): Screen {
        // 1. Link your active MediaSession token with Car App Library's MediaPlaybackManager
        val mediaPlaybackManager = carContext.getCarService(MediaPlaybackManager::class.java)
        mediaPlaybackManager.registerMediaPlaybackToken(mediaSessionToken)

        // 2. Handle deep link if cold-started from the vehicle's media widget
        handlePlaybackIntent(intent)
        return HomeScreen(carContext)
    }
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)

        // 3. Handle deep link when the session is already running
        handlePlaybackIntent(intent)
    }
}