ขยายแอปสื่อไปยัง Android สำหรับรถยนต์

นำแอปของคุณไปใช้กับยานพาหนะที่ใช้ Android Auto หรือ Android Automotive OS ใช้สถาปัตยกรรมแอปเดียวที่ใช้ได้กับทั้ง 2 กรณีเพื่อให้ผู้ใช้ทุกคนเพลิดเพลินกับแอปของคุณได้

Android สำหรับรถยนต์คืออะไร

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

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

Android Auto

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

Android Automotive OS

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

หมวดหมู่แอปที่รองรับ

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

แอปสื่อสร้างขึ้นโดยใช้ MediaLibraryService และ MediaSession ใน Android Automotive OS คุณยังสร้างหน้าจอลงชื่อเข้าใช้และหน้าจอการตั้งค่า (สำหรับใช้ขณะจอดรถ) โดยใช้ Views หรือ Compose ได้ด้วย

แอปวิดีโอช่วยให้ผู้ใช้ดูวิดีโอสตรีมมิงขณะจอดรถได้ วัตถุประสงค์หลักของแอปเหล่านี้คือการแสดงวิดีโอสตรีมมิง แอปเหล่านี้สร้างขึ้นโดยใช้ Views หรือ Compose ดูข้อมูลเพิ่มเติมได้ที่สร้างแอปเล่นวิดีโอสำหรับ Android Automotive OS และสร้างแอปวิดีโอสำหรับ Android Automotive OS

สร้างแอปเล่นเสียงสำหรับรถยนต์

คู่มือนี้ถือว่าคุณมีแอปเล่นสื่อพื้นฐานอยู่แล้ว หากยังไม่มี ให้ไปที่สร้างแอปมีเดียเพลเยอร์พื้นฐานเพื่อเริ่มต้นใช้งาน

คู่มือนี้จะให้ข้อมูลเกี่ยวกับสิ่งที่คุณต้องทำ รวมถึงลิงก์ไปยังแหล่งข้อมูลเพิ่มเติมพร้อมคำแนะนำที่เฉพาะเจาะจง

คอมโพเนนต์การเล่น

Media3 มีองค์ประกอบสำคัญหลายอย่างสำหรับ Use Case การเล่น คุณจะคุ้นเคยกับคลาสที่ประกอบขึ้นเป็นคอมโพเนนต์เหล่านี้หากเคยทำงานกับคลังสื่อ Android เวอร์ชันก่อนหน้า

แผนภาพต่อไปนี้แสดงให้เห็นว่าคอมโพเนนต์เหล่านี้ทำงานร่วมกันอย่างไรในแอปทั่วไป

คอมโพเนนต์ต่างๆ ของแอปสื่อที่ใช้ Media3 จะเชื่อมต่อกันด้วยวิธีง่ายๆ หลายวิธีเนื่องจากมีการแชร์อินเทอร์เฟซและคลาส
รูปที่ 1: คอมโพเนนต์ของแอปสื่อ

ดูข้อมูลเพิ่มเติมได้ที่คอมโพเนนต์การเล่น

ใช้ MediaLibraryService และ MediaLibrarySession

MediaLibraryService มี API ที่ได้มาตรฐานเพื่อแสดงและอนุญาตให้เข้าถึงคลังสื่อของคุณ ซึ่งจำเป็นเมื่อเพิ่มการรองรับ Android Auto หรือ Android Automotive OS ลงในแอปสื่อ เนื่องจากแพลตฟอร์มเหล่านี้มี UI ที่ปลอดภัยสำหรับผู้ขับขี่สำหรับคลังสื่อของคุณเอง ดูข้อมูลเพิ่มเติมเกี่ยวกับการติดตั้งใช้งานและการใช้ MediaLibraryService ได้ที่แสดงเนื้อหาด้วย MediaLibraryService

สำหรับตัวควบคุมการเล่น ให้ใช้เซสชันสื่อ MediaSession API มอบวิธีสากลในการโต้ตอบกับโปรแกรมเล่นเสียงหรือวิดีโอ ไลบรารี Jetpack Media3 มี MediaLibrarySession ซึ่งขยาย MediaSession เพื่อเพิ่ม API การเรียกดูเนื้อหา

การเชื่อมต่อเซสชันสื่อกับเพลเยอร์ช่วยให้แอปโฆษณาการเล่นสื่อภายนอกและรับคำสั่งการเล่นจากแหล่งที่มาภายนอก เช่น Android Auto, Android Automotive OS หรือ Google Assistant ได้ ดูข้อมูลเพิ่มเติมได้ที่ควบคุมและโฆษณาการเล่นโดยใช้ MediaSession และใช้ MediaLibrarySession

