ความเข้ากันได้ของจอแสดงผลในรถ

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

คุณลักษณะต่างๆ ได้แก่

  • การปรับขนาด DPI: ปรับขนาดองค์ประกอบ UI ของแอปตาม DPI ของจอแสดงผล
  • พื้นที่ปลอดภัยสำหรับการแสดงผลแอป: บรรจุเนื้อหาแอปไว้ในพื้นที่ปลอดภัย เพื่อหลีกเลี่ยงการบดบังโดยองค์ประกอบ UI ของระบบ
  • ตรรกะการจัดประเภทแอป: ระบุแอปที่ต้องมีความเข้ากันได้ของจอแสดงผลในรถ

ฟีเจอร์ความเข้ากันได้

แพลตฟอร์มมีกลไกหลายอย่างเพื่อเพิ่มประสิทธิภาพการแสดงผลและการปรับขนาดแอปบนจอแสดงผลในรถ

การปรับขนาด DPI

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

วิธีกำหนดค่าการปรับขนาดความหนาแน่นของแอป

  1. เพิ่มไฟล์การกำหนดค่า /product/etc/display_compat_config.xml โดยทำดังนี้

    <?xml version="1.0" encoding="utf-8"?>
    <!--
        Each scale factor can have the following attributes
    
        display     (required) Specifies the displayId to which this scale factor will be applied.
        packageName (optional) Specifies the packageName to which the scale factor will be applied.
                    If omitted, the scaling will apply to all packages.
    
        For example:
        <scale display="0" packageName="com.android.car.media.localmediaplayer">0.5</scale>
    
        This means that only package `com.android.car.media.localmediaplayer` on display `0` will be scaled.
    -->
    <config>
    <scale display="0">1.0</scale>
    </config>
    
  2. หากต้องการตั้งค่าการปรับขนาดเริ่มต้นสำหรับแอปทั้งหมดที่ต้องมีความเข้ากันได้ของจอแสดงผลในรถ ให้เปลี่ยนการปรับขนาดเริ่มต้นสำหรับจอแสดงผล 0 เป็น <scale display="0">1.0</scale> ค่านี้คือค่า การปรับขนาดผกผัน เช่น หากต้องการปรับขนาดแอปที่ ต้องมีความเข้ากันได้ของจอแสดงผลในรถเป็น 1.5 เท่า ให้ตั้งค่าการปรับขนาดเป็น (1 / 1.5) = 0.67

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. หากต้องการตั้งค่าการปรับขนาดสำหรับแอปที่เฉพาะเจาะจง ให้เพิ่มองค์ประกอบ scale ใหม่ลงในการกำหนดค่า ในตัวอย่างนี้ YouTube Automotive จะปรับขนาดเป็น 1.43 เท่า (เช่น, (1 / 1.43) = 0.7)

    <config>
        <scale display="0">0.67</scale>
        <scale display="0" packageName="com.google.android.apps.automotive.youtube">0.7</scale>
    </config>
    

หากระบบทำงานอยู่เมื่อคุณเปลี่ยน /product/etc/display_compat_config.xml คุณต้องล้างแคชเพื่อให้การกำหนดค่าใหม่มีผล ใช้มาโครนี้เพื่อล้างแคช

SECURE_SETTING_KEY="android.software.car.display_compatibility:settings:secure"
USER_ID_LIST=$(adb shell cmd user list -v | grep 'id=' | cut -d'=' -f2 | cut -d',' -f1)
for USER_ID in $USER_ID_LIST; do
    echo "Deleting Display Compat config for user: $USER_ID"
    adb shell settings delete secure --user $USER_ID $SECURE_SETTING_KEY
    sleep 1
    echo
