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