İçerik stillerini uygula

[İçerik hiyerarşinizi oluşturmak][1] için göz atılabilir veya oynatılabilir öğeleri kullandıktan sonra bu öğelerin arabada nasıl görüntüleneceğini belirlemek için içerik stilleri uygulayın. Aşağıdaki içerik stillerini kullanın:

Liste öğeleri

Şekil 1. Liste öğelerinde başlıklar ve meta veriler, resimlere göre önceliklidir.

Tablo öğeleri

Şekil 2. Izgara öğelerinde görsellere başlıklar ve meta verilerden daha fazla öncelik verilir.

Varsayılan içerik stillerini ayarlama

Medya öğelerinizin nasıl görüntüleneceğine dair genel varsayılanlar ayarlayabilirsiniz. Bunu yapmak için hizmetinizin [onGetRoot][1] uygulaması tarafından döndürülen BrowserRoot ekstralar paketine belirli sabitler ekleyin ve uygun stili belirlemek için bu sabitleri arayın.

Pakette anahtar olarak kullanılabilecek ekstralar:

  • [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE][2]: Göz atma ağacındaki tüm göz atılabilir öğeler için bir sunu ipucu.

  • [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE][3]: Göz atma ağacındaki tüm oynatılabilir öğeler için bir sunu ipucu.

Bu anahtarlar, öğelerin sunumunu etkilemek için aşağıdaki tam sayı sabit değerleriyle eşlenebilir:

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM][4]: Liste öğeleri olarak sunulan ilgili öğeler.

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM][5]: Izgara öğeleri olarak sunulan ilgili öğeler.

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM][6]: Normal liste öğelerine benzer şekilde "kategori" liste öğeleri olarak sunulan karşılık gelen öğelerdir ancak öğelerin simgelerinin etrafına kenar boşlukları uygulanır. Bu, küçük simgelerin görünümünü iyileştirir. Simgeler, renk tonu uygulanabilir vektör çizimleri olmalıdır. Bu ipucunu yalnızca göz atılabilir öğeler için sağlayın.

  • [DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM][7]: Karşılık gelen öğeler "kategori" ızgara öğeleri olarak sunulur ve normal ızgara öğelerine benzer ancak öğelerin simgelerinin etrafına kenar boşlukları uygulanır. Bu özellik, küçük simgelerin görünümünü iyileştirir. Simgeler, renk tonu uygulanabilen vektör çizimleri olmalıdır. Bu ipucunu yalnızca göz atılabilir öğeler için sağlayın.

Bu kod snippet'inde, göz atılabilir öğeler için varsayılan içerik stilinin ızgara, oynatılabilir öğeler için ise liste olarak nasıl ayarlanacağı gösterilmektedir:

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);
}

Öğe başına içerik stilleri ayarlama

Göz atılabilir medya öğelerinin alt öğeleri ve tüm medya öğeleri için varsayılan içerik stilini geçersiz kılabilirsiniz. Göz atılabilir bir medya öğesinin alt öğeleri için varsayılanı geçersiz kılmak üzere medya öğesinin MediaDescription bölümünde bir ekler paketi oluşturun ve daha önce bahsedilen ipuçlarını ekleyin:

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE, öğenin oynatılabilir alt öğeleri için geçerlidir.

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE, öğenin göz atılabilir alt öğeleri için geçerlidir.

Belirli bir medya öğesinin (alt öğeleri değil) varsayılanını geçersiz kılmak için medya öğesinin MediaDescription bölümünde bir ekler paketi oluşturun. Ardından, [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM][8] anahtarıyla bir ipucu ekleyin. Öğenin sunumunu belirtmek için daha önce açıklanan değerleri kullanın.

Bu kod snippet'inde, kendisi ve alt öğeleri için varsayılan içerik stilini geçersiz kılan, göz atılabilir bir MediaItem öğesinin nasıl oluşturulacağı gösterilmektedir. Kendisini kategori listesi öğesi, göz atılabilir alt öğelerini liste öğeleri ve oynatılabilir alt öğelerini de ızgara öğeleri olarak biçimlendirir.

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);
}