done
  1. เพิ่มไฟล์การกำหนดค่าและการประกาศฟีเจอร์ลงในบิลด์ AAOS เช่น ใน vendor/OEM_NAME/products/displaycompat

    # File: vendor/OEM_NAME/products/displaycompat/Android.bp
    
    prebuilt_etc {
        name: "display_compat_config",
        filename: "display_compat_config.xml",
        src: "display_compat_config.xml",
        product_specific: true,
    }
    

พื้นที่ปลอดภัยของแอป

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

พื้นที่ปลอดภัยของแอปได้รับการติดตั้งใช้งานโดยใช้ Scalable UI SafeBounds

ตรรกะการจัดประเภทแอป

คุณสามารถใช้ CarPackageManager.requiresDisplayCompat(..) เพื่อสร้างฟังก์ชันการทำงานเพิ่มเติมที่ช่วยเพิ่มความเข้ากันได้ของแอป เช่น คุณสามารถใช้ฟังก์ชันการทำงานนี้เพื่อเพิ่มปุ่มย้อนกลับหรือ UI เพิ่มเติม

นักพัฒนาแอปสามารถเลือกใช้ความเข้ากันได้ของจอแสดงผลในรถได้โดยใส่ข้อมูลเมตาในไฟล์ Manifest ของแอป

<meta-data
    android:name="android.software.car.display_compatibility"
    android:value="true" />

ระบบจะประเมินว่าแอปต้องใช้ฟีเจอร์ความเข้ากันได้ของจอแสดงผลในรถหรือไม่โดยใช้ตรรกะต่อไปนี้ (ประเมินตามลำดับ)

  1. ข้อมูลเมตาของไฟล์ Manifest android.software.car.display_compatibility:
    • หาก android:value="true"แอปต้องมีความเข้ากันได้
    • หาก android:value="false"แอปไม่จำเป็นต้องมีความเข้ากันได้
    • หากไม่มีข้อมูลเมตา ให้ไปที่การตรวจสอบถัดไป
  2. ใช้ฟีเจอร์ android.hardware.type.automotive:
    • หากมีการประกาศฟีเจอร์ (ไม่ว่า android:required จะเป็น true หรือ false) → แอปไม่จำเป็นต้องมีความเข้ากันได้
    • หากไม่มีฟีเจอร์ ให้ไปที่การตรวจสอบถัดไป
  3. กิจกรรมของแอป:
    • หากแอปไม่มีกิจกรรม (เช่น RRO, แอปแบบไม่มี UI หรือบริการ) → แอปไม่จำเป็นต้องมีความเข้ากันได้
    • หากแอปมีกิจกรรม ให้ไปที่การตรวจสอบถัดไป
  4. ข้อมูลแอปพลิเคชัน:
    • หากแอปมีสิทธิ์พิเศษ → แอปไม่จำเป็นต้องมีความเข้ากันได้
    • หากแอปเป็นแอปของระบบ (FLAG_SYSTEM) → แอปไม่จำเป็นต้องมีความเข้ากันได้
    • หากไม่เป็นไปตามเงื่อนไขข้างต้น ให้ไปที่การตรวจสอบถัดไป
  5. ข้อมูลลายเซ็น:
    • หากแอปได้รับการลงนามโดยแพลตฟอร์ม (ลงนามด้วยลายเซ็นเดียวกันกับเฟรมเวิร์ก Android ) → แอปไม่จำเป็นต้องมีความเข้ากันได้
    • หากไม่เป็นไปตามเงื่อนไขข้างต้น ให้ไปที่การตรวจสอบถัดไป
  6. การตัดสินใจสำรอง:
    • หากการตรวจสอบทั้งหมดผ่านโดยไม่ได้เลือกไม่ใช้ → แอปต้องมีความเข้ากันได้

ดู CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked

การสนับสนุนอุปกรณ์

อุปกรณ์ที่รองรับความเข้ากันได้ของจอแสดงผลในรถต้องประกาศการรองรับโดยใช้การประกาศฟีเจอร์ต่อไปนี้

<feature name="android.software.car.display_compatibility" />