Sie können Ihre App für Fahrzeuge mit Android Auto oder Android Automotive OS anbieten. Verwende eine App-Architektur, die für beide Fälle funktioniert, damit alle Nutzer deine App verwenden können.
Was ist Android for Cars?
Eine Medien-App für Autos kann Nutzern die Möglichkeit bieten, ihr digitales Leben nahtlos mit ihrem Auto zu verbinden. Wenn du die Smartphone-Apps auch für Autos verfügbar machst, verbesserst du die Nutzerfreundlichkeit. Dazu können Sie Android Auto oder Android Automotive OS integrieren.
Android-Apps für Autos müssen vor allem Ablenkungen des Fahrers vermeiden. Sie können Ablenkungen minimieren, indem Sie Best Practices wie die Verwendung von Sprachbefehlen und ein sehr praktisches visuelles Design befolgen. So kann deine Medien-App dem Fahrer nur dann aktuelle Informationen anzeigen, wenn sie relevant sind, und vorhersehbare Muster für häufige Aufgaben verwenden.
Android Auto
Android Auto bietet eine für Autofahrer optimierte App-Nutzung für Nutzer, die ein Android-Smartphone mit der Android Auto App und ein kompatibles Auto oder eine kompatible Aftermarket-Musikanlage haben. Sie können Ihre App direkt auf dem Display ihres Autos verwenden, indem sie ihr Smartphone verbinden. Du kannst Android Auto mit deiner Telefon App verbinden, indem du Dienste erstellst, die Android Auto verwendet, um dem Fahrer eine für ihn optimierte Benutzeroberfläche anzuzeigen.
Android Automotive OS
Android Automotive OS ist ein Android-basiertes Infotainmentsystem, das in Fahrzeuge eingebaut ist. Das System des Autos ist ein eigenständiges Android-Gerät, das für das Fahren optimiert ist. Mit Android Automotive OS installieren Nutzer deine App direkt im Auto und nicht auf ihrem Smartphone.
Unterstützte App-Kategorien
Mit Medien-Apps können Nutzer im Auto Musik, Radio, Hörbücher und andere Audioinhalte suchen und abspielen. Weitere Informationen finden Sie unter Apps für die Audiowiedergabe in Autos entwickeln und Medien-Apps für Autos entwickeln.
Medien-Apps werden mit MediaLibraryService und MediaSession erstellt.
Unter Android Automotive OS können Sie auch Anmelde- und Einstellungsbildschirme (für die Verwendung im geparkten Zustand) mit Ansichten oder Compose erstellen.
Mit Video-Apps können Nutzer Streamingvideos ansehen, während das Auto geparkt ist. Der Hauptzweck dieser Apps ist die Anzeige von Streamingvideos. Diese Apps werden mit Views oder Compose erstellt. Weitere Informationen finden Sie unter Videowiedergabe-Apps für Android Automotive OS entwickeln und Video-Apps für Android Automotive OS entwickeln.
Audiowiedergabe-Apps für Autos entwickeln
In diesem Leitfaden wird davon ausgegangen, dass Sie bereits eine einfache App zur Medienwiedergabe haben. Wenn Sie noch keine haben, rufen Sie Einfache Mediaplayer-App erstellen auf, um loszulegen.
In diesem Leitfaden finden Sie Informationen dazu, was Sie tun müssen, einschließlich Links zu weiteren Ressourcen mit spezifischen Anleitungen.
Wiedergabekomponenten
Media3 bietet mehrere wichtige Komponenten für Wiedergabe-Anwendungsfälle. Die Klassen, aus denen diese Komponenten bestehen, sind Ihnen vertraut, wenn Sie mit früheren Android-Medienbibliotheken gearbeitet haben.
Das folgende Diagramm zeigt, wie diese Komponenten in einer typischen App zusammenwirken.
Weitere Informationen finden Sie unter Wiedergabekomponenten.
MediaLibraryService und MediaLibrarySession implementieren
Ein MediaLibraryService bietet eine standardisierte API, um Ihre Mediathek bereitzustellen und den Zugriff darauf zu ermöglichen.
Dies ist erforderlich, wenn du deiner Medien-App Unterstützung für Android Auto oder Android Automotive OS hinzufügst, da diese Plattformen eine eigene, für Autofahrer sichere Benutzeroberfläche für deine Mediathek bereitstellen. Weitere Informationen zum Implementieren und Verwenden eines MediaLibraryService findest du unter Inhalte mit MediaLibraryService bereitstellen.
Verwenden Sie für die Wiedergabesteuerung eine Mediensitzung. Die MediaSession API bietet eine universelle Möglichkeit, mit einem Audio- oder Videoplayer zu interagieren. Die Jetpack Media3-Bibliothek enthält MediaLibrarySession, wodurch MediaSession um APIs zum Durchsuchen von Inhalten erweitert wird.
Durch die Verbindung einer Media Session mit einem Player kann eine App die Medienwiedergabe extern bewerben und Wiedergabebefehle von externen Quellen wie Android Auto, Android Automotive OS oder Google Assistant empfangen. Weitere Informationen findest du unter Wiedergabe mit einer MediaSession steuern und bewerben und MediaLibrarySession verwenden.
Deine Mediensitzung sollte mindestens die Unterstützung der folgenden Player-Befehle deklarieren:
Im Leitfaden Wiedergabesteuerung aktivieren wird beschrieben, wie Sie die Wiedergabesteuerung in Autos anpassen können.
Wenn Android Auto oder Android Automotive OS eine Verbindung zu deiner App herstellen, fordern sie eine Inhaltsbibliothek an, die angezeigt werden soll. Dadurch wird die Callback-Methode onGetLibraryRoot() ausgelöst. Sie können eine Stamm-Mediendatei schnell zurückgeben, um Zugriff auf Ihre Mediathek zu gewähren. Die Callback-Methode onGetChildren() wird aufgerufen, wenn Android Auto oder Android Automotive OS versuchen, tiefere Ebenen Ihrer Inhaltsbibliothek zu durchsuchen.
Diese Plattformen erzwingen zusätzliche Einschränkungen für die Strukturierung Ihrer Inhaltsbibliothek. Weitere Informationen zum Anpassen der Anzeige Ihrer Inhaltsbibliothek finden Sie im Leitfaden MediaBrowserService erstellen.
Unterstützung von Android Auto deklarieren
Verwenden Sie den folgenden Manifesteintrag, um zu deklarieren, dass Ihre Smartphone-App Android Auto unterstützt:
<application>
...
<meta-data android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Dieser Manifesteintrag bezieht sich auf eine XML-Datei, in der deklariert wird, welche Autofunktionen deine App unterstützt. Wenn Sie eine Medien-App haben, fügen Sie dem Verzeichnis res/xml/ in Ihrem Projekt eine XML-Datei mit dem Namen automotive_app_desc.xml hinzu. Diese Datei sollte den folgenden Inhalt enthalten:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Unterstützung für Android Automotive OS deklarieren
Du musst ein Automotive-Modul erstellen, da nicht die gesamte Logik deiner App mit einer Automotive-App geteilt werden kann. Einige Komponenten von Android Automotive OS, z. B. das Manifest, haben plattformspezifische Anforderungen. Erstellen Sie ein Modul, mit dem der Code für diese Komponenten von anderem Code in Ihrem Projekt getrennt werden kann, z. B. dem Code für Ihre mobile App.
So fügen Sie Ihrem Projekt ein Automotive-Modul hinzu:
- Klicken Sie in Android Studio auf Datei > Neu > Neues Modul.
- Wählen Sie Automotive-Modul aus und klicken Sie auf Weiter.
- Geben Sie einen Anwendungs-/Bibliotheksnamen ein. Dies ist der Name, den Nutzer für Ihre App unter Android Automotive OS sehen.
- Geben Sie einen Modulnamen ein.
- Passen Sie den Paketnamen an Ihre App an.
Wählen Sie für das Minimum SDK die Option API 28: Android 9.0 (Pie) aus und klicken Sie dann auf Weiter.
Alle Autos, die Android Automotive OS unterstützen, werden mit Android 9 (API-Level 28) oder höher ausgeführt. Wenn Sie diesen Wert auswählen, werden also alle kompatiblen Autos berücksichtigt.
Wählen Sie Keine Aktivität aus und klicken Sie auf Fertig.
Nachdem Sie Ihr Modul in Android Studio erstellt haben, öffnen Sie die AndroidManifest.xml in Ihrem neuen Automotive-Modul:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
</manifest>
Das Element application enthält einige Standard-App-Informationen sowie ein uses-feature-Element, mit dem die Unterstützung für Android Automotive OS deklariert wird.
Beachten Sie, dass im Manifest keine Aktivitäten deklariert sind.
Wenn Sie Einstellungen oder Anmeldeaktivitäten implementieren, fügen Sie sie hier hinzu. Diese Aktivitäten werden vom System mithilfe expliziter Intents ausgelöst und sind die einzigen Aktivitäten, die du im Manifest für deine Android Automotive OS-App deklarierst.
Nachdem Sie alle Einstellungen oder Anmeldeaktivitäten hinzugefügt haben, vervollständigen Sie Ihre Manifestdatei, indem Sie das Attribut android:appCategory="audio" im Element application festlegen und die folgenden uses-feature-Elemente hinzufügen:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.media">
<application
android:allowBackup="true"
android:appCategory="audio"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme" />
<uses-feature
android:name="android.hardware.type.automotive"
android:required="true" />
<uses-feature
android:name="android.hardware.wifi"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.portrait"
android:required="false" />
<uses-feature
android:name="android.hardware.screen.landscape"
android:required="false" />
</manifest>
Wenn du diese Funktionen explizit auf required="false" setzt, wird sichergestellt, dass deine App nicht mit den verfügbaren Hardwarefunktionen auf Automotive OS-Geräten in Konflikt steht.
Verwenden Sie den folgenden Manifesteintrag, um zu deklarieren, dass Ihre App Android Automotive OS unterstützt:
<application>
...
<meta-data android:name="com.android.automotive"
android:resource="@xml/automotive_app_desc"/>
...
</application>
Dieser Manifesteintrag bezieht sich auf eine XML-Datei, in der die von Ihrer App unterstützten Autofunktionen deklariert werden.
Wenn Sie angeben möchten, dass Sie eine Medien-App haben, fügen Sie dem Verzeichnis res/xml/ in Ihrem Projekt eine XML-Datei mit dem Namen automotive_app_desc.xml hinzu. Fügen Sie der Datei den folgenden Inhalt hinzu:
<automotiveApp>
<uses name="media"/>
</automotiveApp>
Intent-Filter
Android Automotive OS verwendet explizite Intents, um Aktivitäten in Ihrer Medien-App auszulösen. Fügen Sie der Manifestdatei keine Aktivitäten mit CATEGORY_LAUNCHER- oder ACTION_MAIN-Intent-Filtern hinzu.
Aktivitäten wie die im folgenden Beispiel zielen in der Regel auf ein Smartphone oder ein anderes Mobilgerät ab. Deklariere diese Aktivitäten in dem Modul, mit dem die Smartphone-App erstellt wird, und nicht in dem Modul, mit dem deine Android Automotive OS-App erstellt wird.
<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>
Weitere Schritte
Nachdem du eine App für Android Auto und Android Automotive OS erstellt hast, solltest du zusätzliche Schritte unternehmen, um deine App für eine sicherere Nutzung während der Fahrt zu optimieren. Weitere Empfehlungen für eine sichere und bequeme Nutzung findest du in den technischen Leitfäden für Sprachbefehle, Schutzmaßnahmen gegen Ablenkung und Fehlerbehandlung.
Apps für die Videowiedergabe für Android Automotive OS entwickeln
Da Video-Apps in Autos getrennt von Medien-Apps kategorisiert werden, müssen Sie einige spezielle Anforderungen für Video-Apps beachten, die unter Apps für geparkte Autos entwickeln und Video-Apps für Android Automotive OS entwickeln beschrieben werden. Folge dazu einfach diesen Schritten:
App als Video-App kennzeichnen
Wenn du angeben möchtest, dass deine App Video unterstützt, füge dem <application>-Element deines Manifests das Attribut android:appCategory="video" hinzu.
<manifest ...>
...
<application
...
android:appCategory="video">
...
</application>
</manifest>
Android Automotive OS-Hardwarefunktion deklarieren
Wenn du angeben möchtest, dass deine App Android Automotive OS-Geräte unterstützt, füge deinem Manifest das Element android.hardware.type.automotive <uses-feature> hinzu.
Unter AAOS-Hardwarefunktion deklarieren finden Sie Informationen dazu, ob Sie das Attribut android:required auf "false" oder "true" festlegen sollten.
<manifest ...>
...
<uses-feature android:name="android.hardware.type.automotive" ...>
...
</manifest>