เพิ่มการรองรับ Android Automotive OS ในแอปสื่อของคุณ

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

ภาพรวมการพัฒนา

การเพิ่มการรองรับ Android Automotive OS ใช้เวลาเพียงไม่กี่ขั้นตอนตามที่อธิบายไว้ ในส่วนต่อไปนี้

  1. เปิดใช้ฟีเจอร์ยานยนต์ใน Android Studio
  2. สร้างโมดูลยานยนต์
  3. อัปเดตทรัพยากร Dependency ของ Gradle
  4. ใช้การตั้งค่าและกิจกรรมการลงชื่อเข้าใช้ (ไม่บังคับ)
  5. อ่านคำแนะนำเกี่ยวกับโฮสต์สื่อ (ไม่บังคับ)

ข้อควรพิจารณาในการออกแบบ

Android Automotive OS จะดูแลการจัดวางเนื้อหาสื่อที่ได้รับจากบริการเบราว์เซอร์สื่อของแอป ซึ่งหมายความว่าแอปจะไม่วาด UI และจะไม่เริ่มกิจกรรมใดๆ เมื่อผู้ใช้เรียกใช้การเล่นสื่อ

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

สร้างโปรเจ็กต์

คุณต้องตั้งค่าหลายส่วนของโปรเจ็กต์แอปเพื่อเปิดใช้ การรองรับ Android Automotive OS

เปิดใช้ฟีเจอร์ยานยนต์ใน Android Studio

ใช้ Android Studio 4.0 ขึ้นไปเพื่อให้มั่นใจว่าฟีเจอร์ Automotive OS ทั้งหมดจะ เปิดใช้

สร้างโมดูลยานยนต์

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

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

  1. ใน Android Studio ให้คลิกไฟล์ > ใหม่ > โมดูลใหม่
  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 ขององค์ประกอบ <application> เป็น "audio"

<application
  ...
  android:appCategory="audio" />

ประกาศข้อกำหนดของฟีเจอร์

แอปทั้งหมดที่สร้างขึ้นสำหรับ Android Automotive OS ต้องเป็นไปตามข้อกำหนดบางอย่างจึงจะ จัดจำหน่ายโดยใช้ Google Play ได้ ดูข้อมูลเพิ่มเติมได้ที่ข้อกำหนดของฟีเจอร์ Google Play

ประกาศการรองรับสื่อสำหรับ Android 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>

อัปเดตการขึ้นต่อกันของ Gradle

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

my-auto-module/build.gradle

ดึงดูด

buildscript {
    ...
    dependencies {
        ...
        implementation project(':shared_module_name')
    }
}

Kotlin

buildscript {
    ...
    dependencies {
        ...
        implementation(project(":shared_module_name"))
    }
}

ใช้การตั้งค่าและกิจกรรมการลงชื่อเข้าใช้

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

ใช้กิจกรรมเหล่านี้เฉพาะในกรณีที่แอป Android Automotive OS ต้องอนุญาตให้ผู้ใช้ลงชื่อเข้าใช้หรือระบุการตั้งค่าแอป Android Auto จะไม่ใช้กิจกรรมเหล่านี้

เวิร์กโฟลว์กิจกรรม

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

เวิร์กโฟลว์สำหรับกิจกรรมการตั้งค่าและการลงชื่อเข้าใช้

รูปที่ 1 เวิร์กโฟลว์การตั้งค่าและกิจกรรมการลงชื่อเข้าใช้

ป้องกันการรบกวนในการตั้งค่าและกิจกรรมการลงชื่อเข้าใช้

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

<!-- NOT ALLOWED -->
<meta-data
  android:name="distractionOptimized"
  android:value="true"/>

เพิ่มกิจกรรมการตั้งค่า

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

ประกาศกิจกรรมการตั้งค่า

คุณต้องประกาศกิจกรรมการตั้งค่าในไฟล์ Manifest ของแอป ดังที่แสดงในข้อมูลโค้ดต่อไปนี้

