Inhaltsstile anwenden

Nachdem Sie mit durchsuchbaren oder abspielbaren Elementen [Ihre Inhaltshierarchie erstellt][1] haben, wenden Sie Inhaltsstile an, um festzulegen, wie diese Elemente im Auto angezeigt werden. Verwenden Sie diese Inhaltsstile:

Listeneinträge

Abbildung 1. Bei Listenelementen haben Titel und Metadaten Vorrang vor Bildern.

Rasterelemente

Abbildung 2: Bei Rasterelementen werden Bilder vor Titeln und Metadaten priorisiert.

Standardstile für Inhalte festlegen

Sie können globale Standardeinstellungen für die Darstellung Ihrer Media-Elemente festlegen. Dazu müssen Sie bestimmte Konstanten in das BrowserRoot-Extras-Bundle einfügen, das von der [onGetRoot][1]-Implementierung Ihres Dienstes zurückgegeben wird, und nach diesen Konstanten suchen, um den entsprechenden Stil zu ermitteln.

Diese Extras können als Schlüssel im Bundle verwendet werden:

  • [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE][2]: Ein Präsentationstipp für alle durchsuchbaren Elemente in der Suchstruktur.

  • [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE][3]: Ein Präsentationstipp für alle wiedergebaren Elemente in der Baumstruktur.

Diese Schlüssel können den folgenden ganzzahligen Konstantenwerten zugeordnet werden, um die Darstellung der Elemente zu beeinflussen:

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM][4]: Entsprechende Elemente, die als Listenelemente dargestellt werden.

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM][5]: Entsprechende Elemente, die als Rasterelemente dargestellt werden.

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM][6]: Entsprechende Elemente werden als „category“-Listenelemente dargestellt, ähnlich wie normale Listenelemente, aber es werden Ränder um die Symbole der Elemente angewendet. Dadurch wird die Darstellung kleiner Symbole verbessert. Symbole müssen als Vektordrawables mit Farbtonanpassung verfügbar sein. Geben Sie diesen Hinweis nur für durchsuchbare Elemente an.

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM][7]: Entsprechende Elemente werden als „Kategorie“-Grid-Elemente dargestellt und ähneln normalen Grid-Elementen. Allerdings werden Ränder um die Symbole der Elemente angewendet. Dadurch wird die Darstellung kleiner Symbole verbessert. Die Symbole müssen als Vektordrawables vorliegen, die eingefärbt werden können. Diesen Hinweis nur für durchsuchbare Elemente bereitstellen.

Dieses Code-Snippet zeigt, wie Sie das Standardinhaltsformat für durchsuchbare Elemente auf Raster und für abspielbare Elemente auf Listen festlegen:

Kotlin

import androidx.media.utils.MediaConstants

@Nullable
override fun onGetRoot(
    @NonNull clientPackageName: String,
    clientUid: Int,
    @Nullable rootHints: Bundle
): BrowserRoot {
    val extras = Bundle()
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM)
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM)
    return BrowserRoot(ROOT_ID, extras)
}

Java

import androidx.media.utils.MediaConstants;

@Nullable
@Override
public BrowserRoot onGetRoot(
    @NonNull String clientPackageName,
    int clientUid,
    @Nullable Bundle rootHints) {
    Bundle extras = new Bundle();
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM);
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM);
    return new BrowserRoot(ROOT_ID, extras);
}

Inhaltsstile für einzelne Elemente festlegen

Sie können den Standardinhaltsstil für alle Nachfolgerelemente eines blätterbaren Media-Elements sowie für alle Media-Elemente überschreiben. Wenn Sie die Standardeinstellung für die untergeordneten Elemente eines durchsuchbaren Media-Elements überschreiben möchten, erstellen Sie ein Extras-Bundle im MediaDescription des Media-Elements und fügen Sie die oben genannten Hinweise hinzu:

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE gilt für die abspielbaren untergeordneten Elemente dieses Artikels.

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE gilt für die durchsuchbaren untergeordneten Elemente dieses Artikels.

Wenn Sie den Standardwert für ein bestimmtes Media-Element (nicht für seine untergeordneten Elemente) überschreiben möchten, erstellen Sie im MediaDescription des Media-Elements ein Extras-Bundle. Fügen Sie dann einen Hinweis mit dem Schlüssel [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM][8] hinzu. Verwenden Sie die zuvor beschriebenen Werte, um die Darstellung des Elements festzulegen.

