ตั้งแต่วันที่ 27 มีนาคม 2025 เป็นต้นไป เราขอแนะนำให้ใช้ android-latest-release
แทน aosp-main
เพื่อสร้างและมีส่วนร่วมใน AOSP โปรดดูข้อมูลเพิ่มเติมที่หัวข้อการเปลี่ยนแปลงใน AOSP
ใช้วิทยุกับ Media
จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน
บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ
UI ของวิทยุจะติดตั้งใช้งานเป็นแอปอิสระ โปรดดูวิธีการผสานรวม UI ของวิทยุเข้ากับฮาร์ดแวร์ของวิทยุที่หัวข้อติดตั้งใช้งานวิทยุ
ส่วนต่อไปนี้จะอธิบายวิธีผสานรวม UI วิทยุกับสื่อเพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ราบรื่น ซึ่งช่วยให้ผู้ใช้โต้ตอบกับแหล่งที่มาของสื่อและวิทยุได้ราวกับเป็นแอปเดียว
แผนภาพต่อไปนี้แสดงวิธีที่การใช้งานอ้างอิงของ Radio and Media ใช้เวิร์กโฟลว์การเปลี่ยนแอปของผู้ใช้

รูปที่ 1 โฟลว์การเปลี่ยนแหล่งที่มาของสื่อของผู้ใช้
ไลบรารี car-media-common
จะกำหนด Intent ของ Android ที่ใช้เปิดเครื่องมือเลือกแหล่งที่มาของสื่อได้ เพื่อให้การเปลี่ยนจากวิทยุไปยังแอปอื่นๆ ในสื่อเป็นไปอย่างราบรื่น ใน AOSP จะมีการใช้ตัวเลือกนี้ใน App Launcher ซึ่งแสดง UI เดียวกันสำหรับการเปิดแอป แต่กรองให้แสดงเฉพาะแหล่งที่มาของสื่อ
OEM สามารถเลือกที่จะใช้ App Launcher เวอร์ชันปัจจุบันตามที่เป็นอยู่ หรือจะใช้ตัวเลือกแหล่งที่มาของสื่อที่กำหนดเองก็ได้
ตัวเลือกทํางานได้ 2 โหมด ดังนี้
- ขั้นตอนปกติ หลังจากใช้ตัวเลือกแล้ว แหล่งที่มาที่เลือกจะแสดงในสื่อเพื่อให้ผู้ใช้เรียกดูเนื้อหาได้
- ในฐานะสวิตช์ ใช้ตัวเลือกเพื่อสลับแหล่งที่มา แต่สื่อจะไม่แสดงต่อผู้ใช้ ซึ่งรวมถึงไอคอนตัวเลือกในหน้าแรก หลังจากเลือกแหล่งที่มาแล้ว ระบบจะแสดงหน้าจอก่อนหน้าล่าสุดต่อผู้ใช้ (ในกรณีนี้คือหน้าแรก)
คุณสามารถรับ Intent ที่ใช้ในการสลับระหว่างแหล่งที่มาของสื่อได้จากวิธี MediaSource#getSourceSelectorIntent()
ซึ่งยอมรับ popup
แบบบูลีนที่จะแสดงผล Intent เพื่อเปิดใช้งานแต่ละขั้นตอนที่อธิบายไว้ข้างต้น
กำหนด Intent จริงได้ที่
packages/apps/Car/libs/car-media-common/res/values/config.xml
หากต้องการปรับแต่งการกำหนดค่านี้ ให้ใช้การวางซ้อนเวลาสร้าง
แทนที่แอปวิทยุ
เนื่องจากแอปวิทยุใช้การเรียกดูสื่อและเซสชันสื่อ แอปวิทยุจึงแสดงในตัวเปิดแอป หากต้องการป้องกันไม่ให้เปิด Media เมื่อผู้ใช้คลิกไอคอน คุณต้องใช้องค์ประกอบ 2 รายการ วิทยุต้อง
- มีกิจกรรมตัวเปิด
- ประกาศเป็นแหล่งที่มาที่กําหนดเอง โดยให้เพิ่มชื่อคอมโพเนนต์ลงในคีย์
custom_media_packages
ใน car-media-common/res/values/config.xml
ข้อจำกัดในการขับขี่ UX
สื่อต้องเป็นไปตามข้อจำกัดทั้งหมดเกี่ยวกับการรบกวนการขับขี่ 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."]]