เซสชันสื่อควรประกาศการรองรับคำสั่งเพลเยอร์ต่อไปนี้เป็นอย่างน้อย

คู่มือเปิดใช้ตัวควบคุมการเล่นจะอธิบายวิธีปรับแต่งตัวควบคุมการเล่นในรถยนต์

เมื่อ Android Auto หรือ Android Automotive OS เชื่อมต่อกับแอปของคุณ ระบบจะขอคลังเนื้อหาเพื่อแสดง ซึ่งจะทริกเกอร์เมธอด Callback onGetLibraryRoot() คุณสามารถคืนค่ารายการสื่อระดับรูทได้อย่างรวดเร็วเพื่อให้สิทธิ์เข้าถึงคลังภาพของคุณ ระบบจะเรียกใช้เมธอด Callback onGetChildren() เมื่อ Android Auto หรือ Android Automotive OS พยายามเรียกดูระดับที่ลึกขึ้นของคลังเนื้อหา

แพลตฟอร์มเหล่านี้บังคับใช้ขีดจำกัดเพิ่มเติมเกี่ยวกับวิธีจัดโครงสร้างคลังเนื้อหา ดูรายละเอียดเกี่ยวกับการปรับแต่งวิธีแสดงคลังเนื้อหาได้ที่คู่มือสร้างบริการเบราว์เซอร์สื่อ

ประกาศการรองรับ Android Auto

ใช้รายการไฟล์ Manifest ต่อไปนี้เพื่อประกาศว่าแอปโทรศัพท์ของคุณรองรับ Android Auto

<application>
    ...
    <meta-data android:name="com.google.android.gms.car.application"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

รายการไฟล์ Manifest นี้หมายถึงไฟล์ XML ที่ประกาศความสามารถด้านยานยนต์ที่แอปของคุณรองรับ หากต้องการระบุว่าคุณมีแอปสื่อ ให้เพิ่มไฟล์ XML ชื่อ automotive_app_desc.xml ลงในไดเรกทอรี res/xml/ ในโปรเจ็กต์ ไฟล์นี้ควรมีเนื้อหาต่อไปนี้

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

ประกาศการรองรับ Android Automotive OS

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

ทำตามขั้นตอนต่อไปนี้เพื่อเพิ่มโมดูลยานยนต์ลงในโปรเจ็กต์

  1. ใน Android Studio ให้คลิก File > New > New Module
  2. เลือกโมดูลยานยนต์ แล้วคลิกถัดไป
  3. ป้อนชื่อแอปพลิเคชัน/ไลบรารี นี่คือชื่อที่ผู้ใช้เห็นสำหรับแอปของคุณใน Android Automotive OS
  4. ป้อนชื่อโมดูล
  5. ปรับชื่อแพ็กเกจให้ตรงกับแอปของคุณ
  6. เลือก API 28: Android 9.0 (Pie) สำหรับ SDK ขั้นต่ำ แล้วคลิกถัดไป

    รถยนต์ทุกคันที่รองรับ Android Automotive OS จะทำงานบน Android 9 (API ระดับ 28) ขึ้นไป ดังนั้นการเลือกค่านี้จะกำหนดเป้าหมายรถยนต์ที่เข้ากันได้ทั้งหมด

  7. เลือกไม่มีกิจกรรม แล้วคลิกเสร็จสิ้น

หลังจากสร้างโมดูลใน Android Studio แล้ว ให้เปิด AndroidManifest.xml ในโมดูลยานยนต์ใหม่ โดยทำดังนี้

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

</manifest>

องค์ประกอบ application มีข้อมูลแอปมาตรฐานบางอย่าง รวมถึงองค์ประกอบ uses-feature ที่ประกาศการรองรับ Android Automotive OS โปรดทราบว่าไม่มีการประกาศกิจกรรมในไฟล์ Manifest

หากคุณใช้การตั้งค่าหรือกิจกรรมการลงชื่อเข้าใช้ ให้เพิ่มที่นี่ กิจกรรมเหล่านี้จะทริกเกอร์โดยระบบโดยใช้ Intent ที่ชัดเจน และเป็นกิจกรรมเดียวที่คุณประกาศภายในไฟล์ Manifest สำหรับแอป Android Automotive OS

หลังจากเพิ่มการตั้งค่าหรือกิจกรรมการลงชื่อเข้าใช้แล้ว ให้สร้างไฟล์ Manifest ให้เสร็จสมบูรณ์โดยตั้งค่าแอตทริบิวต์ android:appCategory="audio" ในองค์ประกอบ application และเพิ่มองค์ประกอบ uses-feature ต่อไปนี้

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.media">

    <application
        android:allowBackup="true"
        android:appCategory="audio"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" />

    <uses-feature
        android:name="android.hardware.type.automotive"
        android:required="true" />

    <uses-feature
        android:name="android.hardware.wifi"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.portrait"
        android:required="false" />
    <uses-feature
        android:name="android.hardware.screen.landscape"
        android:required="false" />

