La compatibilità del display dell'auto consente alle app per smartphone e tablet di funzionare correttamente sui dispositivi per auto.
Le funzioni includono:
- Scalabilità DPI: ridimensiona gli elementi UI dell'app in base al DPI del display.
- Area sicura per il rendering delle app:contiene i contenuti dell'app all'interno di un'area sicura, evitando l'oscuramento da parte degli elementi dell'interfaccia utente di sistema.
- Logica di classificazione delle app:identifica le app che richiedono la compatibilità con il display dell'auto.
Funzionalità di compatibilità
La piattaforma fornisce diversi meccanismi per ottimizzare il rendering e la scalabilità delle app sui display per auto.
Scalabilità DPI
La funzionalità di scalabilità DPI consente ai produttori di dispositivi di scalare la densità DPI di singole app o di tutte le app che richiedono la compatibilità con il display dell'auto.
Per configurare il ridimensionamento della densità delle app:
Aggiungi un file di configurazione
/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>Per impostare un valore di scala predefinito per tutte le app che richiedono la compatibilità con il display dell'auto, modifica la scala predefinita per il display 0 in
<scale display="0">1.0</scale>. Il valore è il valore della scala inversa. Ad esempio, per scalare le app che richiedono la compatibilità con il display dell'auto a 1,5x, imposta il valore di scalabilità su(1 / 1.5) = 0.67:<config> <scale display="0">0.67</scale> </config>Per impostare un valore di scala per un'app specifica, aggiungi un nuovo elemento
scalealla configurazione. In questo esempio, YouTube Automotive viene scalato a 1,43x (ad esempio,(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>
Se il sistema era in esecuzione quando hai modificato
/product/etc/display_compat_config.xml, devi svuotare la cache affinché la nuova
configurazione diventi effettiva. Utilizza questa macro per svuotare la cache:
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
Aggiungi il file di configurazione e la dichiarazione della funzionalità a una build AAOS, ad esempio, in
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, }
Area app sicure
Le app per smartphone e tablet spesso non sono progettate per le barre di sistema di grandi dimensioni presenti in Automotive. Queste app non devono disegnare contenuti sotto le barre di sistema o gli overlay di sistema. In caso contrario, potrebbero visualizzare gli elementi interattivi in un'area oscurata per l'utente finale.
L'area sicura delle app viene implementata utilizzando l'UI scalabile SafeBounds.
Logica di classificazione delle app
Puoi utilizzare CarPackageManager.requiresDisplayCompat(..) per creare funzionalità aggiuntive
che migliorano la compatibilità delle app. Ad esempio, puoi utilizzare questa
funzionalità per aggiungere un pulsante Indietro o un'interfaccia utente aggiuntiva.
Gli sviluppatori di app possono attivare la compatibilità con il display dell'auto includendo i metadati nel manifest dell'app:
<meta-data
android:name="android.software.car.display_compatibility"
android:value="true" />
Il sistema valuta se un'app richiede funzionalità di compatibilità con il display dell'auto utilizzando la seguente logica (valutata in ordine):
- Manifest metadata
android.software.car.display_compatibility:- Se
android:value="true"→ L'app richiede la compatibilità - Se
android:value="false"→ L'app non richiede compatibilità - Se i metadati non sono presenti, vai al controllo successivo.
- Se
- Utilizza la funzionalità
android.hardware.type.automotive:- Se la funzionalità è dichiarata (indipendentemente dal fatto che
android:requiredsiatrueofalse) → L'app non richiede compatibilità - Se la funzionalità non è presente, vai al controllo successivo.
- Se la funzionalità è dichiarata (indipendentemente dal fatto che
- Attività nelle app:
- Se l'app non ha attività (ad esempio RRO, app headless o servizi) → L'app non richiede compatibilità
- Se l'app ha attività, procedi al controllo successivo.
- Informazioni sull'applicazione:
- Se l'app è privilegiata → L'app non richiede compatibilità
- Se l'app è un'app di sistema (
FLAG_SYSTEM) → L'app non richiede compatibilità - In caso contrario, procedi al controllo successivo.
- Informazioni sulla firma:
- Se l'app è firmata dalla piattaforma (firmata con la stessa firma del framework Android) → L'app non richiede compatibilità
- In caso contrario, procedi al controllo successivo.
- Decisione di riserva:
- Se tutti i controlli vengono superati senza disattivazione → L'app richiede la compatibilità
Vedi
CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.
Assistenza per i dispositivi
I dispositivi che supportano la compatibilità con il display dell'auto devono dichiarare il supporto utilizzando la dichiarazione della funzionalità:
<feature name="android.software.car.display_compatibility" />