หลังจากใช้รายการที่เลือกดูหรือเล่นได้เพื่อ สร้างลำดับชั้นของเนื้อหา, ให้ใช้รูปแบบเนื้อหาเพื่อกำหนดวิธีแสดงรายการเหล่านั้นในรถ โดยรูปแบบเนื้อหาที่ใช้ได้มีดังนี้
รูปที่ 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 เท่านั้น
DESCRIPTION_EXTRAS_KEY_COMPLETION_STATUS: ระบุสถานะการเล่นเนื้อหารูปแบบยาว เช่น ตอนของพอดแคสต์และหนังสือเสียง ใช้ค่าคงที่นี้เป็นคีย์ ค่าคงที่จำนวนเต็มต่อไปนี้เป็นค่าที่เป็นไปได้DESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_NOT_PLAYED: ยังไม่ได้เล่นรายการDESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_PARTIALLY_PLAYED: เล่นรายการไปบางส่วน และตำแหน่งปัจจุบันอยู่ตรงกลางDESCRIPTION_EXTRAS_VALUE_COMPLETION_STATUS_FULLY_PLAYED: เล่นรายการจบแล้ว
DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE: ระบุความคืบหน้าในการเล่นเนื้อหารูปแบบยาวเป็นค่าทศนิยมระหว่าง 0.0 ถึง 1.0 (รวมค่าดังกล่าว) ซึ่งจะให้ข้อมูลเพิ่มเติมเกี่ยวกับสถานะPARTIALLY_PLAYINGทำให้ Android Auto หรือ AAOS แสดงตัวบ่งชี้ความคืบหน้าที่สื่อความหมายมากขึ้น เช่น แถบความคืบหน้า หากใช้ข้อมูลเพิ่มเติมนี้ โปรดดูอัปเดตแถบความคืบหน้าในมุมมองการเลือกดู ขณะเล่นเนื้อหาเพื่อดูวิธีอัปเดตตัวบ่งชี้นี้ให้เป็นปัจจุบัน หลังจากแสดงครั้งแรก
หากต้องการแสดงตัวบ่งชี้ที่จะปรากฏขณะที่ผู้ใช้เลือกดูแผนผังการเลือกดูสื่อ ให้สร้างบันเดิลข้อมูลเพิ่มเติมที่มีค่าคงที่เหล่านี้อย่างน้อย 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ที่มี ค่าสตริงเท่ากับ รหัสสื่อ ที่ส่งไปยังMediaItemPlaybackStateCompatต้องมีข้อมูลเพิ่มเติมที่มีคีย์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 จะแสดงแถบความคืบหน้าเหนือตัวบ่งชี้ความคืบหน้าอื่นๆ