Khả năng tương thích với màn hình ô tô

Khả năng tương thích với màn hình ô tô giúp các ứng dụng trên điện thoại và máy tính bảng hoạt động hiệu quả trên các thiết bị ô tô.

Các tính năng gồm có:

  • Chia tỷ lệ DPI: Chia tỷ lệ các phần tử trên giao diện người dùng của ứng dụng dựa trên DPI của màn hình.
  • Vùng an toàn để kết xuất ứng dụng: Chứa nội dung ứng dụng trong một vùng an toàn, tránh bị các phần tử giao diện người dùng hệ thống che khuất.
  • Logic phân loại ứng dụng: Xác định những ứng dụng yêu cầu Car Display Compat.

Các tính năng tương thích

Nền tảng này cung cấp một số cơ chế để tối ưu hoá quá trình kết xuất và mở rộng quy mô ứng dụng trên màn hình ô tô.

Chia tỷ lệ DPI

Tính năng điều chỉnh tỷ lệ DPI cho phép nhà sản xuất thiết bị điều chỉnh tỷ lệ DPI mật độ của từng ứng dụng hoặc tất cả ứng dụng yêu cầu Car Display Compat.

Cách định cấu hình tính năng điều chỉnh tỷ lệ mật độ của ứng dụng:

  1. Thêm tệp cấu hình /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. Để đặt giá trị tỷ lệ mặc định cho tất cả các ứng dụng yêu cầu Khả năng tương thích với màn hình trên ô tô, hãy thay đổi tỷ lệ mặc định cho màn hình 0 thành <scale display="0">1.0</scale>. Giá trị này là giá trị thang đo nghịch đảo. Ví dụ: để mở rộng quy mô các ứng dụng yêu cầu Car Display Compat lên 1, 5 lần, hãy đặt giá trị tỷ lệ thành (1 / 1.5) = 0.67:

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. Để đặt giá trị tỷ lệ cho một ứng dụng cụ thể, hãy thêm một phần tử scale mới vào cấu hình. Trong ví dụ này, YouTube Automotive được điều chỉnh tỷ lệ thành 1,43x (ví dụ: (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>
    

Nếu hệ thống đang chạy khi bạn thay đổi /product/etc/display_compat_config.xml, bạn phải xoá bộ nhớ đệm để cấu hình mới có hiệu lực. Sử dụng macro này để xoá bộ nhớ đệm:

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. Thêm tệp cấu hình và khai báo tính năng vào bản dựng AAOS, ví dụ: trong 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,
    }
    

Vùng an toàn của ứng dụng

Các ứng dụng dành cho điện thoại và máy tính bảng thường không được thiết kế cho các thanh hệ thống lớn có trong Automotive. Những ứng dụng này phải bị hạn chế vẽ nội dung bên dưới các thanh hệ thống hoặc lớp phủ hệ thống. Nếu không, các thành phần tương tác có thể hiển thị ở một khu vực bị người dùng cuối che khuất.

Vùng ứng dụng an toàn được triển khai bằng Giao diện người dùng có thể mở rộng SafeBounds.

Logic phân loại ứng dụng

Bạn có thể dùng CarPackageManager.requiresDisplayCompat(..) để tạo thêm chức năng giúp tăng cường khả năng tương thích của ứng dụng. Ví dụ: bạn có thể sử dụng chức năng này để thêm nút quay lại hoặc giao diện người dùng bổ sung.

Nhà phát triển ứng dụng có thể chọn sử dụng khả năng tương thích với màn hình ô tô bằng cách thêm siêu dữ liệu vào tệp kê khai của ứng dụng:

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

Hệ thống đánh giá xem một ứng dụng có yêu cầu các tính năng tương thích với màn hình trên ô tô hay không bằng cách sử dụng logic sau (được đánh giá theo thứ tự):

  1. Siêu dữ liệu tệp kê khai android.software.car.display_compatibility:
    • Nếu android:value="true"Ứng dụng yêu cầu khả năng tương thích
    • Nếu android:value="false"Ứng dụng không yêu cầu khả năng tương thích
    • Nếu thiếu siêu dữ liệu, hãy chuyển sang bước kiểm tra tiếp theo.
  2. Sử dụng tính năng android.hardware.type.automotive:
    • Nếu tính năng được khai báo (bất kể android:requiredtrue hay false) → Ứng dụng không yêu cầu khả năng tương thích
    • Nếu thiếu tính năng này, hãy chuyển sang bước kiểm tra tiếp theo.
  3. Hoạt động trong ứng dụng:
    • Nếu ứng dụng không có hoạt động (chẳng hạn như RRO, ứng dụng không có giao diện người dùng hoặc dịch vụ) → Ứng dụng không yêu cầu khả năng tương thích
    • Nếu ứng dụng có các hoạt động, hãy chuyển sang bước kiểm tra tiếp theo.
  4. Thông tin về ứng dụng:
    • Nếu ứng dụng có đặc quyền → Ứng dụng không yêu cầu khả năng tương thích
    • Nếu ứng dụng là một ứng dụng hệ thống (FLAG_SYSTEM) → Ứng dụng không yêu cầu khả năng tương thích
    • Nếu không, hãy chuyển sang bước kiểm tra tiếp theo.
  5. Thông tin chữ ký:
    • Nếu ứng dụng được ký theo nền tảng (ký bằng chữ ký giống như khung Android) → Ứng dụng không yêu cầu khả năng tương thích
    • Nếu không, hãy chuyển sang bước kiểm tra tiếp theo.
  6. Quyết định dự phòng:
    • Nếu tất cả các quy trình kiểm tra đều vượt qua mà không chọn không tham gia → Ứng dụng yêu cầu khả năng tương thích

Xem phần CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.

Hỗ trợ thiết bị

Những thiết bị hỗ trợ khả năng tương thích với màn hình ô tô phải khai báo khả năng hỗ trợ bằng cách sử dụng nội dung khai báo tính năng:

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