<application>
    ...
    <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>
    ...
</application>

ใช้กิจกรรมการตั้งค่า

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

ส่วนที่เหลือของส่วนนี้จะแสดงวิธีปรับโค้ดจากแอปตัวอย่าง Universal Android Music Player (UAMP) เพื่อใช้กิจกรรมการตั้งค่าสำหรับแอป

หากต้องการเริ่มต้น ให้ดาวน์โหลดโค้ดตัวอย่างโดยทำดังนี้

# Clone the UAMP repository
git clone https://github.com/android/uamp.git

# Fetch the appropriate pull request to your local repository
git fetch origin pull/323/head:NEW_LOCAL_BRANCH_NAME

# Switch to the new branch
git checkout NEW_LOCAL_BRANCH_NAME

หากต้องการนำกิจกรรมไปใช้ ให้ทำตามขั้นตอนต่อไปนี้

  1. คัดลอกโฟลเดอร์ automotive/automotive-lib ไปยังโมดูลยานยนต์
  2. กำหนดโครงสร้างค่ากำหนดตามที่ระบุใน automotive/src/main/res/xml/preferences.xml
  3. ใช้PreferenceFragmentCompat เพื่อให้กิจกรรมการตั้งค่าแสดง ดูข้อมูลเพิ่มเติมได้ที่ไฟล์ SettingsFragment.kt และ SettingsActivity.kt ใน UAMP และคู่มือการตั้งค่า Android

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

  • มีระดับความลึกไม่เกิน 2 ระดับใต้มุมมองหลักใน กิจกรรมการตั้งค่า
  • อย่าใช้ DropDownPreference โปรดใช้ ListPreference แทน
  • องค์ประกอบขององค์กร
    • PreferenceScreen
      • ต้องเป็นระดับบนสุดของโครงสร้างค่ากำหนด
    • PreferenceCategory
      • ใช้เพื่อจัดกลุ่มออบเจ็กต์ Preference เข้าด้วยกัน
      • ใส่ title
  • ใส่ key และ title ในคอมโพเนนต์ต่อไปนี้ทั้งหมด นอกจากนี้ คุณยัง ใส่summary icon หรือทั้ง 2 อย่างได้ด้วย
    • Preference
      • ปรับแต่งตรรกะในแฮนเดิลการเรียกกลับ onPreferenceTreeClick() ของการติดตั้งใช้งาน PreferenceFragmentCompat
    • CheckBoxPreference
      • ใช้ summaryOn หรือ summaryOff แทน summary สำหรับข้อความแบบมีเงื่อนไขได้
    • SwitchPreference
      • ใช้ summaryOn หรือ summaryOff แทน summary สำหรับข้อความแบบมีเงื่อนไขได้
      • มี switchTextOn หรือ switchTextOff ได้
    • SeekBarPreference
      • ใส่ min, max และ defaultValue
    • EditTextPreference
      • รวมถึง dialogTitle, positiveButtonText และ negativeButtonText
      • อาจมี dialogMessage และ/หรือ dialogLayoutResource
    • com.example.android.uamp.automotive.lib.ListPreference
      • ส่วนใหญ่มาจาก ListPreference
      • ใช้เพื่อแสดงรายการแบบตัวเลือกเดียวของออบเจ็กต์ Preference
      • ต้องมีอาร์เรย์ของ entries และ entryValues ที่เกี่ยวข้อง
    • com.example.android.uamp.automotive.lib.MultiSelectListPreference
      • ส่วนใหญ่มาจาก MultiSelectListPreference
      • ใช้เพื่อแสดงรายการแบบหลายตัวเลือกของออบเจ็กต์ Preference
      • ต้องมีอาร์เรย์ของ entries และ entryValues ที่เกี่ยวข้อง

เพิ่มกิจกรรมการลงชื่อเข้าใช้

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

ต้องลงชื่อเข้าใช้เมื่อเริ่มแอป

