คอมโพเนนต์ของระบบและขั้นตอนของผู้ใช้

แผนภาพต่อไปนี้แสดงคอมโพเนนต์ที่โต้ตอบกับ 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 ซึ่งหมายความว่าจะไม่สามารถดำเนินการอื่นๆ ได้จนกว่าการลงชื่อเข้าใช้จะเสร็จสมบูรณ์