Başlık ipuçlarını kullanarak öğeleri gruplandırma

İlgili medya öğelerini gruplandırmak için öğe başına ipucu kullanın. Bir gruptaki her medya öğesi, MediaDescription içinde bir ekler paketi bildirmelidir. Bu paket, [DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE][9] anahtarıyla eşleme ve aynı dize değerini içermelidir. Bu dize, grubun başlığı için kullanıldığından yerelleştirilmelidir.

Bu kod snippet'inde, Songs alt grup başlığına sahip bir MediaItem öğesinin nasıl oluşturulacağı gösterilmektedir:

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*/);
}

Uygulamanız, birlikte gruplandırmak istediğiniz tüm medya öğelerini bitişik bir blok olarak iletmelidir. Örneğin, "Şarkılar" ve "Albümler" olmak üzere iki grup medya öğesini bu sırayla göstermeyi düşünün. Uygulamanız bu sırayla beş medya öğesi gönderirse Android Auto ve AAOS bunları dört ayrı grup olarak yorumlar:

  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") içeren A medya öğesi
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") içeren B medya öğesi
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") içeren C medya öğesi
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") ile medya öğesi D
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") ile medya öğesi E

Bu durumda şu dört grup oluşur:

  • Medya öğesi A'yı içeren "Şarkılar" adlı 1. grup
  • "Albümler" adlı ve B medya öğesini içeren 2. grup
  • C ve D medya öğelerini içeren "Şarkılar" adlı 3. grup
  • "Albümler" adlı ve medya öğesi E'yi içeren 4. grup

Bu öğeleri iki grupta göstermek için uygulamanız medya öğelerini şu sırayla iletmelidir:

  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") içeren A medya öğesi
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") içeren C medya öğesi
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") ile medya öğesi D
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") içeren B medya öğesi
  • extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums") ile medya öğesi E

Ek meta veri göstergelerini görüntüleme

Medya tarayıcı ağacındaki ve oynatma sırasındaki içeriklerle ilgili bilgileri bir bakışta sunmak için ek meta veri göstergeleri ekleyebilirsiniz.

Göz atma ağacında Android Auto ve AAOS, bir öğeyle ilişkili ekstraları okur ve göstergeleri görüntüler. Medya oynatma sırasında Android Auto ve AAOS, medya oturumunun meta verilerini okur ve hangi göstergelerin görüntüleneceğini belirlemek için belirli sabitleri arar.

Meta verilerle oynatma görünümü

Şekil 3. Meta verilerle oynatma görünümü.

Oynatılmamış içerikler için göz atma görünümü.

Şekil 4. Oynatılmamış içerikler için göz atma görünümü.

Bu sabitler hem MediaItem açıklama ekstralarında hem de MediaMetadata ekstralarda kullanılabilir:

  • [EXTRA_DOWNLOAD_STATUS][10]: Bir öğenin indirme durumunu belirtir. Bu sabiti anahtar olarak kullanın. Bu uzun sabitler olası değerlerdir:

    • [STATUS_DOWNLOADED][11]: Öğe tamamen indirildi.
    • [STATUS_DOWNLOADING][12]: Öğe indiriliyordur.
    • [STATUS_NOT_DOWNLOADED][13]: Öğe indirilmedi.
  • [METADATA_KEY_IS_EXPLICIT][14]: Öğenin uygunsuz içerik barındırdığını gösterir. Bir öğenin uygunsuz olduğunu belirtmek için anahtar olarak bu sabiti, değer olarak ise long [METADATA_VALUE_ATTRIBUTE_PRESENT][15] öğesini kullanın.