หากต้องการกำหนดให้ผู้ใช้ต้องลงชื่อเข้าใช้ก่อนจึงจะใช้แอปได้ บริการเบราว์เซอร์สื่อ ของคุณต้องทำสิ่งต่อไปนี้

  1. ในเมธอด onLoadChildren() ของบริการ ให้ส่งผลลัพธ์ null โดยใช้เมธอด sendResult()
  2. ตั้งค่า PlaybackStateCompat ของเซสชันสื่อเป็น STATE_ERROR โดยใช้เมธอด setState() ซึ่งจะบอก Android Automotive OS ว่าไม่สามารถดำเนินการอื่นๆ ได้จนกว่าจะแก้ไขข้อผิดพลาดแล้ว
  3. ตั้งค่ารหัสข้อผิดพลาด PlaybackStateCompat ของเซสชันสื่อเป็น ERROR_CODE_AUTHENTICATION_EXPIRED ซึ่งจะบอก Android Automotive OS ว่าผู้ใช้ต้องตรวจสอบสิทธิ์
  4. ตั้งค่าPlaybackStateCompat ข้อความแสดงข้อผิดพลาดของเซสชันสื่อโดยใช้เมธอด setErrorMessage() เนื่องจากข้อความแสดงข้อผิดพลาดนี้แสดงต่อผู้ใช้ ให้แปลเป็นภาษาท้องถิ่นปัจจุบันของผู้ใช้
  5. ตั้งค่า PlaybackStateCompat extras ของเซสชันสื่อโดยใช้เมธอด setExtras() ระบุคีย์ 2 รายการต่อไปนี้

    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL: สตริงที่แสดงบนปุ่มที่เริ่มเวิร์กโฟลว์การลงชื่อเข้าใช้ เนื่องจากสตริงนี้แสดงต่อผู้ใช้ ให้แปลเป็นภาษาท้องถิ่นของผู้ใช้ ปัจจุบัน
    • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT: PendingIntent ที่นำผู้ใช้ไปยังกิจกรรมการลงชื่อเข้าใช้เมื่อผู้ใช้แตะปุ่มที่อ้างอิงโดย PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL

ข้อมูลโค้ดต่อไปนี้แสดงวิธีที่แอปกำหนดให้ผู้ใช้ลงชื่อเข้าใช้ก่อนใช้แอป

Kotlin

import androidx.media.utils.MediaConstants

val signInIntent = Intent(this, SignInActivity::class.java)
val signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0)
val extras = Bundle().apply {
    putString(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
        "Sign in"
    )
    putParcelable(
        MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
        signInActivityPendingIntent
    )
}

val playbackState = PlaybackStateCompat.Builder()
        .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
        .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
        )
        .setExtras(extras)
        .build()
mediaSession.setPlaybackState(playbackState)

Java

import androidx.media.utils.MediaConstants;

Intent signInIntent = new Intent(this, SignInActivity.class);
PendingIntent signInActivityPendingIntent = PendingIntent.getActivity(this, 0,
    signInIntent, 0);
Bundle extras = new Bundle();
extras.putString(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL,
    "Sign in");
extras.putParcelable(
    MediaConstants.PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT,
    signInActivityPendingIntent);

PlaybackStateCompat playbackState = new PlaybackStateCompat.Builder()
    .setState(PlaybackStateCompat.STATE_ERROR, 0, 0f)
    .setErrorMessage(
            PlaybackStateCompat.ERROR_CODE_AUTHENTICATION_EXPIRED,
            "Authentication required"
    )
    .setExtras(extras)
    .build();
mediaSession.setPlaybackState(playbackState);

หลังจากตรวจสอบสิทธิ์ผู้ใช้สำเร็จแล้ว ให้ตั้งค่า PlaybackStateCompat กลับไปเป็นสถานะอื่นที่ไม่ใช่ STATE_ERROR จากนั้นนำผู้ใช้กลับไปที่ Android Automotive OS โดยเรียกใช้เมธอด finish() ของกิจกรรม

