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

ตารางต่อไปนี้อธิบายคอมโพเนนต์ที่โต้ตอบกับสื่อ

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