ส่วนประกอบของระบบและกระแสผู้ใช้

แผนภาพต่อไปนี้แสดงส่วนประกอบที่โต้ตอบกับสื่อ:

ส่วนประกอบของระบบ

รูปที่ 1. ส่วนประกอบของระบบ

องค์ประกอบในรูปนี้อธิบายไว้ในตาราง:

ส่วนประกอบ คำอธิบาย
หน้าจอหลัก แสดงถึงพื้นผิวอื่นๆ ใน UI ของรถยนต์ที่แสดงและควบคุมสื่อที่กำลังเล่นอยู่ ใน AOSP นี่คือหน้าจอหลักที่แสดงเมื่อระบบเริ่มทำงาน จากหน้าจอนี้ ผู้ใช้สามารถดูรายละเอียดของรายการสื่อที่กำลังเล่นและดำเนินการชุดการดำเนินการมาตรฐานและแบบกำหนดเองที่จำกัด (เช่น เล่นและหยุดชั่วคราว)
UI ของระบบ ให้ฟังก์ชันการทำงานที่มีตัวเลือกการนำทาง UI ทั่วโลก เช่น การนำทางไปยังสื่อ
ผู้ช่วย Android จัดเตรียมกลไกสำหรับแอปผู้ช่วยเสียงต่างๆ เพื่อโต้ตอบกับระบบ แอพเหล่านี้สามารถโต้ตอบกับแหล่งสื่อในเบื้องหลัง (เช่น การเล่นเพลงจากคำสั่งเสียง) หรือนำทางไปยังสื่อในเบื้องหน้า (เช่น เมื่อแอพผู้ช่วยเสียงได้รับคำสั่งให้แสดง UI ของ แหล่งสื่อเฉพาะ)
เครื่องเรียกใช้งานแอป แอพ Android ทั้งหมดเริ่มต้นในตัวเปิดแอพ รวมถึงแหล่งสื่อ สื่อสามารถนำเสนอตัวเลือกแหล่งที่มาของสื่อของตนเอง เสริมหรือแทนที่เครื่องเรียกใช้งานแอปเป็นจุดเริ่มต้นสำหรับสื่อ
Google Play สโตร์ เมื่อใช้ GAS นี่คือที่ที่ผู้ใช้ค้นหาและติดตั้งแอปใหม่ในอุปกรณ์ Android สำหรับสื่อ เมื่อติดตั้งแอปแล้ว ผู้ใช้จะถูกนำทางไปยังสื่อเพื่อดำเนินการขั้นตอนการลงชื่อเข้าใช้ให้เสร็จสิ้นหรือเริ่มโต้ตอบกับแอป
ผู้จัดการเซสชันสื่อ บริการระบบ Android ที่ติดตามและควบคุมเซสชันสื่อจากแหล่งสื่อทั้งหมด โดยมีกลไกในการตรวจหาเมื่อแหล่งสื่อกลายเป็นแหล่งสื่อ เบื้องหน้า สื่อและแอพอื่นๆ ทั้งหมดที่แสดงแหล่งสื่อที่กำลังเล่นอยู่ (เช่น หน้าจอหลัก) ให้ใช้ Media Session Manager เพื่อตรวจจับเหตุการณ์เหล่านี้และอัพเดต UI ตามนั้น แหล่งที่มาของสื่อโต้ตอบกับ Media Session Manager โดยใช้ Media Session API
วิทยุ แอพพิเศษเพื่อโต้ตอบกับฮาร์ดแวร์วิทยุ วิทยุค้นหาสถานีวิทยุ เลือกสถานีที่ระบุล่าสุดอย่างรวดเร็ว และสลับระหว่างช่วงคลื่นวิทยุ ส่วนประกอบ UI ที่ใช้ร่วมกันโดยทั้งวิทยุและสื่อทำให้ผู้ใช้สามารถสลับระหว่างประสบการณ์ทั้งสองได้
เครื่องยนต์เบี่ยงเบนความสนใจของคนขับ บริการระบบ Android ใช้เพื่อกำหนดข้อจำกัด UX โดยขึ้นอยู่กับสถานะการขับขี่ของรถ สำหรับการลงชื่อเข้าใช้แหล่งสื่อและการตั้งค่า UX (โดยที่แหล่งสื่อควบคุมหน้าจอโดยตรง) บริการนี้ช่วยให้แน่ใจว่าจะไม่มีการแสดงเนื้อหาที่ไม่ปลอดภัยเมื่อรถอยู่ในสถานะขับขี่ OEM สามารถปรับแต่งคำจำกัดความของสถานะเหล่านี้และวิธีที่ระบบตอบสนองในสถานการณ์เหล่านี้ (เช่น โดยการแสดงการซ้อนทับหน้าจอที่ปิดกั้น)