ใช้กิจกรรมการลงชื่อเข้าใช้

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

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

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

ใช้ AccountManager

แอป Android Automotive OS ที่มีการตรวจสอบสิทธิ์ต้องใช้ AccountManager ด้วยเหตุผลต่อไปนี้

  • UX ที่ดีขึ้นและการจัดการบัญชีที่ง่ายขึ้น: ผู้ใช้สามารถจัดการบัญชีทั้งหมด ได้จากเมนูบัญชีในการตั้งค่าระบบ ซึ่งรวมถึงการลงชื่อเข้าใช้ และการลงชื่อออก
  • ประสบการณ์การใช้งานแบบ"ผู้มาเยือน": รถยนต์เป็นอุปกรณ์ที่แชร์ ซึ่งหมายความว่า OEM สามารถเปิดใช้ประสบการณ์การใช้งานแบบ "ผู้มาเยือน" ในยานพาหนะได้ โดยจะเพิ่มบัญชีไม่ได้ ข้อจำกัดนี้ทำได้โดยใช้ DISALLOW_MODIFY_ACCOUNTS สำหรับ AccountManager

สิทธิ์

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

เริ่มแอปโฮสต์สื่อ

คุณสร้าง Intent เพื่อเปิดแอปโฮสต์สื่อไปยังแอปหรือเนื้อหาภายในแอปได้ เช่น

  • แอปของคุณสามารถโพสต์การแจ้งเตือนด้วย Intent รอดำเนินการ ที่อนุญาตให้ผู้ใช้เปิดแอปเพื่อฟังเนื้อหาใหม่ได้
  • แอปของคุณสามารถจัดการ Deep Link และเปิดแอปโฮสต์ไปยังมุมมองที่เหมาะสมที่สุดได้

พิจารณาความสามารถของโฮสต์สื่อ

แอปโฮสต์สื่อแต่ละเวอร์ชันจะรองรับความสามารถที่แตกต่างกัน โฮสต์ระบุการรองรับความสามารถต่างๆ โดยรวมตัวกรอง Intent สำหรับการดำเนินการ Intent ต่อไปนี้

แอปโฮสต์สื่อทั้งหมดรองรับ Intent MEDIA_TEMPLATE หากต้องการตรวจสอบว่าโฮสต์สื่อรองรับMEDIA_TEMPLATE_V2 Intent หรือไม่ คุณสามารถใช้ queryIntentActivities() ดังนี้

val isMediaTemplateV2Supported = packageManager.queryIntentActivities(
  Intent(MediaIntentExtras.ACTION_MEDIA_TEMPLATE_V2),
  //  MATCH_DEFAULT_ONLY  since the host should be started with implicit intents
  //  MATCH_SYSTEM_ONLY  excludes any apps that aren't preinstalled
  PackageManager.MATCH_DEFAULT_ONLY or PackageManager.MATCH_SYSTEM_ONLY
).size > 0

สร้างและใช้อินเทนต์

คุณระบุข้อมูลเพิ่มเติมต่อไปนี้ได้เมื่อสร้าง Intent ที่ใช้เพื่อเริ่มแอปโฮสต์สื่อ ทั้งนี้ขึ้นอยู่กับการดำเนินการตาม Intent ที่โฮสต์สื่อรองรับและกรณีการใช้งานเฉพาะของคุณ

คีย์เพิ่มเติม ประเภท คำอธิบาย การดำเนินการที่รองรับ
EXTRA_KEY_MEDIA_COMPONENT String ชื่อคอมโพเนนต์ที่ยุบของMediaBrowserService แอปโฮสต์สื่อควรเชื่อมต่อกับแอปของคุณ โดยทั่วไปคือแอปของคุณ หากไม่ได้ระบุข้อมูลเพิ่มเติมนี้ โฮสต์สื่อจะใช้แหล่งที่มาของสื่อที่ใช้งานอยู่เป็นค่าเริ่มต้น MEDIA_TEMPLATE, MEDIA_TEMPLATE_V2
EXTRA_KEY_SEARCH_QUERY String คำค้นหาที่จะใช้เมื่อโทร MEDIA_TEMPLATE, MEDIA_TEMPLATE_V2
EXTRA_KEY_MEDIA_ID String รหัสสื่อที่จะเปิดในมุมมองการเรียกดู MEDIA_TEMPLATE_V2
EXTRA_KEY_SEARCH_ACTION Integer การดำเนินการที่ต้องทำหลังจากค้นหา EXTRA_KEY_SEARCH_QUERY เสร็จสมบูรณ์ MEDIA_TEMPLATE_V2

