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

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

รายการในลิสต์

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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][8] ใช้ค่าเดียวกันกับที่อธิบายไว้ก่อนหน้านี้เพื่อระบุการนำเสนอของสินค้า

ข้อมูลโค้ดนี้แสดงวิธีสร้าง 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][9] และค่าสตริงที่เหมือนกัน แปลสตริงนี้เนื่องจากใช้สำหรับชื่อของกลุ่ม

ข้อมูลโค้ดนี้แสดงวิธีสร้าง 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 กลุ่มแยกกัน ดังนี้

  • รายการสื่อ ก. ที่มี 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 กลุ่ม แอปจะต้องส่งรายการสื่อ ตามลำดับต่อไปนี้แทน

  • รายการสื่อ ก. ที่มี 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][10]: แสดงสถานะการดาวน์โหลดของรายการ ใช้ค่าคงที่นี้เป็นคีย์ ค่าที่เป็นไปได้ของค่าคงที่แบบยาวเหล่านี้มีดังนี้

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

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

  • [DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS][16]: แสดงสถานะ ของเนื้อหาแบบยาว เช่น พอดแคสต์ตอนต่างๆ และหนังสือเสียง ใช้ค่าคงที่นี้ เป็นคีย์ ค่าคงที่จำนวนเต็มเหล่านี้เป็นค่าที่เป็นไปได้

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED][17]: ยังไม่ได้ เล่นรายการ

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED][18]: มีการเล่นรายการบางส่วน และตำแหน่งปัจจุบันอยู่ตรงกลาง

    • [DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED][19]: รายการเสร็จสมบูรณ์แล้ว

  • [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20]: ระบุความคืบหน้าในการดูเนื้อหาแบบยาวเป็นค่าทศนิยมระหว่าง 0.0 ถึง 1.0 (รวมค่าแรกและค่าสุดท้าย) ซึ่งจะให้ข้อมูลเพิ่มเติมเกี่ยวกับสถานะ PARTIALLY_PLAYING เพื่อให้ Android Auto หรือ AAOS แสดงตัวบ่งชี้ความคืบหน้าที่มีความหมายมากขึ้น เช่น แถบความคืบหน้า หากคุณใช้ส่วนเสริมนี้ โปรดดู [อัปเดตแถบความคืบหน้าในมุมมองการเรียกดูขณะเล่นเนื้อหา][21] เพื่อดูวิธีอัปเดตตัวบ่งชี้นี้ หลังจากแสดงผลครั้งแรก

หากต้องการแสดงตัวบ่งชี้ที่ปรากฏขณะที่ผู้ใช้กำลังเรียกดูทรีการเรียกดูสื่อ ให้สร้างแพ็กเกจส่วนเสริมที่มีค่าคงที่เหล่านี้อย่างน้อย 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][20] extra เพื่อแสดงแถบความคืบหน้าสำหรับเนื้อหาที่เล่นไปบางส่วนในมุมมองการเรียกดูได้ อย่างไรก็ตาม หากผู้ใช้เล่นเนื้อหาที่เล่นไปบางส่วนต่อ ตัวบ่งชี้ดังกล่าวจะคลาดเคลื่อนเมื่อเวลาผ่านไป

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

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

  • เมื่อสร้างแล้ว MediaItem ต้องส่ง [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] ในส่วนพิเศษโดยมีค่าอยู่ระหว่าง 0.0 ถึง 1.0 (รวม)

  • MediaMetadataCompat ต้องส่ง [METADATA_KEY_MEDIA_ID][22] ที่มีค่าสตริงเท่ากับ [media ID][23] ที่ส่งไปยัง MediaItem

  • PlaybackStateCompat ต้องมีส่วนเสริมที่มีคีย์ [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24] ซึ่งแมปกับค่าสตริง ที่เท่ากับ [media ID][23] ที่ส่งไปยัง MediaItem

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

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 จะแสดงแถบความคืบหน้าเหนือตัวบ่งชี้ความคืบหน้าอื่นๆ

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