ใช้รูปแบบเนื้อหา

หลังจากใช้รายการที่เรียกดูหรือเล่นได้เพื่อสร้างลำดับชั้นของเนื้อหา ให้ใช้รูปแบบเนื้อหาเพื่อกำหนดวิธีแสดงรายการเหล่านั้นในรถ ใช้รูปแบบเนื้อหาต่อไปนี้

รายการข้อมูล

รูปที่ 1 รายการจะจัดลำดับความสำคัญของชื่อและข้อมูลเมตาเหนือรูปภาพ

รายการตารางกริด

รูปที่ 2 รายการในตารางกริดจะจัดลำดับความสำคัญของรูปภาพเหนือชื่อและข้อมูลเมตา

ตั้งค่ารูปแบบเนื้อหาเริ่มต้น

คุณตั้งค่าเริ่มต้นส่วนกลางสำหรับวิธีแสดงรายการสื่อได้ โดยทำได้โดย รวมค่าคงที่ที่เฉพาะเจาะจงไว้ในBrowserRootกลุ่มข้อมูลพิเศษที่บริการของคุณส่งคืน ในการติดตั้งใช้งาน onGetRoot และมองหาค่าคงที่เหล่านี้ เพื่อกำหนดรูปแบบที่เหมาะสม

โดยคุณใช้รายการพิเศษต่อไปนี้เป็นคีย์ในแพ็กเกจได้

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE: คำแนะนำในการนำเสนอ สำหรับรายการที่เรียกดูได้ทั้งหมดในโครงสร้างการเรียกดู

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE: คำแนะนำในการนำเสนอ สำหรับรายการทั้งหมดที่เล่นได้ในโครงสร้างการเรียกดู

คีย์เหล่านี้สามารถแมปกับค่าคงที่จำนวนเต็มต่อไปนี้เพื่อส่งผลต่อ การนำเสนอรายการเหล่านั้น

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_LIST_ITEM: รายการที่เกี่ยวข้อง แสดงเป็นรายการ

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_GRID_ITEM: รายการที่เกี่ยวข้อง แสดงเป็นรายการตารางกริด

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_LIST_ITEM: รายการที่เกี่ยวข้องจะแสดงเป็นรายการ "หมวดหมู่" คล้ายกับรายการ ทั่วไป แต่จะใช้ระยะขอบรอบๆ ไอคอนของรายการ ซึ่งจะช่วยปรับปรุง ลักษณะที่ปรากฏของไอคอนขนาดเล็ก ไอคอนต้องเป็นภาพวาดเวกเตอร์ที่ปรับสีได้ คาดว่า คำแนะนำนี้จะมีไว้สำหรับรายการที่เรียกดูได้เท่านั้น

  • DESCRIPTION_EXTRAS_VALUE_CONTENT_STYLE_CATEGORY_GRID_ITEM: รายการที่เกี่ยวข้องจะแสดงเป็นรายการตาราง "หมวดหมู่" และคล้ายกับ รายการตารางทั่วไป แต่จะมีการใช้ระยะขอบรอบๆ ไอคอนของรายการ ซึ่งจะ ปรับปรุงลักษณะที่ปรากฏของไอคอนขนาดเล็ก ไอคอนต้องเป็นภาพวาดแบบเวกเตอร์ที่เปลี่ยนสีได้ ระบบคาดหวังให้ระบุคำใบ้นี้สำหรับรายการที่เรียกดูได้เท่านั้น

ข้อมูลโค้ดนี้แสดงวิธีตั้งค่ารูปแบบเนื้อหาเริ่มต้นสำหรับรายการที่เรียกดูได้เป็นตารางกริด และรายการที่เล่นได้เป็นรายการ

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

ตั้งค่ารูปแบบเนื้อหาต่อรายการ

คุณสามารถลบล้างรูปแบบเนื้อหาเริ่มต้นสำหรับรายการสื่อที่เรียกดูได้ รวมถึงสำหรับรายการสื่อใดก็ได้ หากต้องการลบล้างค่าเริ่มต้นสำหรับลูกหลานของ รายการสื่อที่เรียกดูได้ ให้สร้างชุดข้อมูลเพิ่มเติมใน MediaDescription ของรายการสื่อ แล้วเพิ่มคำแนะนำเดียวกันกับที่กล่าวถึงก่อนหน้านี้

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_PLAYABLE จะมีผลกับรายการที่สืบทอดมาซึ่งเล่นได้ของรายการนั้น

  • DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_BROWSABLE มีผลกับรายการที่สืบทอดมาซึ่งเรียกดูได้ของรายการนั้น

