Po użyciu elementów, które można przeglądać lub odtwarzać, do [utworzenia hierarchii treści][1] zastosuj style treści, aby określić, jak te elementy mają być wyświetlane w samochodzie. Użyj tych stylów treści:
Rysunek 1. W przypadku elementów listy priorytetem są tytuły i metadane, a nie obrazy.
Rysunek 2. Elementy siatki traktują obrazy priorytetowo w stosunku do tytułów i metadanych.
Ustawianie domyślnych stylów treści
Możesz ustawić globalne wartości domyślne wyświetlania komponentów. Aby to zrobić, uwzględnij konkretne stałe w pakiecie dodatków BrowserRoot zwracanym przez implementację [onGetRoot][1] usługi i wyszukaj te stałe, aby określić odpowiedni styl.
Jako klucze w pakiecie można używać tych dodatków:
[
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE][2]: wskazówka dotycząca prezentacji dla wszystkich możliwych do przeglądania elementów w drzewie przeglądania.[
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE][3]: wskazówka dotycząca prezentacji wszystkich interaktywnych elementów w drzewie przeglądania.
Te klucze mogą być mapowane na te stałe wartości całkowite, aby wpływać na prezentację tych elementów:
[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM][4]: powiązane elementy wyświetlane jako pozycje listy.[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM][5]: powiązane produkty wyświetlane jako elementy siatki.[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM][6]: Odpowiednie elementy są prezentowane jako elementy listy „kategoria”, podobnie jak zwykłe elementy listy, ale wokół ikon elementów są stosowane marginesy. Poprawia to wygląd małych ikon. Ikony muszą być rysunkami wektorowymi, które można kolorować. Podaj tę wskazówkę tylko w przypadku elementów, które można przeglądać.[
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM][7]: Odpowiednie elementy są prezentowane jako elementy siatki „kategoria” i są podobne do zwykłych elementów siatki, ale wokół ikon elementów są stosowane marginesy. Poprawia to wygląd małych ikon. Ikony muszą być rysunkami wektorowymi, które można kolorować. Podaj tę wskazówkę tylko w przypadku elementów, które można przeglądać.
Ten fragment kodu pokazuje, jak ustawić domyślny styl treści dla elementów, które można przeglądać, na siatki, a dla elementów, które można odtwarzać, na listy:
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);
}
Ustawianie stylów treści dla poszczególnych elementów
Możesz zastąpić domyślny styl treści dla wszystkich elementów podrzędnych dowolnego elementu multimedialnego, który można przeglądać, a także dla dowolnego elementu multimedialnego. Aby zastąpić domyślne ustawienia elementów podrzędnych elementu multimedialnego, który można przeglądać, utwórz pakiet dodatków w MediaDescription elementu multimedialnego i dodaj te same wskazówki, o których wspomnieliśmy wcześniej:
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLEma zastosowanie do elementów podrzędnych, które można odtworzyć.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLEma zastosowanie do elementów podrzędnych, które można przeglądać.
Aby zastąpić wartość domyślną w przypadku konkretnego elementu multimedialnego (nie jego elementów podrzędnych), utwórz pakiet dodatków w MediaDescription elementu multimedialnego. Następnie dodaj podpowiedź z kluczem [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM][8]. Użyj tych samych wartości, które zostały opisane wcześniej, aby określić sposób prezentacji produktu.
Ten fragment kodu pokazuje, jak utworzyć element MediaItem, który zastępuje domyślny styl treści dla siebie i swoich elementów podrzędnych. Jest stylizowany jako element listy kategorii, jego potomkowie, których można przeglądać, jako elementy listy, a potomkowie, których można odtwarzać, jako elementy siatki.
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);
}
Grupowanie elementów za pomocą wskazówek dotyczących tytułu
Aby pogrupować powiązane elementy multimedialne, użyj wskazówki dotyczącej poszczególnych elementów. Każdy element multimedialny w grupie musi deklarować pakiet dodatków w swoim polu MediaDescription. Ten pakiet musi zawierać mapowanie z kluczem [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE][9] i identyczną wartością ciągu znaków. Przetłumacz ten ciąg znaków, ponieważ jest on używany jako tytuł grupy.
Ten fragment kodu pokazuje, jak utworzyć MediaItem z nagłówkiem podgrupy Songs:
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*/);
}
Aplikacja musi przekazywać wszystkie elementy multimedialne, które chcesz zgrupować, jako ciągły blok. Na przykład możesz wyświetlać 2 grupy elementów multimedialnych: „Utwory” i „Albumy” w tej kolejności. Jeśli aplikacja przekaże 5 elementów multimedialnych w tej kolejności, Android Auto i AAOS zinterpretują je jako 4 osobne grupy:
- Element multimedialny A z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - Element multimedialny B z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") - Element multimedialny C z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - Element multimedialny D z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - Element multimedialny E z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
W rezultacie powstają te 4 grupy:
- Grupa 1 o nazwie „Utwory” zawierająca element multimedialny A
- Grupa 2 o nazwie „Albumy” zawierająca element multimedialny B
- Grupa 3 o nazwie „Utwory” zawierająca elementy multimedialne C i D
- Grupa 4 o nazwie „Albumy” zawierająca element multimedialny E
Aby wyświetlić te elementy w 2 grupach, aplikacja musi przekazywać elementy multimedialne w tej kolejności:
- Element multimedialny A z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - Element multimedialny C z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - Element multimedialny D z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - Element multimedialny B z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") - Element multimedialny E z
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
Wyświetlanie dodatkowych wskaźników metadanych
Możesz dołączyć dodatkowe wskaźniki metadanych, aby zapewnić szybki dostęp do informacji o treści w drzewie przeglądarki multimediów i podczas odtwarzania.
W drzewie przeglądania Android Auto i AAOS odczytują dodatki powiązane z elementem i wyświetlają wskaźniki. Podczas odtwarzania multimediów Android Auto i AAOS odczytują metadane sesji multimedialnej i wyszukują określone stałe, aby określić, które wskaźniki mają być wyświetlane.
Rysunek 3. Widok odtwarzania z metadanymi.
Rysunek 4. Widok przeglądania nieodtwarzanych treści.
Te stałe mogą być używane zarówno w MediaItemrozszerzeniach z opisem, jak i w MediaMetadatarozszerzeniach:
[
EXTRA_DOWNLOAD_STATUS][10]: wskazuje stan pobierania produktu. Użyj tej stałej jako klucza. Te długie stałe to możliwe wartości:- [
STATUS_DOWNLOADED][11]: element został w pełni pobrany. - [
STATUS_DOWNLOADING][12]: element jest pobierany. - [
STATUS_NOT_DOWNLOADED][13]: Element nie został pobrany.
- [
[
METADATA_KEY_IS_EXPLICIT][14]: oznacza, że element zawiera treści dla pełnoletnich. Aby wskazać, że produkt jest przeznaczony dla dorosłych, użyj tej stałej jako klucza, a długiego [METADATA_VALUE_ATTRIBUTE_PRESENT][15] jako wartości.
Te stałe mogą być używane tylko w rozszerzeniach z tekstem reklamy MediaItem:
[
DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS][16]: wskazuje stan ukończenia treści długich, takich jak odcinki podcastów i audiobooki. Użyj tej stałej jako klucza. Możliwe wartości tych stałych całkowitych:[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED][17]: element nie został odtworzony.[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED][18]: element jest odtwarzany częściowo, a bieżąca pozycja znajduje się gdzieś pośrodku.[
DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED][19]: Element został ukończony.
[
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]: wskazuje postęp ukończenia długich treści jako liczbę zmiennoprzecinkową z zakresu od 0,0 do 1,0 włącznie. Dostarcza to więcej informacji o staniePARTIALLY_PLAYING, co umożliwia Androidowi Auto lub AAOS wyświetlanie bardziej przydatnego wskaźnika postępu, np. paska postępu. Jeśli używasz tego dodatku, zapoznaj się z artykułem [Update the progress bar in browse view while content plays][21], aby dowiedzieć się, jak aktualizować ten wskaźnik po pierwszym wyświetleniu.
Aby wyświetlać wskaźniki, które pojawiają się podczas przeglądania drzewa multimediów, utwórz pakiet dodatków zawierający co najmniej jedną z tych stałych.
Następnie przekaż pakiet do metody MediaDescription.Builder.setExtras.
Ten fragment kodu pokazuje, jak wyświetlać wskaźniki dla treści dla dorosłych, które są ukończone w 70%:
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 */);
Aby wyświetlać wskaźniki dla aktualnie odtwarzanego elementu multimedialnego, zadeklaruj wartości dla METADATA_KEY_IS_EXPLICIT lub EXTRA_DOWNLOAD_STATUS w MediaMetadataCompat mediaSession.
Ten fragment kodu pokazuje, jak wskazać, że utwór w widoku odtwarzania jest przeznaczony dla osób pełnoletnich i pobrany:
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());
Aktualizowanie paska postępu w widoku przeglądania podczas odtwarzania treści
Możesz użyć parametru [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] extra, aby wyświetlić pasek postępu dla częściowo odtworzonych treści w widoku przeglądania.
Jeśli jednak użytkownik będzie nadal odtwarzać częściowo odtworzone treści, wskaźnik ten z czasem stanie się niedokładny.
Aby pasek postępu w Androidzie Auto i AAOS był aktualny, podaj dodatkowe informacje w elementach MediaMetadataCompat i PlaybackStateCompat, aby połączyć trwające treści z elementami multimedialnymi w widoku przeglądania.
Aby element multimedialny miał automatycznie aktualizowany pasek postępu, muszą być spełnione te wymagania:
Po utworzeniu
MediaItemmusi wysłać [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] w swoich dodatkowych informacjach z wartością z zakresu od0.0do1.0(włącznie).MediaMetadataCompatmusi wysyłać [METADATA_KEY_MEDIA_ID][22] z wartością ciągu znaków równą [identyfikatorowi multimediów][23] przekazywanemu doMediaItem.PlaybackStateCompatmusi zawierać dodatkowy element z kluczem [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24], który jest mapowany na wartość ciągu znaków równą [identyfikatorowi multimediów][23] przekazanemu doMediaItem.
Ten fragment kodu pokazuje, jak wskazać, że odtwarzany element jest połączony z elementem w widoku przeglądania:
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());
```
Nawet w przypadku nieodtwarzanych lub w pełni odtworzonych treści może się wyświetlać automatycznie aktualizowany pasek postępu. Dzieje się tak, jeśli odpowiednie elementy multimedialne zawierają atrybut DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE extra o wartości 0.0 (w przypadku nieodtwarzanych) lub 1.0 (w przypadku w pełni odtworzonych). Gdy użytkownik wybierze te multimedia, Android Auto i AAOS wyświetlą pasek postępu nad innymi wskaźnikami postępu.
[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()