Zgodność z wyświetlaczem w samochodzie

Zgodność z wyświetlaczem samochodowym umożliwia aplikacjom na telefony i tablety prawidłowe działanie na urządzeniach samochodowych.

Dostępne funkcje:

  • Skalowanie DPI: skalowanie elementów interfejsu aplikacji na podstawie DPI wyświetlacza.
  • Bezpieczny obszar renderowania aplikacji: umieszczaj zawartość aplikacji w bezpiecznym obszarze, aby uniknąć zasłaniania jej przez elementy interfejsu systemu.
  • Logika klasyfikacji aplikacji: identyfikowanie aplikacji, które wymagają zgodności z wyświetlaczem w samochodzie.

Funkcje zgodności

Platforma udostępnia kilka mechanizmów optymalizacji renderowania i skalowania aplikacji na wyświetlaczach samochodowych.

Skalowanie DPI

Funkcja skalowania DPI umożliwia producentom urządzeń skalowanie gęstości DPI poszczególnych aplikacji lub wszystkich aplikacji, które wymagają zgodności z wyświetlaczem samochodowym.

Aby skonfigurować skalowanie gęstości aplikacji:

  1. Dodaj plik konfiguracyjny/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. Aby ustawić domyślną wartość skali dla wszystkich aplikacji, które wymagają zgodności z wyświetlaczem samochodowym, zmień domyślną skalę wyświetlacza 0 na <scale display="0">1.0</scale>. Wartość to wartość skali odwrotnej. Jeśli na przykład chcesz zwiększyć skalę aplikacji, które wymagają zgodności z wyświetlaczem samochodowym, o 1,5 raza, ustaw wartość skali na (1 / 1.5) = 0.67:

    <config>
        <scale display="0">0.67</scale>
    </config>
    
  3. Aby ustawić wartość skali dla konkretnej aplikacji, dodaj do konfiguracji nowy element scale. W tym przykładzie YouTube Automotive jest skalowany do 1,43x (np.(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>
    

Jeśli system działał w momencie zmiany /product/etc/display_compat_config.xml, musisz wyczyścić pamięć podręczną, aby nowa konfiguracja zaczęła obowiązywać. Aby wyczyścić pamięć podręczną, użyj tego makra:

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. Dodaj plik konfiguracji i deklarację funkcji do kompilacji AAOS, na przykład w 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,
    }
    

Bezpieczny obszar aplikacji

Aplikacje na telefony i tablety często nie są przystosowane do dużych pasków systemowych w Automotive. Te aplikacje nie mogą wyświetlać treści pod paskami systemowymi ani nakładkami systemowymi. W przeciwnym razie mogą renderować elementy interaktywne w obszarze niewidocznym dla użytkownika.

Obszar bezpiecznej aplikacji jest implementowany za pomocą skalowalnego interfejsu SafeBounds.

Logika klasyfikacji aplikacji

Za pomocą CarPackageManager.requiresDisplayCompat(..) możesz tworzyć dodatkowe funkcje, które zwiększają zgodność aplikacji. Możesz na przykład użyć tej funkcji, aby dodać przycisk Wstecz lub dodatkowy interfejs.

Deweloperzy aplikacji mogą włączyć zgodność z wyświetlaczem w samochodzie, dodając metadane do pliku manifestu aplikacji:

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

System sprawdza, czy aplikacja wymaga funkcji zgodności z wyświetlaczem samochodowym, za pomocą tej logiki (sprawdzanej w podanej kolejności):

  1. Metadane pliku manifestuandroid.software.car.display_compatibility:
    • Jeśli android:value="true"Aplikacja wymaga zgodności
    • Jeśli android:value="false" → Aplikacja nie wymaga zgodności
    • Jeśli metadane nie są dostępne, przejdź do następnego kroku.
  2. Korzysta z funkcji android.hardware.type.automotive:
    • Jeśli funkcja jest zadeklarowana (niezależnie od tego, czy android:required jest true czy false) → Aplikacja nie wymaga zgodności
    • Jeśli brakuje tej funkcji, przejdź do następnego kroku.
  3. Aktywności w aplikacjach:
    • Jeśli aplikacja nie ma aktywności (np. RRO, aplikacje bez interfejsu graficznego lub usługi) → Aplikacja nie wymaga zgodności
    • Jeśli aplikacja ma aktywności, przejdź do następnego sprawdzenia.
  4. Informacje o aplikacji:
    • Jeśli aplikacja ma uprawnienia → Aplikacja nie wymaga zgodności
    • Jeśli aplikacja jest aplikacją systemową (FLAG_SYSTEM) → Aplikacja nie wymaga zgodności
    • W przeciwnym razie przejdź do następnego sprawdzenia.
  5. Informacje o podpisie:
    • Jeśli aplikacja jest podpisana przez platformę (ma ten sam podpis co framework Androida) → Aplikacja nie wymaga zgodności
    • W przeciwnym razie przejdź do następnego sprawdzenia.
  6. Decyzja zastępcza:
    • Jeśli wszystkie testy zostaną zaliczone bez rezygnacji → Aplikacja wymaga zgodności

Zobacz CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.

Obsługa urządzeń

Urządzenia, które obsługują wyświetlacze samochodowe, muszą zadeklarować obsługę za pomocą deklaracji funkcji:

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