Bu sabitler yalnızca MediaItem açıklama metni ek açıklamalarında kullanılabilir:

  • [DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS][16]: Podcast bölümleri ve sesli kitaplar gibi uzun içeriklerin tamamlanma durumunu gösterir. Anahtar olarak bu sabiti kullanın. Bu tam sayı sabitleri olası değerlerdir:

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED][17]: Öğe oynatılmadı.

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED][18]: Öğe kısmen oynatılmış ve geçerli konum ortada bir yerdedir.

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED][19]: Öğe tamamlanmıştır.

  • [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]: Uzun video içeriklerinde tamamlanma ilerleme durumunu 0,0 ile 1,0 arasında (başlangıç ve bitiş değerleri dahil) bir çift sayı olarak gösterir. Bu, PARTIALLY_PLAYING durumu hakkında daha fazla bilgi sağlar. Böylece Android Auto veya AAOS, ilerleme çubuğu gibi daha anlamlı bir ilerleme göstergesi görüntüleyebilir. Bu özelliği kullanıyorsanız ilk gösterimden sonra bu göstergeyi nasıl güncel tutacağınızı öğrenmek için [İçerik oynatılırken göz atma görünümündeki ilerleme çubuğunu güncelleme][21] başlıklı makaleyi inceleyin.

Kullanıcı medya göz atma ağacına göz atarken görünen göstergeleri görüntülemek için bu sabitlerden birini veya daha fazlasını içeren bir ekler paketi oluşturun. Ardından bu paketi MediaDescription.Builder.setExtras yöntemine iletin.

Bu snippet'te, %70'i tamamlanmış bir uygunsuz içerik öğesi için göstergelerin nasıl görüntüleneceği gösterilmektedir:

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 */);

Şu anda oynatılan bir medya öğesi için göstergeleri görüntülemek üzere mediaSession öğenizin MediaMetadataCompat bölümünde METADATA_KEY_IS_EXPLICIT veya EXTRA_DOWNLOAD_STATUS için değerler bildirin.

Bu kod snippet'inde, oynatma görünümündeki şarkının uygunsuz içerikli ve indirilmiş olduğunu belirtme yöntemi gösterilmektedir:

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());

İçerik oynatılırken göz atma görünümündeki ilerleme çubuğunu güncelleme

Göz atma görünümünde kısmen oynatılan içerik için ilerleme çubuğu göstermek üzere [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] ekleyebilirsiniz. Ancak kullanıcı, kısmen oynatılan içeriği oynatmaya devam ederse bu gösterge zamanla yanlış hale gelir.

Android Auto ve AAOS'un ilerleme çubuğunu güncel tutması için MediaMetadataCompat ve PlaybackStateCompat içinde ek bilgiler sağlayarak devam eden içerikleri göz atma görünümündeki medya öğelerine bağlayın.

Bir medya öğesinin otomatik olarak güncellenen ilerleme çubuğuna sahip olması için şu şartların karşılanması gerekir:

  • Oluşturulduğunda MediaItem, ekstralarında 0.0 ile 1.0 arasında (bu değerler dahil) bir değere sahip DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] göndermelidir.

  • MediaMetadataCompat, MediaItem'ye iletilen [medya kimliği][23] ile aynı dize değerine sahip [METADATA_KEY_MEDIA_ID][22] değerini göndermelidir.

  • PlaybackStateCompat, MediaItem'ye iletilen [media ID][23] değerine eşit bir dize değeriyle eşleşen [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24] anahtarına sahip bir ek içermelidir.

Bu kod snippet'inde, oynatılan öğenin göz atma görünümündeki bir öğeye nasıl bağlandığı gösterilmektedir:

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());
  ```

Oynatılmamış veya tamamen oynatılmış içeriklerde bile otomatik olarak güncellenen bir ilerleme çubuğu gösterilebilir. Bu durum, ilgili medya öğeleri DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE ekstrasını 0.0 (oynatılmamış) veya 1.0 (tamamen oynatılmış) değeriyle içeriyorsa ortaya çıkar. Kullanıcı bu medya öğelerini seçtikten sonra Android Auto ve AAOS, ilerleme çubuğunu diğer ilerleme göstergelerinin üzerinde gösterir.

[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()