แผนภาพต่อไปนี้แสดงคอมโพเนนต์ที่โต้ตอบกับ Media
รูปที่ 1 คอมโพเนนต์ของระบบ
องค์ประกอบในรูปภาพนี้มีคำอธิบายอยู่ในตารางต่อไปนี้
ส่วนประกอบ | คำอธิบาย |
---|---|
หน้าจอหลัก | แสดงแพลตฟอร์มอื่นๆ ใน UI ของรถยนต์ที่แสดงและควบคุมสื่อที่เล่นอยู่ ใน AOSP หน้าจอนี้คือหน้าจอหลักที่แสดงเมื่อระบบเริ่มทำงาน จากหน้าจอนี้ ผู้ใช้สามารถดูรายละเอียดของรายการสื่อที่เล่นอยู่และดำเนินการแบบมาตรฐานและแบบกำหนดเองแบบจำกัด (เช่น เล่นและหยุดชั่วคราว) |
UI ของระบบ | ให้ฟังก์ชันการทำงานที่มีตัวเลือกการไปยังส่วนต่างๆ ของ UI ทั่วโลก เช่น ไปยังสื่อ |
ผู้ช่วย | Android มีกลไกสำหรับแอปผู้ช่วยเสียงต่างๆ เพื่อโต้ตอบกับระบบ แอปเหล่านี้สามารถโต้ตอบกับแหล่งที่มาของสื่อในเบื้องหลัง (เช่น เล่นเพลงตามคำสั่งเสียง) หรือไปยังสื่อในเบื้องหน้า (เช่น เมื่อแอปผู้ช่วยเสียงได้รับคำสั่งให้แสดง UI ของแหล่งที่มาของสื่อที่เฉพาะเจาะจง) |
ตัวเปิดแอป | แอป Android ทั้งหมดจะเริ่มต้นในตัวเปิดแอป รวมถึงแหล่งที่มาของสื่อ สื่อสามารถแสดงตัวเลือกแหล่งที่มาของสื่อของตนเอง ซึ่งจะเสริมหรือแทนที่ App Launcher ในฐานะจุดเริ่มต้นของสื่อ |
Google Play Store | เมื่อใช้ GAS ผู้ใช้จะค้นหาและติดตั้งแอปใหม่ในอุปกรณ์ Android ได้จากส่วนนี้ สำหรับสื่อ เมื่อติดตั้งแอปแล้ว ระบบจะนําผู้ใช้ไปยังสื่อเพื่อดําเนินการตามกระบวนการลงชื่อเข้าใช้ให้เสร็จสมบูรณ์หรือเริ่มโต้ตอบกับแอป |
Media Session Manager | บริการระบบ Android ที่ช่วยติดตามและควบคุมเซสชันสื่อจากแหล่งที่มาของสื่อทั้งหมด โดยจะมีกลไกในการตรวจจับเมื่อแหล่งที่มาของสื่อกลายเป็นแหล่งที่มาของสื่อเบื้องหน้า สื่อและแอปอื่นๆ ทั้งหมดที่แสดงแหล่งที่มาของสื่อที่เล่นอยู่ในปัจจุบัน (เช่น หน้าจอหลัก) จะใช้ตัวจัดการเซสชันสื่อเพื่อตรวจหาเหตุการณ์เหล่านี้และอัปเดต UI ให้สอดคล้องกัน แหล่งที่มาของสื่อโต้ตอบกับ Media Session Manager ผ่าน Media Session API |
วิทยุ | แอปเฉพาะทางเพื่อโต้ตอบกับฮาร์ดแวร์วิทยุ วิทยุจะค้นหาสถานีวิทยุ เลือกสถานีที่ระบุล่าสุดอย่างรวดเร็ว และสลับระหว่างย่านความถี่วิทยุ คอมโพเนนต์ UI ที่ทั้งวิทยุและสื่อใช้ร่วมกันช่วยให้ผู้ใช้สลับระหว่างประสบการณ์การใช้งาน 2 แบบได้ |
เครื่องมือตรวจจับการเสียสมาธิของผู้ขับขี่ | บริการระบบ Android ที่ใช้เพื่อกำหนดข้อจำกัด UX ตามสถานะการขับขี่ของรถยนต์ สำหรับ UX การลงชื่อเข้าใช้และการตั้งค่าแหล่งที่มาของสื่อ (ซึ่งแหล่งที่มาของสื่อควบคุมหน้าจอโดยตรง) บริการนี้จะตรวจสอบว่าไม่มีเนื้อหาที่ไม่ปลอดภัยแสดงขึ้นเมื่อรถอยู่ในสถานะการขับขี่ OEM สามารถปรับแต่งคำจำกัดความของสถานะเหล่านี้และวิธีที่ระบบตอบสนองในสถานการณ์เหล่านี้ได้ (เช่น แสดงการวางซ้อนหน้าจอที่บล็อก) |
โฟลว์ผู้ใช้
การเปิดตัวแอปสื่อ
กระบวนการที่เปิด Media จะปรากฏด้านล่าง
รูปที่ 2 การเปิดตัวแอปสื่อ
สื่อต้องเปิดโดยใช้ implicit
CAR_INTENT_ACTION_MEDIA_TEMPLATE
ต่อไปนี้
Intent นี้อาจมีข้อมูลต่อไปนี้เป็นข้อมูลเพิ่มเติม
-
android.car.intent.extra.MEDIA_COMPONENT
(ไม่บังคับ) สตริงเพิ่มเติมเพื่อแสดงชื่อคอมโพเนนต์แบบแบนราบของMediaBrowserService
ในแอปสื่อที่สื่อจะเชื่อมต่อ หากไม่ได้ระบุ Media จะแสดงแอปสื่อที่เลือกอยู่ในปัจจุบัน โดยใช้ Intent นี้จากจุดแรกเข้าต่อไปนี้-
UI ของระบบ ใช้เพื่อกลับไปที่ประสบการณ์การใช้งานสื่อหรือเริ่มใช้งานเป็นครั้งแรก ในกรณีนี้ ระบบจะใช้ Intent ข้างต้นโดยไม่มีข้อมูลเพิ่มเติมเพื่อให้ Media แสดงแอปสื่อที่เลือกอยู่ในปัจจุบัน
-
หน้าจอหลัก ผู้ช่วย และศูนย์การแจ้งเตือน ผู้ใช้สามารถไปที่ "สื่อ" เพื่อแสดงแอปสื่อที่เลือกอยู่ในปัจจุบัน ในทุกกรณี ระบบจะเรียกใช้ Intent ที่ไม่ชัดแจ้งโดยไม่มีข้อมูลเพิ่มเติม
-
ตัวเปิดแอป เมื่อผู้ใช้เลือกแอปสื่อจากตัวเปิดแอป Intent ข้างต้นจะมีข้อมูลเพิ่มเติม
CAR_EXTRA_MEDIA_COMPONENT
ซึ่งมีแอปสื่อที่เลือกไว้ สื่อจะกำหนดแอปนี้เป็นแอปที่เลือกใหม่และเชื่อมต่อกับแอปดังกล่าว โปรดดูรายละเอียดที่ส่วนด้านล่าง การผสานรวม App Launcher กับสื่อ
-
การผสานรวมตัวเปิดแอปกับสื่อ
แอปสื่อไม่ได้รับอนุญาตให้ระบุกิจกรรมที่มีคำอธิบายประกอบเป็นหมวดหมู่
android.intent.category.LAUNCHER
ด้วยเหตุนี้ App Launcher (หรือแอปที่เทียบเท่า) จึงต้องใช้ตรรกะพิเศษเพื่อจัดการการผสานรวมแหล่งที่มาของสื่อ ดังนี้
-
ตัวเปิดแอปต้องสแกนระบบเพื่อหาแพ็กเกจที่ใช้
MediaBrowserService.SERVICE_INTERFACE
สำหรับแพ็กเกจเหล่านี้ ตัวเปิดแอปจะดึงข้อมูลไอคอนบริการที่คล้ายกับที่ใช้ดึงข้อมูลกิจกรรมอื่นๆ -
จากนั้นตัวเปิดแอปจะรวมแพ็กเกจเหล่านี้เข้ากับแพ็กเกจที่ใช้กิจกรรม
android.intent.category.LAUNCHER
หากแอปมีMediaBrowserService
การใช้งานและกิจกรรม Launcher บริการจะมีความสําคัญเหนือกว่าขณะเขียนบทความนี้ ไม่มีแอปแหล่งที่มาของสื่อใดที่ระบุกิจกรรมของ Launcher ได้
- ตัวอย่างของตรรกะนี้จะอยู่ในโค้ด AOSP ที่
AppLauncherUtils#getAllLauncherApps()
ขั้นตอนการลงชื่อเข้าใช้และตัวเลือกการกำหนดค่า
แอปสื่ออาจมีกิจกรรมการตั้งค่าที่เพิ่มประสิทธิภาพให้รถยนต์ กิจกรรมดังกล่าวสามารถใช้เพื่อติดตั้งใช้งานการไหลเวียนของผู้ใช้ที่ Android Media API ไม่ได้จัดการ เช่น
- ลงชื่อเข้าใช้
- ออกจากระบบ
- การสลับบัญชี
- จอแสดงผลที่ผู้ใช้เข้าสู่ระบบอยู่ในปัจจุบัน (หากมี)
- การกําหนดค่าบริการ
รูปที่ 3 ขั้นตอนการลงชื่อเข้าใช้
แอปสื่อประกาศกิจกรรมการตั้งค่านี้ด้วยตัวกรอง 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 นี้ Media จะได้รับออบเจ็กต์ PlaybackState
ซึ่งจะสื่อสารสถานะปัจจุบันของแอปสื่อ
กระบวนการลงชื่อเข้าใช้จะเริ่มขึ้นเมื่อแอปสื่อเปลี่ยนจาก PlaybackState
เป็น STATE_ERROR
รวมถึงรหัสข้อผิดพลาดที่เฉพาะเจาะจง (ดูรายละเอียดด้านล่าง) เมื่อเกิดกรณีนี้ขึ้น สื่อจะแสดงคำอธิบายข้อผิดพลาดและตัวเลือกในการไปยังกิจกรรมการลงชื่อเข้าใช้ที่แอปสื่อนำมาใช้งาน
แอปสามารถใช้ขั้นตอนเดียวกันนี้เพื่อส่งสัญญาณสถานการณ์ข้อผิดพลาดอื่นๆ (เช่น ข้อผิดพลาดเกี่ยวกับการเชื่อมต่อเซิร์ฟเวอร์)
รูปที่ 4 การจัดการข้อผิดพลาด
การจัดการข้อผิดพลาด PlaybackState
ปกตินั้น Media ต้องตรวจสอบอินพุตต่อไปนี้
-
รหัสข้อผิดพลาด
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
ซึ่งหมายความว่าจะไม่สามารถดำเนินการอื่นๆ ได้จนกว่าการลงชื่อเข้าใช้จะเสร็จสมบูรณ์