ตัวอย่างเช่น เมื่อใช้โฮสต์ที่รองรับMEDIA_TEMPLATE_V2การดำเนินการ โค้ดต่อไปนี้จะเปิดแอปโฮสต์สื่อ ให้เชื่อมต่อกับMyMediaBrowserService ค้นหา "Jazz" แล้วเล่นรายการแรกจากผลการค้นหา ในโฮสต์อื่นๆ ทั้งหมด ระบบจะเปิดเฉพาะแอปโฮสต์สื่อและค้นหา "Jazz" โดยให้ผู้ใช้เลือกรายการที่จะเล่นจากผลการค้นหา

val startMediaHostIntent = Intent(ACTION_MEDIA_TEMPLATE)
  .putExtra(MediaIntentExtras.EXTRA_KEY_MEDIA_COMPONENT, MyMediaBrowserService::class.java)
  .putExtra(MediaIntentExtras.EXTRA_KEY_SEARCH_QUERY, "Jazz")
  .putExtra(MediaIntentExtras.EXTRA_KEY_SEARCH_ACTION, MediaIntentExtras.EXTRA_VALUE_PLAY_FIRST_ITEM_FROM_SEARCH)

context.startActivity(startMediaHostIntent)

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

เพิ่มตัวกรอง Intent ของ Deep Link

หากต้องการแจ้งให้ระบบปฏิบัติการทราบว่าแอปของคุณจัดการ Deep Link ได้ แอปจะต้องมี กิจกรรมที่มีตัวกรอง Intent ที่เหมาะสม ดูคำแนะนำเกี่ยวกับรูปแบบของตัวกรอง Intent ที่ใช้สำหรับ Deep Link ได้ที่เพิ่มตัวกรอง Intent สำหรับ ลิงก์ขาเข้า

โปรดรองรับ Deep Link ทั้งหมดที่แอปบนอุปกรณ์เคลื่อนที่รองรับ หากแอปในรถยนต์รองรับได้อย่างสมเหตุสมผล เพื่อให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ดีที่สุด หากแอปมีการตั้งค่าหรือกิจกรรมการลงชื่อเข้าใช้ ควรประกาศตัวกรอง Intent สำหรับการจัดการการตั้งค่าและ Deep Link ของการลงชื่อเข้าใช้ภายใน<activity>องค์ประกอบ Manifest ที่เกี่ยวข้อง สำหรับการเล่นสื่อและ Deep Link ในการเรียกดู คุณ สามารถใช้กิจกรรม Trampoline ตามที่อธิบายไว้ในส่วนนี้

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

เนื่องจากแอปโฮสต์เป็นผู้ดึง UI สำหรับการเรียกดูและการเล่น กิจกรรม ที่ใช้จัดการ Deep Link สำหรับการเล่นและการเรียกดูจึงไม่ควรมี UI ของตัวเอง

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

fun DeepLinkTrampolineActivity : ComponentActivity() {

  override fun onCreate() {
    handleIntent(intent)
  }

  override fun onNewIntent(intent: Intent) {
    handleIntent(intent)
  }

  private fun handleIntent(intent: Intent) {
    // Handle any side effects, such as adding a song to the queue
    ...
    // Build the intent used to start the media host app
    val startMediaHostIntent = ...
    startActivity(intent)
    // Finish the activity immediately so it isn't shown on screen
    finish()
  }
}

