A compatibilidade com telas de carro permite que apps para smartphones e tablets funcionem bem em dispositivos automotivos.
Os recursos incluem:
- Escalonamento de DPI:dimensione os elementos da interface do app com base no DPI da tela.
- Área segura para renderização de apps:contenha o conteúdo do app em uma área segura, evitando o escurecimento por elementos da interface do sistema.
- Lógica de classificação de apps:identifica apps que exigem compatibilidade com telas de carro.
Recursos de compatibilidade
A plataforma oferece vários mecanismos para otimizar a renderização e o dimensionamento de apps em telas automotivas.
Escalonamento de DPI
Com o recurso de escalonamento de DPI, os fabricantes de dispositivos podem ajustar a densidade de DPI de apps individuais ou de todos os apps que exigem compatibilidade com a tela do carro.
Para configurar o ajuste de escala de densidade dos apps:
Adicione um arquivo de configuração
/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>Para definir um valor de escala padrão para todos os apps que exigem compatibilidade com a tela do carro, mude a escala padrão da tela 0 para
<scale display="0">1.0</scale>. O valor é o valor de escala inversa. Por exemplo, para dimensionar apps que exigem compatibilidade com o visor do carro em 1,5x, defina o valor de escala como(1 / 1.5) = 0.67:<config> <scale display="0">0.67</scale> </config>Para definir um valor de escala para um app específico, adicione um novo elemento
scaleà configuração. Neste exemplo, o YouTube Automotive é dimensionado para 1,43x (por exemplo,(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 o sistema estava em execução quando você mudou
/product/etc/display_compat_config.xml, limpe o cache para que a nova
configuração entre em vigor. Use esta macro para limpar o 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
Adicione o arquivo de configuração e a declaração de recurso a um build do AAOS, por exemplo, em
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, }
Área de apps seguros
Os apps para smartphones e tablets geralmente não são criados para as grandes barras de sistema encontradas no Automotive. Esses apps não podem mostrar conteúdo abaixo das barras de sistema ou das sobreposições do sistema. Caso contrário, eles podem renderizar elementos interativos em uma área obscurecida do usuário final.
A área de app segura é implementada usando a interface escalonável SafeBounds.
Lógica de classificação de apps
Você pode usar CarPackageManager.requiresDisplayCompat(..) para criar mais
funcionalidades que melhoram a compatibilidade do app. Por exemplo, é possível usar essa
funcionalidade para adicionar um botão "Voltar" ou outra interface.
Os desenvolvedores de apps podem ativar a compatibilidade com telas de carro incluindo metadados no manifesto do app:
<meta-data
android:name="android.software.car.display_compatibility"
android:value="true" />
O sistema avalia se um app exige recursos de compatibilidade com telas de carro usando a seguinte lógica (avaliada em ordem):
- Metadados do manifesto
android.software.car.display_compatibility:- Se
android:value="true"→ O app exige compatibilidade - Se
android:value="false"→ O app não exige compatibilidade - Se os metadados estiverem faltando, prossiga para a próxima verificação.
- Se
- Usa o recurso
android.hardware.type.automotive:- Se o recurso for declarado (independente de
android:requiredsertrueoufalse) → O app não exige compatibilidade - Se o recurso não estiver disponível, passe para a próxima verificação.
- Se o recurso for declarado (independente de
- Atividades em apps:
- Se o app não tiver atividades (como RROs, apps headless ou serviços) → O app não exige compatibilidade
- Se o app tiver atividades, siga para a próxima verificação.
- Informações sobre a inscrição:
- Se o app for privilegiado → O app não exige compatibilidade
- Se o app for um app do sistema (
FLAG_SYSTEM) → O app não exige compatibilidade - Caso contrário, avance para a próxima verificação.
- Informações da assinatura:
- Se o app for assinado pela plataforma (com a mesma assinatura do framework do Android) → O app não exige compatibilidade
- Caso contrário, avance para a próxima verificação.
- Decisão de fallback:
- Se todas as verificações forem aprovadas sem desativação → O app exige compatibilidade
Consulte
CarDisplayCompatScaleProviderUpdatableImpl.requiresDisplayCompatNotCachedLocked.
Suporte do dispositivo
Os dispositivos que oferecem suporte à compatibilidade com telas de carro precisam declarar esse suporte usando a declaração de recurso:
<feature name="android.software.car.display_compatibility" />