กระแสผู้ใช้

เปิดตัวแอปมีเดีย

กระบวนการที่เปิดตัวสื่อปรากฏด้านล่าง

เปิดตัวแอปมีเดีย

รูปที่ 2 การเปิดตัวแอปสื่อ

ต้องเปิดสื่อโดยใช้ CAR_INTENT_ACTION_MEDIA_TEMPLATE โดยนัย ต่อไปนี้ เจตนานี้อาจมีข้อมูลต่อไปนี้เป็น พิเศษ :

  • android.car.intent.extra.MEDIA_COMPONENT ( ไม่จำเป็น ) สตริงพิเศษเพื่อแสดงชื่อส่วนประกอบแบบแบนของ MediaBrowserService ในแอปสื่อที่สื่อจะเชื่อมต่อ หากไม่ได้ระบุไว้ Media จะแสดงแอปสื่อที่เลือกในปัจจุบัน เจตนานี้ถูกใช้จากจุดเริ่มต้นต่อไปนี้:

    • UI ของระบบ ใช้เพื่อกลับสู่ประสบการณ์สื่อหรือเพื่อเริ่มใช้งานเป็นครั้งแรก ในกรณีนี้ เจตนาข้างต้นจะถูกใช้โดยไม่มีการเพิ่มเติมใดๆ เพื่อทำให้สื่อแสดงแอปสื่อที่เลือกในปัจจุบัน

    • หน้าจอหลัก ผู้ช่วย และศูนย์การแจ้งเตือน ผู้ใช้สามารถนำทางไปยังสื่อเพื่อแสดงแอปสื่อที่เลือกในปัจจุบัน ในทุกกรณี เจตนาโดยนัยที่ไม่มีส่วนเพิ่มเติมจะถูกกระตุ้น

    • เครื่องเรียกใช้งานแอป เมื่อผู้ใช้เลือกแอปสื่อจากเครื่องเรียกใช้งานแอป จุดประสงค์ข้างต้นจะรวม CAR_EXTRA_MEDIA_COMPONENT พิเศษซึ่งมีแอปสื่อที่เลือกไว้ด้วย สื่อกำหนดให้แอปนี้เป็นแอปที่เลือกใหม่และเชื่อมต่อกับแอปดังกล่าว สำหรับรายละเอียด โปรดดูส่วนด้านล่าง การผสานรวมเครื่องเรียกใช้งานแอปกับสื่อ

เครื่องเรียกใช้งานแอปเพื่อรวมสื่อ

