אחרי שמשתמשים בפריטים שאפשר לעיין בהם או להפעיל אותם כדי [ליצור היררכיית תוכן][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*/);
}
האפליקציה צריכה להעביר את כל פריטי המדיה שרוצים לקבץ יחד כבלוק רציף. לדוגמה, נניח שרוצים להציג שתי קבוצות של פריטי מדיה, 'שירים' ו'אלבומים', בסדר הזה. אם האפליקציה מעבירה חמישה פריטי מדיה בסדר הזה, מערכות Android Auto ו-AAOS מפרשות אותם כארבע קבוצות נפרדות:
- פריט מדיה א' עם
extras.putString(MediaConstants.DESCRIPTION_EXTRAS_KEY_CONTENT_STYLE_GROUP_TITLE, "Songs") - פריט מדיה ב' עם
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")
התוצאה היא ארבע הקבוצות האלה:
- קבוצה 1, שנקראת 'שירים', שמכילה את פריט המדיה א'
- קבוצה 2, שנקראת 'אלבומים', שמכילה את פריט המדיה ב'
- קבוצה 3, שנקראת 'שירים', שמכילה את פריטי המדיה C ו-D
- קבוצה 4, שנקראת 'אלבומים', שמכילה את פריט המדיה E
כדי להציג את הפריטים האלה בשתי קבוצות, האפליקציה צריכה להעביר את הפריטים של המדיה בסדר הזה:
- פריט מדיה א' עם
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") - פריט מדיה ב' עם
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]: מציין את התקדמות הצפייה בתוכן ארוך כערך מסוג double בין 0.0 ל-1.0, כולל. כך אפשר לקבל מידע נוסף על מצבPARTIALLY_PLAYING, כדי שמערכות Android Auto או AAOS יוכלו להציג אינדיקטור התקדמות משמעותי יותר, כמו סרגל התקדמות. אם אתם משתמשים בתוסף הזה, במאמר [עדכון סרגל ההתקדמות בתצוגת הדפדפן בזמן הפעלת התוכן][21] מוסבר איך לעדכן את האינדיקטור הזה אחרי ההצגה הראשונית.
כדי להציג אינדיקטורים שמופיעים בזמן שהמשתמש מעיין בעץ של דפדפן המדיה, צריך ליצור חבילת תוספים שכוללת קבוע אחד או יותר מהקבועים האלה.
לאחר מכן, מעבירים את החבילה הזו לשיטה 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][20] extra כדי להציג סרגל התקדמות לתוכן שהופעל באופן חלקי בתצוגת העיון.
עם זאת, אם משתמש ממשיך לצפות בתוכן שצפה בו באופן חלקי, הסימון הזה הופך ללא מדויק עם הזמן.
כדי שסרגל ההתקדמות ב-Android Auto וב-AAOS יתעדכן, צריך לספק מידע נוסף ב-MediaMetadataCompat וב-PlaybackStateCompat כדי לקשר תוכן שמוצג כרגע לפריטי מדיה בתצוגת העיון.
כדי שסרגל ההתקדמות של פריט מדיה יתעדכן באופן אוטומטי, צריך לעמוד בדרישות הבאות:
כשיוצרים את
MediaItem, הוא צריך לשלוח [DESCRIPTION_EXTRAS_KEY_COMPLETION_PERCENTAGE][20] בתוספים שלו עם ערך בין0.0ל-1.0, כולל.הפרמטר
MediaMetadataCompatצריך לשלוח [METADATA_KEY_MEDIA_ID][22] עם ערך מחרוזת ששווה ל[מזהה המדיה][23] שמועבר אלMediaItem.ה-
PlaybackStateCompatצריך לכלול נתונים נוספים עם המפתח [PLAYBACK_STATE_EXTRAS_KEY_MEDIA_ID][24] שממופה לערך מחרוזת ששווה ל[מזהה המדיה][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()