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

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

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

รูปที่ 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 ชื่อ "เพลง" ซึ่งมีรายการสื่อ A
  • กลุ่ม 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: ระบุว่ารายการมีเนื้อหาที่ไม่เหมาะสม หากต้องการระบุว่ารายการมีเนื้อหาที่ไม่เหมาะสม ให้ใช้ค่าคงที่นี้เป็นคีย์และค่าที่ ยาว 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 ใน MediaMetadataCompat ของ mediaSession

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

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 เพื่อลิงก์เนื้อหาที่กำลังเล่นกับรายการสื่อในมุมมองการเลือกดู

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

  • เมื่อสร้าง MediaItem ต้องส่ง DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE ในข้อมูลเพิ่มเติมที่มี ค่าระหว่าง 0.0 ถึง 1.0 (รวมค่าดังกล่าว)

  • MediaMetadataCompat ต้องส่ง METADATA_KEY_MEDIA_ID ที่มี ค่าสตริงเท่ากับ รหัสสื่อ ที่ส่งไปยัง MediaItem

  • PlaybackStateCompat ต้องมีข้อมูลเพิ่มเติมที่มีคีย์ PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID ซึ่งแมปกับค่าสตริง ที่เท่ากับรหัสสื่อที่ส่งไปยัง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 จะแสดงแถบความคืบหน้าเหนือตัวบ่งชี้ความคืบหน้าอื่นๆ