อ่านเคล็ดลับสำหรับโฮสต์สื่อ

แอปพลิเคชันของคุณอาจได้รับข้อมูลเพิ่มเติมต่อไปนี้ ทั้งนี้ขึ้นอยู่กับแอปพลิเคชันระบบ (รวมถึงเวอร์ชัน) ที่เชื่อมต่อกับ บริการเบราว์เซอร์สื่อ

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

ข้อผิดพลาดในแอปสื่อบน Android Automotive OS จะสื่อสารโดยใช้ PlaybackStateCompat ของเซสชันสื่อ สำหรับข้อผิดพลาดทั้งหมด ให้ตั้งรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่เหมาะสมใน PlaybackStateCompat ซึ่งจะทำให้ Toast ปรากฏใน UI

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

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

เมื่อเล่นไม่ได้ เช่น เมื่อไม่มีการเชื่อมต่ออินเทอร์เน็ตและไม่มีเนื้อหาแบบออฟไลน์ ให้ตั้งค่าสถานะ PlaybackStateCompat เป็น STATE_ERROR

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

หากคุณโหลดโครงสร้างการเรียกดูไม่ได้ในบางครั้ง เช่น หากคุณ ต้องมีการตรวจสอบสิทธิ์และผู้ใช้ไม่ได้ลงชื่อเข้าใช้ ให้ส่งโครงสร้างการเรียกดูที่ว่างเปล่า หากต้องการระบุ ให้แสดงผลเป็น null จาก onLoadChildren() สำหรับ โหนดสื่อรูท เมื่อเกิดกรณีนี้ขึ้น ระบบจะแสดงข้อผิดพลาดแบบเต็มหน้าจอ พร้อมข้อความแสดงข้อผิดพลาดที่ตั้งค่าไว้ใน PlaybackStateCompat

ข้อผิดพลาดที่ดำเนินการได้

หากข้อผิดพลาดดำเนินการได้ ให้ตั้งค่าเพิ่มเติมอีก 2 รายการต่อไปนี้ใน PlaybackStateCompat

  • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_LABEL: ป้ายกำกับสำหรับปุ่มที่คลิกเพื่อแก้ไขข้อผิดพลาด เนื่องจากสตริงนี้แสดงต่อผู้ใช้ ให้แปลเป็นภาษาท้องถิ่นปัจจุบันของผู้ใช้
  • PLAYBACK_STATE_EXTRAS_KEY_ERROR_RESOLUTION_ACTION_INTENT: PendingIntent ที่ปุ่มเรียกใช้เพื่อแก้ไขข้อผิดพลาด เช่น การเปิดใช้งานการลงชื่อเข้าใช้

ข้อผิดพลาดที่ดำเนินการได้จะปรากฏเป็น Dialog และผู้ใช้จะแก้ไขได้เมื่อ รถหยุดเท่านั้น

การทดสอบกรณีข้อผิดพลาด

ตรวจสอบว่าแอปจัดการข้อผิดพลาดในทุกสถานการณ์ได้อย่างราบรื่น ซึ่งรวมถึงสถานการณ์ต่อไปนี้

  • ระดับต่างๆ ของผลิตภัณฑ์: เช่น ฟรีเทียบกับพรีเมียม หรือ ลงชื่อเข้าใช้เทียบกับไม่ได้ลงชื่อเข้าใช้
  • สถานะการขับขี่ที่แตกต่างกัน: เช่น จอดเทียบกับการขับ
  • สถานะการเชื่อมต่อที่แตกต่างกัน: เช่น ออนไลน์เทียบกับออฟไลน์

ข้อควรพิจารณาอื่นๆ

โปรดคำนึงถึงข้อควรพิจารณาอื่นๆ เหล่านี้เมื่อพัฒนาแอป Android Automotive OS

เนื้อหาออฟไลน์

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

สิ่งที่คุณควรทราบเมื่อพิจารณากลยุทธ์การสนับสนุนแบบออฟไลน์มีดังนี้

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

