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:
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>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>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
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):
- Metadane pliku manifestu
android.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.
- Jeśli
- Korzysta z funkcji
android.hardware.type.automotive:- Jeśli funkcja jest zadeklarowana (niezależnie od tego, czy
android:requiredjesttrueczyfalse) → Aplikacja nie wymaga zgodności - Jeśli brakuje tej funkcji, przejdź do następnego kroku.
- Jeśli funkcja jest zadeklarowana (niezależnie od tego, czy
- 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.
- 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.
- 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.
- 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" />