החל מ-27 במרץ 2025, מומלץ להשתמש ב-android-latest-release
במקום ב-aosp-main
כדי ליצור תרומות ל-AOSP. מידע נוסף זמין במאמר שינויים ב-AOSP.
הטמעת רדיו באמצעות Media
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
ממשק המשתמש של הרדיו מיושם כאפליקציה עצמאית. הוראות לשילוב ממשק המשתמש של הרדיו בחומרת הרדיו מפורטות במאמר הטמעת רדיו.
בקטע הבא מוסבר איך לשלב את ממשק המשתמש של הרדיו עם Media כדי לספק למשתמשים חוויה חלקה שמאפשרת להם ליצור אינטראקציה עם מקורות מדיה ורדיו כאילו מדובר באפליקציה אחת.
בתרשים הבא מוסבר איך ההטמעה של ההפניה של רדיו ומדיה מטמיעה את תהליך המעבר של המשתמש בין האפליקציות.

איור 1. מסלול המשתמש בעת מעבר בין מקורות מדיה
כדי לספק מעבר חלק בין 'רדיו' לאפליקציות אחרות ב-Media, הספרייה car-media-common
מגדירה כוונות (intents) ל-Android שאפשר להשתמש בהן כדי להפעיל בורר של מקורות מדיה. ב-AOSP, הבורר הזה מוטמע במרכז האפליקציות, ומציג את אותו ממשק משתמש להפעלת אפליקציות, אבל מסונן כך שיוצגו רק מקורות מדיה.
יצרני ציוד מקורי יכולים להשתמש בהטמעה הנוכחית של מרכז האפליקציות כפי שהיא, או להטמיע בורר מותאם אישית של מקורות מדיה.
לבורר יש שני מצבים:
- תהליך רגיל אחרי שמשתמשים בבורר, המקור שנבחר מוצג בקטע 'מדיה' כדי שהמשתמש יוכל לעיין בתוכן שלו.
- כמתג. נעשה שימוש בבורר כדי לעבור בין מקורות, אבל המדיה לא מוצגת למשתמש. זה נכון גם לגבי סמל הבורר בדף הבית. אחרי שבוחרים מקור, המסך הקודם האחרון מוצג למשתמש (במקרה הזה, דף הבית).
אפשר לקבל את הכוונה לעבור בין מקורות המדיה מהשיטה MediaSource#getSourceSelectorIntent()
, שמקבלת ערך בוליאני popup
שמחזיר כוונה להפעיל כל אחד מהתהליכים שמפורטים למעלה.
הכוונות בפועל מוגדרות בקטע packages/apps/Car/libs/car-media-common/res/values/config.xml
. כדי להתאים אישית את ההגדרה הזו, משתמשים בשכבות-על בזמן ה-build.
החלפת אפליקציית הרדיו
מכיוון שאפליקציית הרדיו מיישמת את 'עיון בתוכן מדיה' ואת 'סשן מדיה', היא מוצגת במרכז האפליקציות. כדי למנוע הפעלת מדיה כשמשתמש לוחץ על הסמל, נדרשים שני רכיבים. חובה:
- יש פעילות מרכז אפליקציות.
- להיות מוגדר כמקור מותאם אישית. כדי לעשות זאת, מוסיפים את שם הרכיב למפתח
custom_media_packages
בקובץ car-media-common/res/values/config.xml
.
הגבלות נהיגה של חוויית משתמש (UX)
התוכן צריך לעמוד בכל ההגבלות על הסחות דעת בזמן נהיגה. כדי לעשות זאת, המערכת של Media צריכה להאזין ל-CarUXRestrictionManager ולהטמיע את כל כללי המדיניות שלו.
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Implement radio with Media\n\nThe Radio UI is implemented as an independent app. Instructions on how to integrate a\nRadio UI to the radio hardware can be found at\n[Implement radio](/docs/automotive/broadcast-radio).\n\nThe following section describes how to integrate Radio UI with Media to provide users with a\nseamless experience that enables users to interact with media sources and radio as if they were a\nsingle app.\n\nMedia source switching user flow\n--------------------------------\n\nThe following diagram illustrates how the reference implementation of Radio and Media implements\nthe app switching user flow.\n\n**Figure 1.** Media source switching user flow\n\nTo provide a seamless transition between Radio and other apps in Media, the\n`car-media-common` library defines Android intents that can be used to launch a media\nsource selector. In AOSP, this selector is implemented in the App Launcher, presenting the same UI\nfor launching apps but filtered to display only media sources.\n\nOEMs can opt to take the current App Launcher implementation as is, or implement a customized\nmedia source selector.\n\nThe selector can act in two modes:\n\n- **Normal flow.** After using the selector, the selected source is displayed in Media so the user can browse its content.\n- **As a switch.** A selector is used to switch sources, but the media is not displayed to the user. This is true of the Selector icon on the Home Page. After selecting a source, the most recent previous screen is displayed to the user (in this case, the Home page).\n\nThe intent used to switch between media sources can be obtained from the\n`MediaSource#getSourceSelectorIntent()` method, which accepts a `popup`\nBoolean that returns an intent to launch each of the flows described above.\n\nThe actual intents are defined at\n`packages/apps/Car/libs/car-media-common/res/values/config.xml`. To\ncustomize this configuration, use build-time overlays.\n\n### Replace the Radio app\n\nGiven that the Radio app implements Media Browse and Media Session, Radio is displayed\nin the App launcher. To prevent launching Media when a user clicks the icon, two elements\nare required. Radio *must*:\n\n- Have a *launcher* activity.\n- Be declared as a *custom source* . To do so, add the component name to the `custom_media_packages` key in `car-media-common/res/values/config.xml`.\n\nUX driving restrictions\n-----------------------\n\nMedia must observe all UX driving distraction restrictions. To do so, Media must listen to the\n[CarUXRestrictionManager](https://developer.android.com/reference/android/car/drivingstate/CarUxRestrictionsManager)\nand implement all its policies.\n\n- Media must connect to the [Car](https://developer.android.com/reference/android/car/Car) library and get an instance of [CarUXRestrictionManager](https://developer.android.com/reference/android/car/drivingstate/CarUxRestrictionsManager).\n- Media must subscribe to updates in the list of [CarUxRestrictions](https://developer.android.com/reference/android/car/drivingstate/CarUxRestrictions) and implement them as documented.\n- Particularly important for Media are:\n - [UX_RESTRICTIONS_NO_SETUP](https://developer.android.com/reference/android/car/drivingstate/CarUxRestrictions.html#UX_RESTRICTIONS_NO_SETUP). In this case, the sign-in flow must be disabled.\n - [UX_RESTRICTIONS_LIMIT_STRING_LENGTH](https://developer.android.com/reference/android/car/drivingstate/CarUxRestrictions.html#UX_RESTRICTIONS_LIMIT_STRING_LENGTH). Error messages and other text provided by the media apps must be limited to the given length."]]