แอปสื่อไม่ได้รับอนุญาตให้จัดกิจกรรมใดๆ ที่มีคำอธิบายประกอบในหมวดหมู่ android.intent.category.LAUNCHER ด้วยเหตุนี้ เครื่องเรียกใช้งานแอป (หรือเทียบเท่า) ต้องใช้ตรรกะพิเศษเพื่อจัดการกับการรวมแหล่งสื่อ:

  • เครื่องเรียกใช้งานแอปจะต้องสแกนระบบเพื่อหาแพ็คเกจที่ใช้งาน MediaBrowserService.SERVICE_INTERFACE สำหรับแพ็คเกจเหล่านี้ เครื่องเรียกใช้งานแอปจะดึงไอคอนบริการที่คล้ายกับที่ใช้เพื่อดึงกิจกรรมอื่น ๆ

  • จากนั้นตัวเรียกใช้งานแอปจะรวมแพ็คเกจเหล่านี้เข้ากับแพ็คเกจที่ใช้กิจกรรม android.intent.category.LAUNCHER หากแอปจัดให้มีการใช้งาน MediaBrowserService และกิจกรรม Launcher บริการจะมีความสำคัญเหนือกว่า

    ในขณะที่เขียนบทความนี้ ไม่มีแอปแหล่งสื่อใดที่สามารถให้กิจกรรมตัวเรียกใช้งานได้

  • ตัวอย่างของตรรกะนี้สามารถพบได้ในโค้ด AOSP ที่ AppLauncherUtils#getAllLauncherApps()

ตัวเลือกขั้นตอนการลงชื่อเข้าใช้และการกำหนดค่า

แอพสื่อสามารถรวมกิจกรรมการตั้งค่าที่ปรับให้เหมาะกับยานพาหนะได้ กิจกรรมดังกล่าวสามารถใช้เพื่อปรับใช้โฟลว์ผู้ใช้ที่ไม่ได้ระบุโดย Android Media API ตัวอย่างเช่น:

  • เข้าสู่ระบบ
  • ออกจากระบบ
  • การสลับบัญชี
  • แสดงที่ผู้ใช้เข้าสู่ระบบอยู่ในปัจจุบัน (ถ้ามี)
  • การกำหนดค่าบริการ

ขั้นตอนการลงชื่อเข้าใช้

รูปที่ 3 ขั้น ตอนการลงชื่อเข้าใช้

กิจกรรมการตั้งค่านี้ประกาศโดยแอปสื่อพร้อมตัวกรองเจตนาต่อไปนี้:

<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>

สื่อต้องใช้ตรรกะต่อไปนี้:

  • ตรวจสอบว่าแอปสื่อที่เลือกในปัจจุบันมีกิจกรรมที่มีตัวกรองเจตนาที่กำหนด

  • หากเป็นเช่นนั้น ให้ผู้ใช้นำทางไปยังกิจกรรมได้

  • หากข้อจำกัด UX ของรถยนต์มีผลอยู่ (เช่น รถกำลังเคลื่อนที่) ควรปิดใช้งานการจ่ายนี้เนื่องจากกิจกรรมการตั้งค่าไม่ใช่ UI ที่ปรับให้เหมาะสมสำหรับคนขับ

การจัดการข้อผิดพลาดและการลงชื่อเข้าใช้ที่จำเป็น

สื่อโต้ตอบกับแอปสื่อผ่าน Android Media Session API ในฐานะส่วนหนึ่งของ API นี้ Media ได้รับออบเจ็กต์ PlaybackState ซึ่งสื่อสารสถานะปัจจุบันของแอพสื่อ

ขั้นตอนการลงชื่อเข้าใช้เริ่มต้นเมื่อแอปสื่อเปลี่ยน PlaybackState เป็น STATE_ERROR รวมถึงรหัสข้อผิดพลาดเฉพาะ (ดูรายละเอียดด้านล่าง) เมื่อสิ่งนี้เกิดขึ้น Media จะแสดงคำอธิบายข้อผิดพลาดและความสามารถในการนำทางไปยังกิจกรรมการลงชื่อเข้าใช้ที่แอพสื่อใช้งาน

แอปสามารถใช้โฟลว์เดียวกันนี้เพื่อส่งสัญญาณสถานการณ์ข้อผิดพลาดอื่นๆ (เช่น ข้อผิดพลาดในการเชื่อมต่อเซิร์ฟเวอร์)

การจัดการข้อผิดพลาด

รูปที่ 4 การจัดการข้อผิดพลาด

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