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