</manifest>

การตั้งค่าฟีเจอร์เหล่านี้เป็น required="false" อย่างชัดเจนจะช่วยให้มั่นใจว่าแอปของคุณจะไม่ขัดแย้งกับฟีเจอร์ฮาร์ดแวร์ที่มีอยู่ในอุปกรณ์ Automotive OS

ใช้รายการไฟล์ Manifest ต่อไปนี้เพื่อประกาศว่าแอปของคุณรองรับ Android Automotive OS

<application>
    ...
    <meta-data android:name="com.android.automotive"
        android:resource="@xml/automotive_app_desc"/>
    ...
</application>

รายการไฟล์ Manifest นี้อ้างอิงถึงไฟล์ XML ที่ประกาศความสามารถด้านยานยนต์ที่แอปของคุณรองรับ

หากต้องการระบุว่าคุณมีแอปสื่อ ให้เพิ่มไฟล์ XML ชื่อ automotive_app_desc.xml ลงในไดเรกทอรี res/xml/ ในโปรเจ็กต์ ใส่เนื้อหาต่อไปนี้ในไฟล์นี้

<automotiveApp>
    <uses name="media"/>
</automotiveApp>

ตัวกรอง Intent

Android Automotive OS ใช้ Intent ที่ชัดแจ้งเพื่อทริกเกอร์กิจกรรมในแอปสื่อของคุณ อย่าใส่กิจกรรมที่มีตัวกรอง Intent CATEGORY_LAUNCHER หรือ ACTION_MAIN ในไฟล์ Manifest

กิจกรรมอย่างในตัวอย่างต่อไปนี้มักจะกำหนดเป้าหมายเป็นโทรศัพท์หรืออุปกรณ์เคลื่อนที่อื่นๆ ประกาศกิจกรรมเหล่านี้ในโมดูลที่สร้างแอปโทรศัพท์ ไม่ใช่ในโมดูลที่สร้างแอป Android Automotive OS

<activity android:name=".MyActivity">
<intent-filter>
<!-- You can't use either of these intents for Android Automotive OS -->
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!--
In their place, you can include other intent filters for any activities
that your app needs for Android Automotive OS, such as settings or
sign-in activities.
-->
</intent-filter>
</activity>

ขั้นตอนเพิ่มเติม

เมื่อมีแอปสำหรับ Android Auto และ Android Automotive OS แล้ว คุณอาจต้องทำตามขั้นตอนเพิ่มเติมเพื่อเพิ่มประสิทธิภาพแอปให้ใช้งานได้อย่างปลอดภัยยิ่งขึ้นขณะขับรถ ดูคำแนะนำเพิ่มเติมเพื่อช่วยให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ปลอดภัยและสะดวกสบายได้ที่คู่มือทางเทคนิคสำหรับการสั่งงานด้วยเสียง การป้องกันการเสียสมาธิ และการจัดการข้อผิดพลาด

สร้างแอปเล่นวิดีโอสำหรับ Android Automotive OS

เนื่องจากแอปวิดีโอจัดอยู่ในหมวดหมู่ที่แยกต่างหากจากแอปสื่อในรถยนต์ คุณจึงต้องทราบข้อกำหนดเฉพาะบางอย่างสำหรับแอปวิดีโอตามที่อธิบายไว้ในสร้างแอปสำหรับรถยนต์ที่จอดอยู่และสร้างแอปวิดีโอสำหรับ Android Automotive OS โดยทำตามวิธีการต่อไปนี้

ทำเครื่องหมายแอปของคุณเป็นแอปวิดีโอ

หากต้องการระบุว่าแอปรองรับวิดีโอ ให้เพิ่มแอตทริบิวต์ android:appCategory="video" ลงในองค์ประกอบ <application> ของไฟล์ Manifest

<manifest ...>
    ...
    <application
      ...
      android:appCategory="video">
        ...
    </application>
</manifest>

ประกาศฟีเจอร์ฮาร์ดแวร์ Android Automotive OS

หากต้องการประกาศว่าแอปของคุณรองรับอุปกรณ์ Android Automotive OS ให้เพิ่มองค์ประกอบ android.hardware.type.automotive <uses-feature> ลงในไฟล์ Manifest ดูประกาศฟีเจอร์ฮาร์ดแวร์ AAOS เพื่อดูคำแนะนำว่าจะตั้งค่าแอตทริบิวต์ android:required เป็น "false" หรือ "true"

<manifest ...>
  ...
  <uses-feature android:name="android.hardware.type.automotive" ...>
  ...
</manifest>