สร้างแอปที่พักไว้สําหรับ Android Automotive OS

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

ทดสอบแอปที่มีอยู่บนโปรแกรมจำลอง Android Automotive OS

หากต้องการเริ่มสร้างแอปสำหรับ Android Automotive OS ให้ทดสอบแอปที่มีอยู่บนโปรแกรมจำลอง Android Automotive OS ก่อน หากต้องการตั้งค่าโปรแกรมจำลอง ให้ทำตามขั้นตอนในหัวข้อทดสอบโดยใช้โปรแกรมจำลอง Android Automotive OS จากนั้นเรียกใช้แอปโดยทําตามวิธีการในหัวข้อเรียกใช้แอปในโปรแกรมจําลอง

เมื่อเรียกใช้แอป ให้สังเกตปัญหาด้านความเข้ากันได้ เช่น ปัญหาต่อไปนี้

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

กำหนดค่าไฟล์ Manifest ของแอป

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

ฟีเจอร์ที่จำเป็นของ Android Automotive OS

แอปที่สร้างขึ้นสำหรับ Android Automotive OS ต้องใส่องค์ประกอบ <uses-feature> ในไฟล์ AndroidManifest.xml สำหรับฟีเจอร์ android.hardware.type.automotive ดังนี้จึงจะแสดงใน Play Store ในรถยนต์ได้

<manifest ...>
  ...
  <!--
    Depending on the track you choose to distribute your app, the android:required attribute can
    also be "false" or left unset. See Choose a track for Android Automotive OS.
  -->
  <uses-feature
      android:name="android.hardware.type.automotive"
      android:required="[true|false]" />
  ...
</manifest>

นอกเหนือจากองค์ประกอบที่แสดงในตัวอย่างโค้ดก่อนหน้าแล้ว แอปที่สร้างขึ้นสำหรับ Android Automotive OS ต้องมีองค์ประกอบ <uses-feature> ต่อไปนี้ในองค์ประกอบรูท <manifest>

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

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

ตรวจสอบว่าไม่มีกิจกรรมที่เพิ่มประสิทธิภาพเพื่อลดความกระจัดกระจาย

อย่าใส่องค์ประกอบ <meta-data> ต่อไปนี้ในองค์ประกอบ <activity> ใดๆ ในไฟล์ Manifest เพื่อให้แอปพร้อมใช้งานขณะจอดรถเท่านั้น

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

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

รายการไฟล์ Manifest สำหรับหมวดหมู่ที่เฉพาะเจาะจง

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

เพิ่มประสิทธิภาพแอปสำหรับ Android Automotive OS

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

เพิ่มประสิทธิภาพสำหรับหน้าจอขนาดใหญ่

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

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

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

ทำงานกับส่วนแทรกของหน้าต่างและส่วนตัดของจอแสดงผล

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

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

แถบระบบ โหมดสมจริง และการเรนเดอร์แบบเต็มหน้าจอ

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

นอกจากนี้ Android Automotive OS ยังอนุญาตให้ OEM ควบคุมได้ว่าแอปจะแสดงหรือซ่อนแถบระบบเพื่อเข้าและออกจากโหมดสมจริงได้หรือไม่ ตัวอย่างเช่น การป้องกันไม่ให้แอปซ่อนแถบระบบจะช่วยให้ OEM มั่นใจได้ว่าการควบคุมยานพาหนะ เช่น การควบคุมสภาพอากาศ จะเข้าถึงได้บนหน้าจอเสมอ หาก OEM ป้องกันไม่ให้แอปควบคุมแถบระบบ จะไม่มีสิ่งใดเกิดขึ้นเมื่อแอปเรียกใช้ WindowInsetsController (หรือ WindowInsetsControllerCompat) API เพื่อแสดงหรือซ่อนแถบระบบ โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีตรวจจับว่าแอปของคุณแก้ไขส่วนแทรกได้หรือไม่ในเอกสารประกอบของ show และ hide

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

<!-- Depending on OEM configuration, these style declarations
     (and the corresponding runtime calls) may be ignored -->
<style name="...">
  <item name="android:statusBarColor">...</item>
  <item name="android:navigationBarColor">...</item>
  <item name="android:windowTranslucentStatus">...</item>
  <item name="android:windowTranslucentNavigation">...</status>
</style>

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

ปรับให้เข้ากับจอแสดงผลที่มีรูปร่างผิดปกติ

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

แผนภาพของอุปกรณ์ Android Automotive OS ที่มีจอแสดงผลโค้งด้านขวา
รูปที่ 1: อุปกรณ์ Android Automotive OS ที่มีจอแสดงผลแบบโค้งด้านขวา พื้นที่สีเขียวคือสี่เหลี่ยมผืนผ้าที่ปลอดภัยซึ่งไม่ทับซ้อนกับกล่องขอบเขตของการตัดออกของการแสดงผลของเส้นโค้ง

หากแอปของคุณไม่ได้แสดงผลแบบเต็มหน้าจอ คุณก็ไม่ต้องดำเนินการใดๆ เพื่อให้แอปแสดงผลภายในพื้นที่ปลอดภัย

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

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

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

ปิดใช้ฟีเจอร์

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

คุณสามารถใช้ PackageManager.hasSystemFeature API เพื่อตรวจหาว่าแอปทำงานบน Android Automotive OS หรือไม่โดยตรวจสอบฟีเจอร์ FEATURE_AUTOMOTIVE ดังที่แสดงในตัวอย่างต่อไปนี้

Kotlin

val packageManager: PackageManager = ... // Get a PackageManager from a Context
val isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

Java

PackageManager packageManager = ... // Get a PackageManager from a Context
boolean isCar = packageManager.hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE)
if (isCar) {
  // Enable or disable a given feature
}

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

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

จัดการสถานการณ์แบบออฟไลน์

แม้ว่ารถยนต์จะเชื่อมต่ออินเทอร์เน็ตได้มากขึ้นเรื่อยๆ แต่เราขอแนะนำให้แอปสามารถทำงานได้โดยไม่ต้องเชื่อมต่ออินเทอร์เน็ต เช่น ในกรณีต่อไปนี้

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

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

ใช้แหล่งข้อมูลอื่น

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

จัดจำหน่ายแอปของคุณ

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

แสดงความคิดเห็นเกี่ยวกับแอปที่หยุดไว้ชั่วคราว

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

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