Wenn Sie die Medienwiedergabe in Android Auto und Android Automotive OS (AAOS) aktivieren möchten, implementieren Sie die Wiedergabesteuerung, indem Sie eine Media Session registrieren und die zugehörigen Callback-Methoden verarbeiten. Auf dieser Seite erfahren Sie, wie Sie:
ein
MediaSessionCompat-Objekt in Ihrem Media Browser Service registrieren.MediaSessionCompat.Callback-Methoden implementieren, um auf Wiedergabeanfragen von Nutzern zu reagieren.Standard- und benutzerdefinierte Wiedergabeaktionen konfigurieren.
den anfänglichen Wiedergabestatus für Ihre Media Session festlegen.
Symbole hinzufügen, um das Audioformat anzugeben.
Links aus aktuell wiedergegebenen Medienelementen erstellen.
Android Auto und AAOS senden Wiedergabesteuerungsbefehle über
MediaSessionCompat für Ihren Dienst. Sie müssen eine Sitzung registrieren und die zugehörigen Callback-Methoden implementieren.
Media Session registrieren
Erstellen Sie in der onCreate-Methode Ihres Media Browser Service eine Instanz von
MediaSessionCompat und rufen Sie dann setSessionToken auf, um die
Media Session zu registrieren. Dieses Code-Snippet zeigt, wie Sie eine Media Session erstellen und registrieren:
Kotlin
override fun onCreate() {
super.onCreate()
...
// Start a new MediaSession.
val session = MediaSessionCompat(this, "session tag").apply {
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
setCallback(MyMediaSessionCallback())
}
sessionToken = session.sessionToken
...
}
Java
public void onCreate() {
super.onCreate();
...
// Start a new MediaSession.
MediaSessionCompat session = new MediaSessionCompat(this, "session tag");
setSessionToken(session.getSessionToken());
// Set a callback object that implements MediaSession.Callback
// to handle play control requests.
session.setCallback(new MyMediaSessionCallback());
...
}
Wenn Sie das Media Session-Objekt erstellen, legen Sie ein Callback-Objekt fest, mit dem Anfragen zur Wiedergabesteuerung verarbeitet werden. Sie erstellen dieses Callback-Objekt, indem Sie
eine Implementierung der Klasse MediaSessionCompat.Callback
für Ihre App bereitstellen. Im nächsten Abschnitt wird beschrieben, wie Sie dieses Objekt implementieren.
Wiedergabebefehle implementieren
Wenn ein Nutzer die Wiedergabe eines Medienelements aus Ihrer App anfordert, verwenden Android Automotive
OS und Android Auto die MediaSessionCompat.Callback
Klasse aus dem MediaSessionCompat-Objekt Ihrer App, das sie vom
Media Browser Service Ihrer App erhalten haben. Wenn ein Nutzer die Wiedergabe von Inhalten steuern möchte, z. B. die Wiedergabe pausieren oder zum nächsten Titel springen, rufen Android Auto und Android Automotive OS eine der Methoden des Callback-Objekts auf.
Um die Wiedergabe von Inhalten zu verarbeiten, muss Ihre App die abstrakte Klasse MediaSessionCompat.Callback erweitern und die Methoden implementieren, die von Ihrer App unterstützt werden.
Implementieren Sie jede dieser Callback-Methoden, die für die Art von Inhalten sinnvoll sind, die von Ihrer App angeboten werden:
onPrepare- AAOS ruft diese Methode auf, wenn sich die Medienquelle ändert.
onPlayWird aufgerufen, wenn der Nutzer die Wiedergabe auswählt, ohne ein bestimmtes Element auszuwählen. Ihre App muss die Standardinhalte wiedergeben. Wenn die Wiedergabe mit
onPausepausiert wurde, wird sie von Ihrer App fortgesetzt.onPlayFromMediaIdWird aufgerufen, wenn der Nutzer ein bestimmtes Element zur Wiedergabe auswählt. Die Methode empfängt die ID, die Ihr Media Browser Service dem Medienelement in der Inhaltshierarchie zugewiesen hat.
onPlayFromSearchWird aufgerufen, wenn der Nutzer die Wiedergabe über eine Suchanfrage auswählt. Die App muss eine entsprechende Auswahl basierend auf der übergebenen Suchanfrage treffen.
onPauseWird aufgerufen, wenn der Nutzer die Wiedergabe pausiert.
onSkipToNextWird aufgerufen, wenn der Nutzer zum nächsten Element springt.
onSkipToPreviousWird aufgerufen, wenn der Nutzer zum vorherigen Element springt.
onStopWird aufgerufen, wenn der Nutzer die Wiedergabe beendet. Überschreiben Sie diese Methoden in Ihrer App, um das gewünschte Ergebnis zu erzielen. Sie müssen eine Methode nicht implementieren, wenn ihr Zweck von Ihrer App nicht unterstützt wird. Wenn Ihre App beispielsweise einen Livestream wie eine Sportübertragung wiedergibt, müssen Sie
onSkipToNextnicht implementieren. Verwenden Sie stattdessen die Standardimplementierung vononSkipToNext.
Ihre App benötigt keine spezielle Logik, um Inhalte über die Lautsprecher des Autos wiederzugeben. Wenn Ihre App eine Anfrage zur Wiedergabe von Inhalten erhält, wird Audio auf dieselbe Weise wiedergegeben wie Inhalte über die Lautsprecher oder Kopfhörer des Smartphones eines Nutzers. Android Auto und AAOS senden die Audioinhalte automatisch an das System des Autos, um sie über die Lautsprecher des Autos wiederzugeben.
Weitere Informationen zur Wiedergabe von Audioinhalten finden Sie in der Übersicht über MediaPlayer, Audio-Apps und der Übersicht über ExoPlayer ExoPlayer.
Standardwiedergabeaktionen festlegen
Android Auto und AAOS zeigen Wiedergabesteuerungen basierend auf den
Aktionen an, die im PlaybackStateCompat
Objekt aktiviert sind. Standardmäßig muss Ihre App die folgenden Aktionen unterstützen:
Ihre App kann zusätzlich die folgenden Aktionen unterstützen, wenn sie für die Inhalte der App relevant sind:
Außerdem können Sie optional eine Wiedergabeliste erstellen, die dem Nutzer angezeigt wird.
Rufen Sie dazu die setQueue und setQueueTitle Methoden auf, aktivieren Sie
die ACTION_SKIP_TO_QUEUE_ITEM Aktion und definieren Sie den Callback
onSkipToQueueItem.
Fügen Sie außerdem Unterstützung für das Symbol Wird gerade wiedergegeben hinzu, das angibt, was gerade wiedergegeben wird. Rufen Sie dazu die setActiveQueueItemId-Methode auf und übergeben Sie
die ID des wiedergegebenen Elements in der Warteschlange. Sie müssen setActiveQueueItemId immer aktualisieren, wenn sich die Warteschlange ändert.
Android Auto und AAOS zeigen Schaltflächen für jede aktivierte Aktion sowie die Wiedergabeliste an. Wenn Nutzer auf diese Schaltflächen klicken, ruft das System den
entsprechenden Callback aus MediaSessionCompat.Callback auf.
Nicht verwendeten Platz reservieren
Android Auto und AAOS reservieren Platz auf der Benutzeroberfläche für die Aktionen ACTION_SKIP_TO_PREVIOUS und ACTION_SKIP_TO_NEXT. Wenn Ihre App eine dieser Funktionen nicht unterstützt, verwenden Android Auto und AAOS den Platz, um alle von Ihnen erstellten benutzerdefinierten Aktionen anzuzeigen.
Wenn Sie diese Bereiche nicht mit benutzerdefinierten Aktionen füllen möchten, können Sie sie reservieren, damit Android Auto und AAOS den Platz leer lassen, wenn Ihre App die entsprechende Funktion nicht unterstützt.
Rufen Sie dazu die setExtras-Methode mit einem Extras-Bundle auf, das
Konstanten enthält, die den reservierten Funktionen entsprechen.
SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT
entspricht ACTION_SKIP_TO_NEXT, und
SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV
entspricht ACTION_SKIP_TO_PREVIOUS. Verwenden Sie diese Konstanten als Schlüssel im Bundle und den booleschen Wert true als Werte.
Anfänglichen Wiedergabestatus festlegen
Während Android Auto und AAOS mit Ihrem Media Browser
Service kommunizieren, teilt Ihre Media Session den Status der Wiedergabe von Inhalten über
die PlaybackStateCompat mit.
Ihre App darf nicht automatisch mit der Musikwiedergabe beginnen, wenn AAOS oder Android Auto eine Verbindung zu Ihrem Media Browser Service herstellen. Stattdessen sollten Sie Android Auto und AAOS die Wiedergabe basierend auf dem Status des Autos oder Nutzeraktionen fortsetzen oder starten lassen.
Legen Sie dazu den anfänglichen PlaybackStateCompat
Ihrer Media Session auf STATE_STOPPED, STATE_PAUSED,
STATE_NONE oder STATE_ERROR fest.
Media Sessions in Android Auto und AAOS dauern nur so lange wie die Fahrt. Nutzer starten und beenden diese Sitzungen daher häufig. Um einen nahtlosen Übergang zwischen Fahrten zu ermöglichen, sollten Sie den vorherigen Sitzungsstatus des Nutzers im Blick behalten. Wenn die Media App eine Anfrage zum Fortsetzen erhält, kann der Nutzer automatisch dort weitermachen, wo er aufgehört hat. Dazu gehören beispielsweise das zuletzt wiedergegebene Medienelement, PlaybackStateCompat und die Warteschlange.
Benutzerdefinierte Wiedergabeaktionen hinzufügen
Sie können benutzerdefinierte Wiedergabeaktionen hinzufügen, um zusätzliche Aktionen anzuzeigen, die von Ihrer Media App unterstützt werden. Wenn genügend Platz vorhanden ist (und Sie ihn nicht reservieren), fügt Android
die benutzerdefinierten Aktionen den Transportsteuerelementen hinzu. Andernfalls werden die benutzerdefinierten Aktionen im Menü Mehr angezeigt. Android zeigt benutzerdefinierte Aktionen in der Reihenfolge an, in der Sie sie zu PlaybackStateCompat hinzufügen.
Verwenden Sie benutzerdefinierte Aktionen, um ein Verhalten zu ermöglichen, das sich von Standardaktionen unterscheidet. Verwenden Sie sie nicht, um Standardaktionen zu ersetzen oder zu duplizieren.
Verwenden Sie die addCustomAction Methode in der
PlaybackStateCompat.Builder Klasse, um benutzerdefinierte Aktionen hinzuzufügen. Dieses Code-Snippet zeigt, wie Sie eine benutzerdefinierte Aktion zum Starten eines Radiosenders hinzufügen:
Kotlin
val customActionExtras = Bundle()
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO)
stateBuilder.addCustomAction(
PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon // or R.drawable.media3_icon_radio
).run {
setExtras(customActionExtras)
build()
}
)
Java
Bundle customActionExtras = new Bundle();
customActionExtras.putInt(
androidx.media3.session.MediaConstants.EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT,
androidx.media3.session.CommandButton.ICON_RADIO);
stateBuilder.addCustomAction(
new PlaybackStateCompat.CustomAction.Builder(
CUSTOM_ACTION_START_RADIO_FROM_MEDIA,
resources.getString(R.string.start_radio_from_media),
startRadioFromMediaIcon) // or R.drawable.media3_icon_radio
.setExtras(customActionExtras)
.build());
Ein detaillierteres Beispiel für diese Methode finden Sie in der Beispiel-App Universal Android Music Player auf GitHub unter der setCustomAction
Methode. Nachdem Sie Ihre benutzerdefinierte Aktion erstellt haben, kann Ihre Media Session auf die Aktionen reagieren, indem Sie die onCustomAction Methode überschreiben.
Dieses Code-Snippet zeigt, wie Ihre App auf die Aktion „Radiosender starten“ reagieren könnte:
Kotlin
override fun onCustomAction(action: String, extras: Bundle?) {
when(action) {
CUSTOM_ACTION_START_RADIO_FROM_MEDIA -> {
...
}
}
}
Java
@Override
public void onCustomAction(@NonNull String action, Bundle extras) {
if (CUSTOM_ACTION_START_RADIO_FROM_MEDIA.equals(action)) {
...
}
}
Weitere Informationen finden Sie in der Beispiel-App Universal Android
Music Player auf GitHub unter der Methode onCustomAction.
Symbole für benutzerdefinierte Aktionen erstellen
Für jede benutzerdefinierte Aktion, die Sie erstellen, ist ein Symbol erforderlich.
Wenn die Beschreibung dieses Symbols einer der CommandButton.ICON_
Konstanten entspricht, legen Sie den ganzzahligen Wert für den
EXTRAS_KEY_COMMAND_BUTTON_ICON_COMPAT Schlüssel der Extras der benutzerdefinierten Aktion fest. Auf unterstützten Systemen wird dadurch die Symbolressource überschrieben, die an
CustomAction.Builder übergeben wurde. So können Systemkomponenten
Ihre Aktion und andere Wiedergabeaktionen einheitlich rendern.
Sie müssen auch eine Symbolressource angeben. Apps in Autos können auf vielen verschiedenen Bildschirmgrößen und -dichten ausgeführt werden. Daher müssen die von Ihnen bereitgestellten Symbole Vektorgrafikensein. Verwenden Sie eine Vektorgrafik, um Assets zu skalieren, ohne Details zu verlieren. Eine Vektorgrafik kann Kanten und Ecken bei geringeren Auflösungen an die Pixelgrenzen anpassen.
Wenn eine benutzerdefinierte Aktion zustandsbehaftet ist (d. h., wenn sie eine Wiedergabeeinstellung ein- oder ausschaltet), stellen Sie verschiedene Symbole für die verschiedenen Zustände bereit, damit Nutzer eine Änderung sehen, wenn sie die Aktion auswählen.
Alternative Symbolstile für deaktivierte Aktionen bereitstellen
Wenn eine benutzerdefinierte Aktion für den aktuellen Kontext nicht verfügbar ist, ersetzen Sie das Symbol der benutzerdefinierten Aktion durch ein alternatives Symbol, das die Aktion als deaktiviert anzeigt.
Audioformat angeben
Wenn Sie angeben möchten, dass die wiedergegebenen Medien ein spezielles Audioformat verwenden, können Sie Symbole angeben, die in Autos gerendert werden, die diese Funktion unterstützen. Sie
können KEY_CONTENT_FORMAT_TINTABLE_LARGE_ICON_URI und
KEY_CONTENT_FORMAT_TINTABLE_SMALL_ICON_URI im Extras-Bundle des
aktuell wiedergegebenen Medienelements festlegen (an MediaSession.setMetadata übergeben).
Legen Sie beide Extras fest, um die verschiedenen Layouts zu berücksichtigen.
Außerdem können Sie das KEY_IMMERSIVE_AUDIO Extra
festlegen, um Autoherstellern mitzuteilen, dass es sich um immersives Audio handelt. Sie sollten sehr vorsichtig sein
wenn sie Audioeffekte anwenden, die die
immersiven Inhalte beeinträchtigen könnten.
Links aus dem aktuell wiedergegebenen Element hinzufügen
Sie können das wiedergegebene Medienelement so konfigurieren, dass der Untertitel, die Beschreibung oder beides Links zu anderen Medienelementen sind. So kann der Nutzer schnell zu ähnlichen Elementen springen, z. B. zu anderen Songs desselben Künstlers oder zu anderen Folgen eines Podcasts. Wenn das Auto diese Funktion unterstützt, können Nutzer auf den Link tippen, um zu diesen Inhalten zu wechseln.
Konfigurieren Sie die KEY_SUBTITLE_LINK_MEDIA_ID Metadaten
(um vom Untertitel aus zu verlinken) oder KEY_DESCRIPTION_LINK_MEDIA_ID (um
von der Beschreibung aus zu verlinken), um Links hinzuzufügen. Weitere Informationen finden Sie in der Referenzdokumentation zu diesen Metadatenfeldern.