ตารางต่อไปนี้อธิบายคอมโพเนนต์ที่โต้ตอบกับสื่อ
| ส่วนประกอบ | คำอธิบาย |
|---|---|
| หน้าจอหลัก | แสดงแพลตฟอร์มอื่นๆ ใน UI ของรถยนต์ที่แสดงและควบคุมสื่อที่กำลังเล่นอยู่ ในปัจจุบัน ใน AOSP นี่คือหน้าจอหลักที่จะแสดงเมื่อระบบเริ่มต้น จากหน้าจอนี้ ผู้ใช้จะดูรายละเอียดของรายการสื่อที่กำลังเล่นและดำเนินการมาตรฐาน และดำเนินการที่กำหนดเองได้ (เช่น เล่นและหยุดชั่วคราว) |
| UI ของระบบ | มีฟังก์ชันการทำงานซึ่งรวมถึงตัวเลือกการนำทาง UI ทั่วโลก เช่น การไปยัง สื่อ |
| ผู้ช่วย | Android มีกลไกสำหรับแอปผู้ช่วยเสียงต่างๆ ในการโต้ตอบกับระบบ แอปเหล่านี้โต้ตอบกับแหล่งที่มาของสื่อในเบื้องหลังได้ (เช่น เล่นเพลงตามคำสั่งเสียง) หรือไปยังส่วนสื่อในเบื้องหน้าได้ (เช่น เมื่อสั่งให้แอปผู้ช่วยแบบเสียงแสดง UI ของแหล่งที่มาของสื่อที่เฉพาะเจาะจง) |
| ตัวเปิดแอป | แอป Android ทั้งหมดจะเริ่มต้นในตัวเปิดแอป รวมถึงแหล่งที่มาของสื่อ สื่อสามารถ แสดงตัวเลือกแหล่งที่มาของสื่อของตัวเอง เพื่อเสริมหรือแทนที่ App Launcher เป็น จุดเริ่มต้นสำหรับสื่อ |
| Google Play Store | เมื่อใช้ GAS ผู้ใช้จะค้นหาและติดตั้งแอปใหม่ในอุปกรณ์ Android ได้ที่นี่ สำหรับสื่อ เมื่อติดตั้งแอปแล้ว ระบบจะนำผู้ใช้ไปยังสื่อเพื่อ ดำเนินการลงชื่อเข้าใช้ให้เสร็จสมบูรณ์หรือเริ่มโต้ตอบกับแอป |
| Media Session Manager | บริการของระบบ Android ที่ติดตามและควบคุมเซสชันสื่อจากแหล่งที่มาของสื่อทั้งหมด ซึ่งมีกลไกในการตรวจหาเมื่อแหล่งสื่อกลายเป็นแหล่งสื่อเบื้องหน้า สื่อและแอปอื่นๆ ทั้งหมดที่แสดงแหล่งที่มาของสื่อที่กำลังเล่นอยู่ (เช่น หน้าจอหลัก) จะใช้ Media Session Manager เพื่อตรวจหาเหตุการณ์เหล่านี้และอัปเดต UI ตามนั้น แหล่งที่มาของสื่อจะโต้ตอบกับ Media Session Manager ผ่าน Media Session API |
| วิทยุ | แอปเฉพาะทางสำหรับโต้ตอบกับฮาร์ดแวร์วิทยุ วิทยุจะค้นหาสถานีวิทยุ โดยเลือกสถานีที่ระบุล่าสุดอย่างรวดเร็วและสลับระหว่างคลื่นวิทยุ คอมโพเนนต์ UI ที่ทั้งวิทยุและสื่อใช้ร่วมกันช่วยให้ผู้ใช้สลับไปมาระหว่างประสบการณ์การใช้งานทั้ง 2 อย่างได้ |
| เครื่องมือตรวจจับการเสียสมาธิของผู้ขับ | บริการของระบบ Android ที่ใช้เพื่อกำหนดข้อจำกัดด้านประสบการณ์ของผู้ใช้ตามสถานะการขับขี่ของรถยนต์ สำหรับ UX การลงชื่อเข้าใช้และการตั้งค่าแหล่งที่มาของสื่อ (ซึ่งหน้าจอจะควบคุมโดยแหล่งที่มาของสื่อโดยตรง) บริการนี้จะช่วยให้มั่นใจได้ว่าจะไม่มีการแสดงเนื้อหาที่ไม่ปลอดภัยเมื่อรถอยู่ในสถานะขับขี่ OEM สามารถปรับแต่งคำจำกัดความของสถานะเหล่านี้และวิธีที่ระบบ ตอบสนองในสถานการณ์เหล่านี้ได้ (เช่น โดยการแสดงการวางซ้อนหน้าจอที่บล็อก) |
โฟลว์ผู้ใช้
การเปิดแอปสื่อ
ต้องเปิดตัวสื่อโดยใช้โดยนัยต่อไปนี้
CAR_INTENT_ACTION_MEDIA_TEMPLATE
โดย Intent นี้อาจมีข้อมูลต่อไปนี้เป็น extras
-
android.car.intent.extra.MEDIA_COMPONENT(ไม่บังคับ) String extra เพื่อแสดงชื่อคอมโพเนนต์ที่ยุบแล้วของMediaBrowserServiceในแอปสื่อที่จะเชื่อมต่อกับสื่อ หากไม่ได้ระบุไว้ จอแสดงผลสื่อจะแสดงแอปสื่อที่เลือกอยู่ในปัจจุบัน ระบบจะใช้ Intent นี้จากจุดแรกเข้าต่อไปนี้-
UI ของระบบ ใช้เพื่อกลับไปที่ประสบการณ์การใช้งานสื่อหรือเพื่อเริ่ม ใช้เป็นครั้งแรก ในกรณีนี้ ระบบจะใช้ Intent ข้างต้นโดยไม่มี ส่วนเพิ่มเติมใดๆ เพื่อให้สื่อแสดงแอปสื่อที่เลือกอยู่ในปัจจุบัน
-
หน้าจอหลัก ผู้ช่วย และศูนย์การแจ้งเตือน ผู้ใช้สามารถ ไปที่สื่อเพื่อแสดงแอปสื่อที่เลือกในปัจจุบัน ในทุกกรณี ระบบจะทริกเกอร์ Intent โดยนัยที่ไม่มีส่วนเสริม
-
ตัวเปิดแอป เมื่อผู้ใช้เลือกแอปสื่อจาก App Launcher ความตั้งใจข้างต้นจะมี
CAR_EXTRA_MEDIA_COMPONENTพิเศษซึ่งมีแอปสื่อที่เลือกอยู่ สื่อจะกำหนดให้แอปนี้เป็นแอปที่เลือกใหม่ และเชื่อมต่อกับแอป ดูรายละเอียดได้ที่ส่วนด้านล่าง "การผสานรวม App Launcher กับสื่อ"
-
ตัวเปิดแอปไปจนถึงการผสานรวมสื่อ
แอปสื่อไม่ได้รับอนุญาตให้จัดกิจกรรมใดๆ ที่มีการอธิบายประกอบด้วยหมวดหมู่
android.intent.category.LAUNCHER ด้วยเหตุนี้ ตัวเรียกใช้แอป (หรือ
เทียบเท่า) จึงต้องใช้ตรรกะพิเศษเพื่อจัดการการผสานรวมแหล่งที่มาของสื่อ
-
ตัวเปิดแอปต้องสแกนระบบเพื่อหาแพ็กเกจที่ใช้
MediaBrowserService.SERVICE_INTERFACEสำหรับแพ็กเกจเหล่านี้ ตัวเปิดแอปจะดึงไอคอนบริการในลักษณะเดียวกับที่ใช้ดึงกิจกรรมอื่นๆ -
จากนั้นตัวเปิดแอปจะรวมแพ็กเกจเหล่านี้กับแพ็กเกจที่ใช้
android.intent.category.LAUNCHERกิจกรรม หากแอปมีการติดตั้งใช้งานMediaBrowserServiceและกิจกรรมของ Launcher บริการจะมีความสำคัญเหนือกว่าในขณะที่เขียนนี้ ไม่มีแอปแหล่งที่มาของสื่อใดที่สามารถจัดหากิจกรรมตัวเรียกใช้งานได้
- ดูตัวอย่างตรรกะนี้ได้ในโค้ด AOSP ที่
AppLauncherUtils#getAllLauncherApps()
ขั้นตอนการลงชื่อเข้าใช้และตัวเลือกการกำหนดค่า
แอปสื่อสามารถรวมกิจกรรมการตั้งค่าที่ปรับให้เหมาะกับยานพาหนะได้ กิจกรรมดังกล่าวสามารถใช้เพื่อติดตั้งใช้งานโฟลว์ของผู้ใช้ที่ Android Media API ไม่ได้จัดการได้ เช่น
- ลงชื่อเข้าใช้
- ออกจากระบบ
- การสลับบัญชี
- จอแสดงผลที่ผู้ใช้เข้าสู่ระบบอยู่ในปัจจุบัน (หากมี)
- การกำหนดค่าบริการ
กิจกรรมการตั้งค่านี้ประกาศโดยแอปสื่อที่มีตัวกรอง Intent ต่อไปนี้
<activity android:name=".AppSettingsActivity" android:exported="true android:theme="@style/SettingsActivity" android:label="@string/app_settings_activity_title"> <intent-filter> <action android:name="android.intent.action.APPLICATION_PREFERENCES"/> </intent-filter> </activity>
สื่อต้องใช้ตรรกะต่อไปนี้
-
ตรวจสอบว่าแอปสื่อที่เลือกในปัจจุบันมีกิจกรรมที่มี ตัวกรอง Intent ที่ระบุ
-
หากเป็นเช่นนั้น ให้อนุญาตให้ผู้ใช้ไปยังกิจกรรม
-
หากข้อจำกัด UX ของรถยนต์มีผล (เช่น รถยนต์กำลังเคลื่อนที่) คุณควรปิดใช้ความสามารถนี้เนื่องจากกิจกรรมการตั้งค่าไม่ใช่ UI ที่เพิ่มประสิทธิภาพสำหรับผู้ขับขี่
การจัดการข้อผิดพลาดและการลงชื่อเข้าใช้ที่จำเป็น
สื่อจะโต้ตอบกับแอปสื่อผ่าน Android Media Session API API นี้เป็นส่วนหนึ่งของ
API ซึ่งสื่อจะได้รับออบเจ็กต์
PlaybackState
ซึ่งจะสื่อสารสถานะปัจจุบันของแอปสื่อ
กระบวนการลงชื่อเข้าใช้จะเริ่มต้นเมื่อแอปสื่อเปลี่ยนจาก
PlaybackState
เป็น
STATE_ERROR
รวมถึงรหัสข้อผิดพลาดที่เฉพาะเจาะจง (ดูรายละเอียดด้านล่าง) เมื่อเกิดกรณีนี้ขึ้น Media จะแสดงคำอธิบายข้อผิดพลาดและส่วนที่ช่วยให้ไปยังกิจกรรมการลงชื่อเข้าใช้
ที่แอปสื่อได้
แอปสามารถใช้ขั้นตอนเดียวกันนี้เพื่อส่งสัญญาณสถานการณ์ข้อผิดพลาดอื่นๆ ได้ (เช่น ข้อผิดพลาดในการเชื่อมต่อเซิร์ฟเวอร์)
ในส่วนของการจัดการข้อผิดพลาดตามปกติ PlaybackState สื่อต้องตรวจสอบอินพุตต่อไปนี้
-
PlaybackStateรหัสข้อผิดพลาดเท่ากับPlaybackStateCompat#ERROR_CODE_AUTHENTICATION_EXPIREDซึ่งเป็นสัญญาณ ว่าแอปสื่อต้องมีการลงชื่อเข้าใช้เพื่อดำเนินการต่อ คุณอาจได้รับรหัสข้อผิดพลาดอื่นๆ ซึ่งจะบ่งบอกถึงสถานการณ์ข้อผิดพลาดประเภทอื่นๆ -
ข้อความแสดงข้อผิดพลาด
PlaybackState(ตั้งค่าโดยแอปสื่อโดยใช้เมธอดPlaybackStateCompat.Builder#setErrorMessage) มีคำอธิบายที่อ่านง่าย (เช่น "คุณไม่ได้ลงชื่อเข้าใช้") ข้อความนี้ต้องแสดงต่อ ผู้ใช้และต้องได้รับการเพิ่มประสิทธิภาพเพื่อลดการรบกวนขณะขับรถ (DO) -
PlaybackStateอาจรวมถึงข้อมูลเพิ่มเติมต่อไปนี้ (ตั้งค่าโดยแอปสื่อด้วยเมธอดPlaybackStateCompat.Builder#setExtras) พร้อมคีย์ต่อไปนี้ (ไม่บังคับ)-
android.media.extras.ERROR_RESOLUTION_ACTION_LABELตั้งค่าเป็นสตริงที่มีข้อความที่มนุษย์อ่านได้ซึ่งจะแสดงบนปุ่มที่ผู้ใช้แตะเพื่อเริ่มขั้นตอนการลงชื่อเข้าใช้ -
android.media.extras.ERROR_RESOLUTION_ACTION_INTENT. ตั้งค่าด้วยPendingIntentเพื่อให้ ทริกเกอร์เมื่อผู้ใช้คลิกปุ่มที่กล่าวถึงข้างต้นPendingIntentนี้ชี้ไปยังกิจกรรมการลงชื่อเข้าใช้ที่กำหนดเองซึ่งแอปสื่อเดียวกันได้ติดตั้งใช้งาน
-
-
PlaybackStateรัฐเท่ากับSTATE_ERRORซึ่งเป็นการส่งสัญญาณว่าไม่สามารถดำเนินการอื่นได้จนกว่าจะลงชื่อเข้าใช้เสร็จสมบูรณ์