การรองรับ WebView

Android Automotive OS รองรับ WebView แต่จะอนุญาตให้ใช้เฉพาะ การตั้งค่าและกิจกรรมการลงชื่อเข้าใช้ของคุณเท่านั้น กิจกรรมที่ใช้ WebView ต้องมี ความสามารถในการ "ปิด" หรือ "กลับ" นอก WebView

ตัวอย่างกรณีการใช้งาน WebView ที่ยอมรับได้มีดังนี้

  • การแสดงนโยบายความเป็นส่วนตัว ข้อกำหนดในการให้บริการ หรือลิงก์อื่นๆ ที่เกี่ยวข้องกับกฎหมาย ในกิจกรรมการตั้งค่า
  • โฟลว์บนเว็บในกิจกรรมการลงชื่อเข้าใช้

เมื่อใช้ WebView คุณจะเปิดใช้ JavaScript ได้

รักษาความปลอดภัยให้ WebView

ใช้มาตรการป้องกันทั้งหมดที่เป็นไปได้เพื่อให้แน่ใจว่า WebView ของคุณไม่ใช่ จุดเริ่มต้นในการเข้าถึงอินเทอร์เน็ตที่กว้างขึ้น ดูข้อมูลโค้ดต่อไปนี้เพื่อดู ตัวอย่างวิธีล็อก WebView ไปยัง URL ที่ใช้ในการเรียก loadUrl() และป้องกันการเปลี่ยนเส้นทาง เราขอแนะนำให้คุณใช้มาตรการป้องกัน เช่นนี้เมื่อเป็นไปได้ เช่น เมื่อแสดง ลิงก์ที่เกี่ยวข้องกับกฎหมาย

Kotlin

override fun shouldOverrideUrlLoading(webView: WebView,
                             webResourceRequest: WebResourceRequest): Boolean {
  val originalUri: Uri = Uri.parse(webView.originalUrl)
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.url)) {
    return false
  }
  if (webResourceRequest.isRedirect) {
    logger.w("Redirect detected, not following")
    return true
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.url)
  logger.w(
    String.format(
      "Navigation prevented to %s original is %s", webResourceRequest.url, originalUri))
  return true
}

Java

@Override
public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) {
  Uri originalUri = Uri.parse(webView.getOriginalUrl());
  // Check for allowed URLs
  if (originalUri.equals(Uri.parse(BLANK_URL))
      || originalUri.equals(webResourceRequest.getUrl())) {
    return false;
  }
  if (webResourceRequest.isRedirect()) {
    logger.w("Redirect detected, not following");
    return true;
  }
  setupWizardWebViewClientListener.onUriBlocked(webResourceRequest.getUrl());
  logger.w(
      String.format(
          "Navigation prevented to %s original is %s", webResourceRequest.getUrl(), originalUri));
  return true;
}

ชื่อแพ็กเกจ

เนื่องจากคุณเผยแพร่ชุดแพ็กเกจ Android (APK) แยกต่างหากสำหรับ Android Automotive OS คุณจึงนำชื่อแพ็กเกจจากแอปบนอุปกรณ์เคลื่อนที่มาใช้ซ้ำหรือสร้าง ชื่อแพ็กเกจใหม่ได้ หากใช้ชื่อแพ็กเกจอื่น แอปจะมีข้อมูล Play Store แยกกัน 2 รายการ หากใช้ชื่อแพ็กเกจปัจจุบันซ้ำ แอปจะมีข้อมูล เดียวในทั้ง 2 แพลตฟอร์ม

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

ตารางต่อไปนี้จะสรุปความแตกต่างที่สําคัญอื่นๆ ระหว่างการใช้ชื่อแพ็กเกจปัจจุบันกับชื่อแพ็กเกจใหม่

