เพิ่มการรองรับ 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 ต้องเป็นไปตามข้อกำหนดบางอย่างจึงจะเผยแพร่ได้โดยใช้ Google Play ดูข้อมูลเพิ่มเติมได้ที่ข้อกำหนดฟีเจอร์ Google Play ของ Meet

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

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

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

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

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

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

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

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

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

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

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 เพื่อให้เป้าหมายการแตะมีขนาดใหญ่ขึ้น