หากต้องการลบล้างค่าเริ่มต้นสำหรับรายการสื่อที่เฉพาะเจาะจง (ไม่ใช่รายการที่สืบทอดมา) ให้สร้าง แพ็กเกจเนื้อหาพิเศษใน MediaDescription ของรายการสื่อ จากนั้นเพิ่มคำใบ้ ด้วยคีย์ DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_SINGLE_ITEM ใช้ ค่าเดียวกันกับที่อธิบายไว้ก่อนหน้านี้เพื่อระบุการนำเสนอของสินค้า

ข้อมูลโค้ดนี้แสดงวิธีสร้าง MediaItem ที่เรียกใช้แทน รูปแบบเนื้อหาเริ่มต้นสำหรับตัวมันเองและองค์ประกอบย่อย โดยจะกำหนดสไตล์ให้ตัวเองเป็น รายการในรายการหมวดหมู่ ลูกหลานที่เรียกดูได้เป็นรายการในลิสต์ และลูกหลานที่เล่นได้เป็นรายการในตารางกริด

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

จัดกลุ่มรายการโดยใช้คำแนะนำชื่อ

หากต้องการจัดกลุ่มรายการสื่อที่เกี่ยวข้อง ให้ใช้คำแนะนำต่อรายการ รายการสื่อทุกรายการในกลุ่ม ต้องประกาศแพ็กเกจเนื้อหาพิเศษใน MediaDescription โดยชุดนี้ต้องมีการแมปที่มีคีย์ DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE และค่าสตริงที่เหมือนกัน แปลสตริงนี้เนื่องจากใช้สำหรับชื่อของกลุ่ม

ข้อมูลโค้ดนี้แสดงวิธีสร้าง MediaItem ที่มีส่วนหัวของกลุ่มย่อยเป็น 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*/);
}

แอปของคุณต้องส่งรายการสื่อทั้งหมดที่ต้องการจัดกลุ่มไว้ด้วยกันเป็นบล็อกที่ต่อเนื่องกัน ตัวอย่างเช่น ลองพิจารณาการแสดงรายการสื่อ 2 กลุ่ม ได้แก่ "เพลง" และ "อัลบั้ม" ตามลำดับ หากแอปส่งรายการสื่อ 5 รายการตามลำดับนี้ Android Auto และ AAOS จะตีความรายการเหล่านั้นเป็น 4 กลุ่มแยกกัน ดังนี้

  • รายการสื่อ A ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • รายการสื่อ B ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • รายการสื่อ C ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • รายการสื่อ D ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • รายการสื่อ E ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

ซึ่งจะทำให้เกิดกลุ่ม 4 กลุ่มต่อไปนี้

  • กลุ่ม 1 ชื่อ "เพลง" ซึ่งมีรายการสื่อ ก
  • กลุ่ม 2 ชื่อ "อัลบั้ม" ซึ่งมีรายการสื่อ B
  • กลุ่ม 3 ชื่อ "เพลง" ซึ่งมีรายการสื่อ C และ D
  • กลุ่ม 4 ชื่อ "อัลบั้ม" ซึ่งมีรายการสื่อ E

หากต้องการแสดงรายการเหล่านี้ใน 2 กลุ่ม แอปจะต้องส่งรายการสื่อ ตามลำดับต่อไปนี้แทน

  • รายการสื่อ A ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • รายการสื่อ C ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • รายการสื่อ D ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs")
  • รายการสื่อ B ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")
  • รายการสื่อ E ที่มี extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Albums")

แสดงตัวบ่งชี้ข้อมูลเมตาเพิ่มเติม

คุณสามารถรวมตัวบ่งชี้ข้อมูลเมตาเพิ่มเติมเพื่อให้ข้อมูลโดยย่อ สำหรับเนื้อหาในโครงสร้างเบราว์เซอร์สื่อและระหว่างการเล่น

ในโครงสร้างการเรียกดู Android Auto และ AAOS จะอ่านข้อมูลเพิ่มเติมที่เชื่อมโยงกับ รายการและแสดงตัวบ่งชี้ ในระหว่างการเล่นสื่อ Android Auto และ AAOS จะอ่านข้อมูลเมตาสำหรับเซสชันสื่อและค้นหาค่าคงที่ที่เฉพาะเจาะจงเพื่อ พิจารณาว่าจะแสดงตัวบ่งชี้ใด

มุมมองการเล่นพร้อมข้อมูลเมตา

รูปที่ 3 มุมมองการเล่นพร้อมข้อมูลเมตา

มุมมองการเรียกดูสำหรับเนื้อหาที่ยังไม่ได้เล่น

รูปที่ 4 มุมมองการเรียกดูสำหรับเนื้อหาที่ยังไม่ได้เล่น