In diesem Code-Snippet wird gezeigt, wie Sie ein durchsuchbares MediaItem erstellen, das den Standardinhaltsstil für sich selbst und seine untergeordneten Elemente überschreibt. Es wird als Kategorielistenelement, seine durchsuchbaren untergeordneten Elemente als Listenelemente und seine abspielbaren untergeordneten Elemente als Gridelemente formatiert.

Kotlin

import androidx.media.utils.MediaConstants

private fun createBrowsableMediaItem(
    mediaId: String,
    folderName: String,
    iconUri: Uri
): MediaBrowser.MediaItem {
    val mediaDescriptionBuilder = MediaDescription.Builder()
    mediaDescriptionBuilder.setMediaId(mediaId)
    mediaDescriptionBuilder.setTitle(folderName)
    mediaDescriptionBuilder.setIconUri(iconUri)
    val extras = Bundle()
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM)
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM)
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM)
    mediaDescriptionBuilder.setExtras(extras)
    return MediaBrowser.MediaItem(
        mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE)
}

Java

import androidx.media.utils.MediaConstants;

private MediaBrowser.MediaItem createBrowsableMediaItem(
    String mediaId,
    String folderName,
    Uri iconUri) {
    MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder();
    mediaDescriptionBuilder.setMediaId(mediaId);
    mediaDescriptionBuilder.setTitle(folderName);
    mediaDescriptionBuilder.setIconUri(iconUri);
    Bundle extras = new Bundle();
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM);
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM);
    extras.putInt(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE,
        MediaConstants.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM);
    mediaDescriptionBuilder.setExtras(extras);
    return new MediaBrowser.MediaItem(
        mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_BROWSABLE);
}

Elemente mithilfe von Titelhinweisen gruppieren

Verwenden Sie einen Hinweis pro Element, um ähnliche Media-Elemente zu gruppieren. Für jedes Media-Element in einer Gruppe muss im MediaDescription ein Extras-Bundle deklariert werden. Dieses Bundle muss eine Zuordnung mit dem Schlüssel [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE][9] und einem identischen Stringwert enthalten. Lokalisieren Sie diesen String, da er für den Titel der Gruppe verwendet wird.

In diesem Code-Snippet sehen Sie, wie Sie ein MediaItem-Objekt mit der Untergruppenüberschrift Songs erstellen:

Kotlin

import androidx.media.utils.MediaConstants

private fun createMediaItem(
    mediaId: String,
    folderName: String,
    iconUri: Uri
): MediaBrowser.MediaItem {
    val mediaDescriptionBuilder = MediaDescription.Builder()
    mediaDescriptionBuilder.setMediaId(mediaId)
    mediaDescriptionBuilder.setTitle(folderName)
    mediaDescriptionBuilder.setIconUri(iconUri)
    val extras = Bundle()
    extras.putString(
        MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE,
        "Songs")
    mediaDescriptionBuilder.setExtras(extras)
    return MediaBrowser.MediaItem(
        mediaDescriptionBuilder.build(), /* playable or browsable flag*/)
}

Java

import androidx.media.utils.MediaConstants;

private MediaBrowser.MediaItem createMediaItem(String mediaId, String folderName, Uri iconUri) {
   MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder();
   mediaDescriptionBuilder.setMediaId(mediaId);
   mediaDescriptionBuilder.setTitle(folderName);
   mediaDescriptionBuilder.setIconUri(iconUri);
   Bundle extras = new Bundle();
   extras.putString(
       MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE,
       "Songs");
   mediaDescriptionBuilder.setExtras(extras);
   return new MediaBrowser.MediaItem(
       mediaDescriptionBuilder.build(), /* playable or browsable flag*/);
}

Ihre App muss alle Media-Elemente, die Sie gruppieren möchten, als zusammenhängenden Block übergeben. Angenommen, Sie möchten zwei Gruppen von Media-Elementen in dieser Reihenfolge anzeigen: „Songs“ und „Alben“. Wenn Ihre App fünf Media-Elemente in dieser Reihenfolge übergibt, interpretieren Android Auto und AAOS sie als vier separate Gruppen:

  • Medienelement A mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • Medienelement B mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • Medienelement C mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • Medienelement D mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • Medienelement E mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