ฟีเจอร์ ชื่อแพ็กเกจเดียวกัน ชื่อแพ็กเกจใหม่
ข้อมูลสินค้าใน Store โสด หลายรายการ
การติดตั้งแบบมิเรอร์ ใช่: "ติดตั้งแอปซ้ำอย่างรวดเร็ว" ระหว่างวิซาร์ดการตั้งค่า ไม่
กระบวนการตรวจสอบของ Play Store การบล็อกรีวิว: หากรีวิวไม่ผ่านสำหรับ APK รายการใดรายการหนึ่ง ระบบจะบล็อก APK อื่นๆ ที่ส่งในรุ่นเดียวกัน รีวิวแต่ละรายการ
สถิติ เมตริก และ Vitals รวม: คุณสามารถกรองข้อมูลเฉพาะยานยนต์ได้ แยก
การจัดทำดัชนีและการจัดอันดับการค้นหา สร้างจากสถานะปัจจุบัน ไม่มีการยกยอด
การผสานรวมกับแอปอื่นๆ ไม่น่าจะต้องเปลี่ยนแปลงใดๆ หากมีการแชร์รหัสสื่อระหว่าง APK ทั้ง 2 รายการ อาจต้องอัปเดตแอปที่เกี่ยวข้อง เช่น สำหรับการเล่น URI ด้วย Google Assistant

คำถามที่พบบ่อย

ดูคำตอบสำหรับคำถามที่พบบ่อยเกี่ยวกับ Android Automotive OS ได้ในส่วนต่อไปนี้

ฮาร์ดแวร์

แอปของฉันจะเข้าถึงไมโครโฟนได้ไหม

สำหรับแอปที่กำหนดเป้าหมายเป็น Android 10 (ระดับ API 29) ขึ้นไป โปรดดูเอกสารประกอบเกี่ยวกับการแชร์อินพุตเสียง ซึ่งไม่สามารถทำได้ใน API ระดับ 29 ขึ้นไป

เราจะเข้าถึง API ของรถยนต์ใดได้บ้างและอย่างไร

คุณจะใช้ได้เฉพาะ API ที่ OEM เปิดเผย เรากำลัง พัฒนากระบวนการเพื่อกำหนดมาตรฐานวิธีเข้าถึง API เหล่านี้

แอปสามารถเข้าถึง Car API ได้โดยใช้ SetProperty() และ GetProperty() ใน CarPropertyManager ดูซอร์สโค้ด หรือเอกสารอ้างอิงเพื่อดูรายการพร็อพเพอร์ตี้ทั้งหมดที่ใช้ได้ หากพร็อพเพอร์ตี้มีคำอธิบายประกอบ ด้วย @SystemApi จะจำกัดไว้สำหรับแอปของระบบที่โหลดไว้ล่วงหน้า

ระบบรองรับตัวแปลงรหัสเสียงประเภทใดบ้าง

ดูรายละเอียดตัวแปลงรหัสเสียง ใน CDD ของ Android

ระบบรองรับ Widevine DRM ไหม

ได้ DRM ของ Widevine ได้รับการรองรับ

การพัฒนาและการทดสอบ

มีข้อจำกัดหรือคำแนะนำในการใช้ SDK และไลบรารีของบุคคลที่สามไหม

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

ฉันใช้บริการที่ทำงานอยู่เบื้องหน้าได้ไหม

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

การเผยแพร่แอป Android Automotive OS

ฉันจะเผยแพร่แอป Android Automotive OS โดยใช้ Google Play Console ได้อย่างไร

ดูรายละเอียดเกี่ยวกับวิธีเผยแพร่แอป Android Automotive OS โดยใช้ Google Play Console ได้ที่เผยแพร่ไปยังรถยนต์

แหล่งข้อมูลเพิ่มเติม

ดูข้อมูลเพิ่มเติมเกี่ยวกับ Android Automotive OS ได้ที่แหล่งข้อมูลเพิ่มเติมต่อไปนี้

ตัวอย่าง

คำแนะนำ

บล็อก

วิดีโอ

รายงานปัญหาเกี่ยวกับสื่อใน Android Automotive OS

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

สร้างปัญหาใหม่

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