ค่าคงที่เหล่านี้ใช้ได้ทั้งส่วนขยายMediaItemคำอธิบายและส่วนขยายMediaMetadata

  • EXTRA_DOWNLOAD_STATUS: แสดงสถานะการดาวน์โหลดของรายการ ใช้ค่าคงที่นี้เป็นคีย์ ค่าที่เป็นไปได้ของค่าคงที่แบบยาวเหล่านี้มีดังนี้

    • STATUS_DOWNLOADED: ดาวน์โหลดรายการเสร็จสมบูรณ์แล้ว
    • STATUS_DOWNLOADING: กำลังดาวน์โหลดรายการ
    • STATUS_NOT_DOWNLOADED: ดาวน์โหลดรายการไม่ได้
  • METADATA_KEY_IS_EXPLICIT: บ่งชี้ว่ารายการมีเนื้อหาโจ่งแจ้ง หากต้องการระบุว่ารายการเป็นเนื้อหาโจ่งแจ้ง ให้ใช้ค่าคงที่นี้เป็นคีย์และ long METADATA_VALUE_ATTRIBUTE_PRESENT เป็นค่า

ค่าคงที่เหล่านี้ใช้ได้เท่านั้นในข้อความเสริมของMediaItem

หากต้องการแสดงตัวบ่งชี้ที่ปรากฏขณะที่ผู้ใช้กำลังเรียกดูทรีการเรียกดูสื่อ ให้สร้างชุดข้อมูลเพิ่มเติมที่มีค่าคงที่เหล่านี้อย่างน้อย 1 รายการ จากนั้นส่งชุดดังกล่าวไปยังเมธอด MediaDescription.Builder.setExtras

ข้อมูลโค้ดนี้แสดงวิธีแสดงตัวบ่งชี้สำหรับรายการสื่อโจ่งแจ้งที่เล่นไปแล้ว 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 */);

หากต้องการแสดงตัวบ่งชี้สำหรับรายการสื่อที่กำลังเล่น ให้ประกาศค่าสำหรับ METADATA_KEY_IS_EXPLICIT หรือ EXTRA_DOWNLOAD_STATUS ใน mediaSession ของ MediaMetadataCompat

ข้อมูลโค้ดนี้แสดงวิธีระบุว่าเพลงในมุมมองการเล่นเป็นเพลงที่มีเนื้อหาไม่เหมาะสมและดาวน์โหลดแล้ว

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

อัปเดตแถบความคืบหน้าในมุมมองการเรียกดูขณะเล่นเนื้อหา

ดังที่ได้กล่าวไว้ก่อนหน้านี้ คุณสามารถใช้ DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE เพิ่มเติมเพื่อแสดงแถบความคืบหน้า สำหรับเนื้อหาที่เล่นบางส่วนในมุมมองการเรียกดู อย่างไรก็ตาม หากผู้ใช้ เล่นเนื้อหาที่เล่นไปบางส่วนต่อ ตัวบ่งชี้ดังกล่าวจะ ไม่ถูกต้องเมื่อเวลาผ่านไป

เพื่อให้ Android Auto และ AAOS อัปเดตแถบความคืบหน้าอยู่เสมอ ให้ระบุข้อมูลเพิ่มเติมใน MediaMetadataCompat และ PlaybackStateCompat เพื่อลิงก์เนื้อหาที่กำลังเล่นกับรายการสื่อในมุมมองการเรียกดู

หากต้องการให้รายการสื่อมีแถบความคืบหน้าที่อัปเดตโดยอัตโนมัติ รายการสื่อนั้นต้องเป็นไปตามข้อกำหนดต่อไปนี้

ข้อมูลโค้ดนี้แสดงวิธีระบุว่ารายการที่กำลังเล่นลิงก์กับรายการในมุมมองการเรียกดู

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

แม้ว่าเนื้อหาจะยังไม่ได้เล่นหรือเล่นจนจบแล้ว แถบความคืบหน้าก็จะแสดงและอัปเดตโดยอัตโนมัติ กรณีนี้จะเกิดขึ้นหากรายการสื่อที่เกี่ยวข้องมีDESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGEเนื้อหาพิเศษที่มีค่าเป็น 0.0 (สำหรับเนื้อหาที่ยังไม่ได้เล่น) หรือ 1.0 (สำหรับเนื้อหาที่เล่นจนจบ) หลังจากผู้ใช้เลือกรายการสื่อเหล่านี้แล้ว Android Auto และ AAOS จะแสดงแถบความคืบหน้าเหนือตัวบ่งชี้ความคืบหน้าอื่นๆ