Po utworzeniu hierarchii treści za pomocą elementów, które można przeglądać lub odtwarzać, aby utworzyć hierarchię treści, zastosuj style treści, aby określić, jak te elementy mają się wyświetlać w samochodzie. Użyj tych stylów treści:
Rysunek 1. Elementy listy traktują tytuły i metadane jako ważniejsze od obrazów.
Rysunek 2. Elementy siatki traktują obrazy jako ważniejsze od tytułów i metadanych.
Ustawianie domyślnych stylów treści
Możesz ustawić globalne wartości domyślne określające sposób wyświetlania elementów multimedialnych. Aby to zrobić,
dodaj konkretne stałe do pakietu dodatków BrowserRoot zwracanego przez Twoją
implementację onGetRoot i wyszukaj te stałe,
aby określić odpowiedni styl.
Te dodatki mogą być używane jako klucze w pakiecie:
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE: wskazówka dotycząca prezentacji wszystkich elementów możliwych do przeglądania w drzewie przeglądania.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE: wskazówka dotycząca prezentacji wszystkich elementów możliwych do odtwarzania w drzewie przeglądania.
Te klucze mogą być mapowane na te wartości stałych całkowitych, aby wpływać na prezentację tych elementów:
DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM: odpowiednie elementy prezentowane jako elementy listy.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM: odpowiednie elementy prezentowane jako elementy siatki.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM: odpowiednie elementy prezentowane jako elementy listy „kategoria”, podobne do zwykłych elementów listy, ale z marginesami wokół ikon elementów. Poprawia to wygląd małych ikon. Ikony muszą być rysunkami wektorowymi, które można kolorować. Ta wskazówka powinna być podawana tylko w przypadku elementów, które można przeglądać.DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM: odpowiednie elementy prezentowane jako elementy siatki „kategoria”, podobne do zwykłych elementów siatki, ale z marginesami wokół ikon elementów. Poprawia to wygląd małych ikon. Ikony muszą być rysunkami wektorowymi, które można kolorować. Ta wskazówka powinna być podawana 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ć, oraz dla dowolnego elementu multimedialnego. Aby zastąpić domyślny styl treści dla 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 odtwarzać.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLEma zastosowanie do elementów podrzędnych, które można przeglądać.
Aby zastąpić domyślny styl treści dla konkretnego elementu multimedialnego (nie jego elementów podrzędnych), utwórz pakiet dodatków w MediaDescription elementu multimedialnego. Następnie dodaj wskazówkę
z kluczem DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM. Aby określić prezentację elementu, użyj tych samych wartości, które zostały opisane wcześniej.
Ten fragment kodu pokazuje, jak utworzyć element MediaItem, który można przeglądać i który zastępuje domyślny styl treści dla siebie i swoich elementów podrzędnych. Element ten jest stylizowany jako element listy kategorii, jego elementy podrzędne, które można przeglądać, jako elementy listy, a jego elementy podrzędne, które 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 MediaDescription. Ten pakiet musi
zawierać mapowanie z kluczem
DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE i identyczną wartością ciągu znaków. Zlokalizuj ten ciąg znaków, ponieważ jest on używany jako tytuł grupy.
Ten fragment kodu pokazuje, jak utworzyć element 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*/);
}
Twoja aplikacja musi przekazywać wszystkie elementy multimedialne, które chcesz pogrupować, jako ciągły blok. Na przykład rozważ wyświetlenie w tej kolejności 2 grup elementów multimedialnych: „Songs” i „Albums”. Jeśli Twoja 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")
Powoduje to utworzenie tych 4 grup:
- Grupa 1 o nazwie „Songs” zawierająca element multimedialny A.
- Grupa 2 o nazwie „Albums” zawierająca element multimedialny B.
- Grupa 3 o nazwie „Songs” zawierająca elementy multimedialne C i D.
- Grupa 4 o nazwie „Albums” zawierająca element multimedialny E.
Aby wyświetlić te elementy w 2 grupach, Twoja aplikacja musi przekazać 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 dodać dodatkowe wskaźniki metadanych, aby zapewnić szybki dostęp do informacji o treściach 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 szukają konkretnych stałych, aby określić, które wskaźniki mają się wyświetlać.
Rysunek 3. Widok odtwarzania z metadanymi.
Rysunek 4. Widok przeglądania treści nieodtwarzanych.
Te stałe mogą być używane zarówno w dodatkach do opisu MediaItem, jak i w dodatkach MediaMetadata:
EXTRA_DOWNLOAD_STATUS: wskazuje stan pobierania elementu. Użyj tej stałej jako klucza. Możliwe wartości to te stałe typu long:STATUS_DOWNLOADED: element został w pełni pobrany.STATUS_DOWNLOADING: element jest w trakcie pobierania.STATUS_NOT_DOWNLOADED: element nie został pobrany.
METADATA_KEY_IS_EXPLICIT: wskazuje, że element zawiera treści dla dorosłych. Aby wskazać, że element zawiera treści dla dorosłych, użyj tej stałej jako klucza i tej długiejMETADATA_VALUE_ATTRIBUTE_PRESENTjako wartości.
Te stałe mogą być używane tylko w dodatkach do opisu MediaItem:
DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS: 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 to te stałe typu integer:DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED: element nie został odtworzony.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED: element został częściowo odtworzony, a bieżąca pozycja znajduje się gdzieś pośrodku.DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED: element został ukończony.
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE: wskazuje postęp ukończenia treści długich jako wartość typu double z zakresu od 0,0 do 1,0 włącznie. Dostarcza to więcej informacji o staniePARTIALLY_PLAYING, co pozwala Androidowi Auto lub AAOS wyświetlać bardziej znaczący wskaźnik postępu, np. pasek postępu. Jeśli używasz tego dodatku, przeczytaj artykuł Aktualizowanie paska postępu w widoku przeglądania podczas odtwarzania treści aby dowiedzieć się, jak aktualizować ten wskaźnik po pierwszym wyświetleniu.
Aby wyświetlać wskaźniki, które pojawiają się, gdy użytkownik przegląda drzewo przeglądarki multimediów, utwórz pakiet dodatków zawierający co najmniej jedną z tych stałych.
Następnie przekaż ten pakiet do metody MediaDescription.Builder.setExtras.
Ten fragment kodu pokazuje, jak wyświetlać wskaźniki dla elementu multimedialnego zawierającego treści dla dorosłych, który został ukończony 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 mediaSession's MediaMetadataCompat.
Ten fragment kodu pokazuje, jak wskazać, że utwór w widoku odtwarzania zawiera treści dla dorosłych i został 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
Jak wspomnieliśmy wcześniej, możesz użyć dodatku
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE, aby wyświetlać 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 Android Auto i AAOS aktualizowały pasek postępu, podaj dodatkowe informacje w MediaMetadataCompat i PlaybackStateCompat, aby połączyć odtwarzane treści z elementami multimedialnymi w widoku przeglądania.
Aby element multimedialny miał automatycznie aktualizowany pasek postępu, muszą być spełnione te wymagania:
Podczas tworzenia element
MediaItemmusi wysyłaćDESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGEw swoich dodatkach z wartością z zakresu od0.0do1.0włącznie.MediaMetadataCompatmusi wysyłaćMETADATA_KEY_MEDIA_IDz wartością ciągu znaków równą identyfikatorowi multimediów przekazanemu doMediaItem.PlaybackStateCompatmusi zawierać dodatek z kluczemPLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID, który jest mapowany na wartość ciągu znaków równą identyfikatorowi multimediów 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());
P Automatycznie aktualizowany pasek postępu może być wyświetlany nawet w przypadku treści nieodtwarzanych lub w pełni odtworzonych. Dzieje się tak, jeśli odpowiednie elementy multimedialne zawierają dodatek DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE z wartością 0.0 (w przypadku treści nieodtwarzanych) lub 1.0 (w przypadku treści w pełni odtworzonych). Gdy użytkownik wybierze te elementy multimedialne, Android Auto i AAOS wyświetlą pasek postępu nad innymi wskaźnikami postępu.