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

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

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

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

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

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

แอปที่ส่งไปยังแทร็กที่ไม่ใช่ยานยนต์จะประกาศ <uses-feature> ไม่ได้ ที่แสดงในตัวอย่างโค้ดก่อนหน้านี้ เนื่องจาก ฮาร์ดแวร์เฉพาะรถยนต์ เพื่อที่จะจัดส่งแอปเดียวกันสำหรับทั้งยานยนต์และ อุปกรณ์ที่ไม่ใช่ยานยนต์ คุณต้องสร้างแอปอย่างน้อย 2 เวอร์ชัน ดังนี้ รายการหนึ่งสำหรับอุปกรณ์ยานยนต์ และอีกรายการหนึ่งสำหรับอุปกรณ์เคลื่อนที่ หากต้องการดูข้อมูลเพิ่มเติม เกี่ยวกับวิธีสร้างรสชาติแยกต่างหากเหล่านี้ โปรดดูเอกสารประกอบต่อไปนี้

แอปทั้ง 2 เวอร์ชันสามารถใช้ชื่อแพ็กเกจเดียวกันได้ แต่ต้องมี รหัสเวอร์ชันที่แตกต่างกันเนื่องจากมีการอัปโหลดไปยังแทร็กของ Play Store แยกกัน

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

นอกจากองค์ประกอบที่แสดงในตัวอย่างโค้ดก่อนหน้านี้แล้ว แอปที่สร้างขึ้นสำหรับ 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 Lifecycle Callback ซึ่งคุณจะต้องหยุดการเล่นวิดีโอและเสียงชั่วคราว จากแอปของคุณ

รายการไฟล์ Manifest เฉพาะหมวดหมู่

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

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

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

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

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

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

การเพิ่มประสิทธิภาพหน้าจอขนาดใหญ่อื่นๆ เช่น input ความเข้ากันได้ อาจไม่ใช่ประโยชน์โดยตรงสำหรับ 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>

ถ้าแอปของคุณพัฒนาอย่างไม่น่าเชื่อ อย่าคาดเดาขนาด ตัวเลข หรือตำแหน่งของแถบระบบ ให้ใช้หน้าต่างแทรก 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 for Cars เพื่อตรวจหาว่าแอป ที่ทำงานใน Android Automotive OS หรือ Android Auto หรือหากไม่ได้เชื่อมต่อ รถยนต์เลย

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

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

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

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

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

ใช้ทรัพยากรอื่น

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

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

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

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

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

สร้างรายการใหม่