Daraus ergeben sich die folgenden vier Gruppen:

  • Gruppe 1 mit dem Namen „Songs“ mit Media-Element A
  • Gruppe 2 mit dem Namen „Alben“, die das Media-Element B enthält
  • Gruppe 3 mit dem Namen „Songs“ mit den Media-Elementen C und D
  • Gruppe 4 mit dem Namen „Alben“, die das Media-Element E enthält

Wenn Sie diese Elemente in zwei Gruppen anzeigen möchten, muss Ihre App die Media-Elemente stattdessen in dieser Reihenfolge übergeben:

  • Medienelement A mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • Medienelement C mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • Medienelement D mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • Medienelement B mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • Medienelement E mit extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

Zusätzliche Metadatenindikatoren anzeigen

Sie können zusätzliche Metadatenindikatoren einfügen, um auf einen Blick Informationen zu Inhalten in der Media-Browser-Baumstruktur und während der Wiedergabe zu erhalten.

Im Browserbaum werden für Android Auto und AAOS die Extras gelesen, die einem Element zugeordnet sind, und die Indikatoren werden angezeigt. Während der Medienwiedergabe lesen Android Auto und AAOS die Metadaten für die Mediensitzung und suchen nach bestimmten Konstanten, um zu bestimmen, welche Anzeigen angezeigt werden sollen.

Wiedergabeansicht mit Metadaten

Abbildung 3: Wiedergabeansicht mit Metadaten.

Übersicht für nicht abgespielte Inhalte.

Abbildung 4: Übersicht für nicht abgespielte Inhalte.

Diese Konstanten können sowohl in MediaItem-Beschreibungsextras als auch in MediaMetadata-Extras verwendet werden:

  • [EXTRA_DOWNLOAD_STATUS][10]: Gibt den Downloadstatus eines Elements an. Verwenden Sie diese Konstante als Schlüssel. Diese langen Konstanten sind mögliche Werte:

    • [STATUS_DOWNLOADED][11]: Das Element wurde vollständig heruntergeladen.
    • [STATUS_DOWNLOADING][12]: Das Element wird gerade heruntergeladen.
    • [STATUS_NOT_DOWNLOADED][13]: Das Element wird nicht heruntergeladen.
  • [METADATA_KEY_IS_EXPLICIT][14]: Gibt an, dass das Element explizite Inhalte enthält. Verwenden Sie diese Konstante als Schlüssel und den langen [METADATA_VALUE_ATTRIBUTE_PRESENT][15] als Wert, um anzugeben, dass ein Artikel explizit ist.

Diese Konstanten können nur in MediaItem-Beschreibungsextras verwendet werden:

  • [DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS][16]: Gibt den Abschlussstatus von Inhalten im Langformat an, z. B. Podcastfolgen und Hörbücher. Verwenden Sie diese Konstante als Schlüssel. Folgende Ganzzahlkonstanten sind mögliche Werte:

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED][17]: Der Artikel wurde noch nicht wiedergegeben.

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED][18]: Das Element wurde teilweise wiedergegeben und die aktuelle Position befindet sich irgendwo in der Mitte.

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED][19]: Der Artikel ist abgeschlossen.

  • [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]: Gibt den Fortschritt bei der Wiedergabe von Inhalten im Langformat als Double zwischen 0,0 und 1,0 an. Dadurch werden weitere Informationen zum Status PARTIALLY_PLAYING bereitgestellt, sodass Android Auto oder AAOS einen aussagekräftigeren Fortschrittsindikator wie eine Fortschrittsanzeige anzeigen können. Wenn Sie dieses Extra verwenden, finden Sie unter [Fortschrittsanzeige in der Übersichtsansicht während der Wiedergabe von Inhalten aktualisieren][21] Informationen dazu, wie Sie diesen Indikator nach dem ersten Aufruf auf dem neuesten Stand halten.

Wenn Sie Indikatoren anzeigen möchten, die während des Browsens des Media-Browsing-Baums durch den Nutzer angezeigt werden, erstellen Sie ein Extras-Bundle, das eine oder mehrere dieser Konstanten enthält. Übergeben Sie das Bundle dann an die MediaDescription.Builder.setExtras-Methode.

In diesem Snippet wird gezeigt, wie Indikatoren für ein explizites Media-Element angezeigt werden, das zu 70% abgeschlossen ist:

Kotlin

import androidx.media.utils.MediaConstants

val extras = Bundle()
extras.putLong(
    MediaConstants.METADATA_KEY_IS_EXPLICIT,
    MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
extras.putInt(
    MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
    MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED)
extras.putDouble(
    MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.7)
val description =
    MediaDescriptionCompat.Builder()
        .setMediaId(/*...*/)
        .setTitle(resources.getString(/*...*/))
        .setExtras(extras)
        .build()
return MediaBrowserCompat.MediaItem(description, /* flags */)

Java

import androidx.media.utils.MediaConstants;

Bundle extras = new Bundle();
extras.putLong(
    MediaConstants.METADATA_KEY_IS_EXPLICIT,
    MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT);
extras.putInt(
    MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS,
    MediaConstants.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED);
extras.putDouble(
    MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.7);
MediaDescriptionCompat description =
    new MediaDescriptionCompat.Builder()
        .setMediaId(/*...*/)
        .setTitle(resources.getString(/*...*/))
        .setExtras(extras)
        .build();
return new MediaBrowserCompat.MediaItem(description, /* flags */);

Wenn Sie Indikatoren für ein Media-Element anzeigen möchten, das gerade wiedergegeben wird, deklarieren Sie Werte für METADATA_KEY_IS_EXPLICIT oder EXTRA_DOWNLOAD_STATUS im MediaMetadataCompat des mediaSession.

In diesem Code-Snippet wird gezeigt, wie Sie angeben, dass der Song in der Wiedergabeansicht explizit und heruntergeladen ist:

Kotlin

import androidx.media.utils.MediaConstants

mediaSession.setMetadata(
    MediaMetadataCompat.Builder()
        .putString(
            MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, "Song Name")
        .putString(
            MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Artist name")
        .putString(
            MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
            albumArtUri.toString())
        .putLong(
            MediaConstants.METADATA_KEY_IS_EXPLICIT,
            MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
        .putLong(
            MediaDescriptionCompat.EXTRA_DOWNLOAD_STATUS,
            MediaDescriptionCompat.STATUS_DOWNLOADED)
        .build())

Java

import androidx.media.utils.MediaConstants;

mediaSession.setMetadata(
    new MediaMetadataCompat.Builder()
        .putString(
            MediaMetadataCompat.METADATA_KEY_DISPLAY_TITLE, "Song Name")
        .putString(
            MediaMetadataCompat.METADATA_KEY_DISPLAY_SUBTITLE, "Artist name")
        .putString(
            MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
            albumArtUri.toString())
        .putLong(
            MediaConstants.METADATA_KEY_IS_EXPLICIT,
            MediaConstants.METADATA_VALUE_ATTRIBUTE_PRESENT)
        .putLong(
            MediaDescriptionCompat.EXTRA_DOWNLOAD_STATUS,
            MediaDescriptionCompat.STATUS_DOWNLOADED)
        .build());

Fortschrittsanzeige in der Ansicht „Entdecken“ während der Wiedergabe von Inhalten aktualisieren

Mit dem [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]-Extra können Sie in der Ansicht „Durchsuchen“ eine Fortschrittsanzeige für teilweise wiedergegebene Inhalte einblenden. Wenn ein Nutzer jedoch die teilweise wiedergegebenen Inhalte weiter abspielt, wird diese Anzeige mit der Zeit ungenau.

Damit die Fortschrittsanzeige in Android Auto und AAOS auf dem neuesten Stand bleibt, müssen Sie in MediaMetadataCompat und PlaybackStateCompat zusätzliche Informationen angeben, um laufende Inhalte mit Media-Elementen in der Ansicht „Durchsuchen“ zu verknüpfen.

Damit für ein Media-Element automatisch eine Fortschrittsanzeige aktualisiert wird, müssen die folgenden Anforderungen erfüllt sein:

  • Beim Erstellen des MediaItem muss [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] in den Extras mit einem Wert zwischen 0.0 und 1.0 (einschließlich) gesendet werden.

  • Die MediaMetadataCompat muss [METADATA_KEY_MEDIA_ID][22] mit einem Stringwert senden, der der [Media-ID][23] entspricht, die an die MediaItem übergeben wurde.

  • Der PlaybackStateCompat muss ein Extra mit dem Schlüssel [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24] enthalten, der einem Stringwert entspricht, der mit der [Media-ID][23] übereinstimmt, die an MediaItem übergeben wurde.

In diesem Code-Snippet wird gezeigt, wie Sie angeben, dass das wiedergegebene Element mit einem Element in der Ansicht „Durchsuchen“ verknüpft ist:

Kotlin

import androidx.media.utils.MediaConstants

// When the MediaItem is constructed to show in the browse view.
// Suppose the item was 25% complete when the user launched the browse view.
val mediaItemExtras = Bundle()
mediaItemExtras.putDouble(
    MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.25)
val description =
    MediaDescriptionCompat.Builder()
        .setMediaId("my-media-id")
        .setExtras(mediaItemExtras)
        // ...and any other setters.
        .build()
return MediaBrowserCompat.MediaItem(description, /* flags */)

// Elsewhere, when the user has selected MediaItem for playback.
mediaSession.setMetadata(
    MediaMetadataCompat.Builder()
        .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, "my-media-id")
        // ...and any other setters.
        .build())

val playbackStateExtras = Bundle()
playbackStateExtras.putString(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, "my-media-id")
mediaSession.setPlaybackState(
    PlaybackStateCompat.Builder()
        .setExtras(playbackStateExtras)
        // ...and any other setters.
        .build())

Java

import androidx.media.utils.MediaConstants;

// When the MediaItem is constructed to show in the browse view.
// Suppose the item was 25% complete when the user launched the browse view.
Bundle mediaItemExtras = new Bundle();
mediaItemExtras.putDouble(
    MediaConstants.DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, 0.25);
MediaDescriptionCompat description =
    new MediaDescriptionCompat.Builder()
        .setMediaId("my-media-id")
        .setExtras(mediaItemExtras)
        // ...and any other setters.
        .build();
return new MediaBrowserCompat.MediaItem(description, /* flags */);

// Elsewhere, when the user has selected MediaItem for playback.
mediaSession.setMetadata(
    new MediaMetadataCompat.Builder()
        .putString(MediaMetadata.METADATA_KEY_MEDIA_ID, "my-media-id")
        // ...and any other setters.
        .build());

Bundle playbackStateExtras = new Bundle();
playbackStateExtras.putString(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, "my-media-id");
mediaSession.setPlaybackState(
    new PlaybackStateCompat.Builder()
        .setExtras(playbackStateExtras)
        // ...and any other setters.
        .build());
  ```

Auch bei Inhalten, die noch nicht oder vollständig wiedergegeben wurden, kann eine automatisch aktualisierte Fortschrittsanzeige eingeblendet werden. Dies tritt auf, wenn die entsprechenden Media-Elemente das Extra DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE mit dem Wert 0.0 (für nicht abgespielte) oder 1.0 (für vollständig abgespielte) enthalten. Nachdem der Nutzer diese Media-Elemente ausgewählt hat, wird der Fortschrittsbalken in Android Auto und AAOS über anderen Fortschrittsanzeigen eingeblendet.

[1]: /training/cars/media/create-media-browser/content-hierarchy [2]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE() [3]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE() [4]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM() [5]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM() [6]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM() [7]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM() [8]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM() [9]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE() [10]: /reference/android/support/v4/media/MediaDescriptionCompat#EXTRA_DOWNLOAD_STATUS() [11]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_DOWNLOADED() [12]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_DOWNLOADING() [13]: /reference/android/support/v4/media/MediaDescriptionCompat#STATUS_NOT_DOWNLOADED() [14]: /reference/androidx/media/utils/MediaConstants#METADATA_KEY_IS_EXPLICIT() [15]: /reference/androidx/media/utils/MediaConstants#METADATA_VALUE_ATTRIBUTE_PRESENT() [16]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS() [17]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED() [18]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED() [19]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED() [20]: /reference/androidx/media/utils/MediaConstants#DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE() [21]: #browse-progress-bar [22]: /reference/android/support/v4/media/MediaMetadataCompat#METADATA_KEY_MEDIA_ID() [23]: /reference/android/support/v4/media/MediaDescriptionCompat.Builder#setMediaId(java.lang.String) [24]: /reference/androidx/media/utils/MediaConstants#PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID()