Google se compromete a promover la equidad racial para las comunidades negras. Ver cómo.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Prácticas recomendadas

Aplicaciones para dispositivos plegables y multipantalla.

En general, las aplicaciones no deben depender de identificadores estáticos o lógica que depende de algunas ID de pantalla. En la mayoría de los casos, las aplicaciones deberían cambiar de tamaño y funcionar en diferentes pantallas y el sistema debería controlar dónde ubicar las aplicaciones. Por ejemplo, para crear una experiencia nueva y única para dispositivos plegables e iniciar una aplicación especial en la pantalla externa cuando el dispositivo está plegado.

En este caso, SystemUI (u otro componente del sistema) debería detectar el pliegue, determinar si es apropiado realizar una acción, y luego lanzar la actividad objetivo y especificar una ID de pantalla externa como objetivo de lanzamiento. Las aplicaciones no deberían detectar esta acción ni realizar ninguna acción en respuesta y luego realizar el inicio en una pantalla específica. En otras palabras, no asuma que lo que funciona en un dispositivo funcionará en otros dispositivos. En resumen, el código específico del dispositivo aumenta la fragmentación.

Restringir el acceso a las pantallas

Si la configuración del dispositivo requiere la restricción del acceso a una o más pantallas, la recomendación es utilizar el indicador Display#FLAG_PRIVATE para designar tales pantallas como privadas . Hacerlo restringe a todos, excepto al propietario, agregar contenido a la pantalla. Cualquier intento de iniciar una actividad o de agregar una ventana por alguien que no sea el propietario da como resultado una excepción de SecurityException . Si el sistema posee la pantalla, puede agregar ventanas y ejecutar actividades.

Además, las entidades ubicadas en una pantalla siempre pueden acceder a esa pantalla. Si el propietario inicia una actividad en una pantalla, la actividad puede iniciar otras actividades en esta pantalla. Como resultado, el propietario es responsable de restringir el acceso y permitir solo aplicaciones confiables.

Además, se agregan más restricciones a las pantallas virtuales porque cualquier aplicación puede crear una sin hacerla visible para el usuario. Si la pantalla virtual no es propiedad del sistema, solo se permiten actividades con allowEmbedded y la persona que llama debe tener el permiso ACTIVITY_EMBEDDING .

Para más información, ver:

  • ActivityStackSupervisor#isCallerAllowedToLaunchOnDisplay()
  • ActivityDisplay#isUidPresent()
  • DisplayManagerService#isUidPresentOnDisplay()

Para controlar condicionalmente los lanzamientos de actividades, use LaunchParamsController , que intercepta todos los lanzamientos de actividades y permite que un componente del sistema modifique los parámetros utilizados para el lanzamiento. Esto está disponible en system_server .

Configuración de la configuración de ventanas de visualización y decoraciones del sistema

Las decoraciones del sistema se pueden configurar por pantalla en DisplayWindowSettings . La implementación de un dispositivo puede proporcionar una configuración predeterminada en /data/system/display_settings.xml .

Este valor determina si las decoraciones del sistema (iniciador, fondo de pantalla, barra de navegación y otras ventanas de decoración) y el IME aparecen en una pantalla. Para más detalles, vea DisplayWindowSettings#shouldShowSystemDecorsLocked() y DisplayWindowSettings#shouldShowImeLocked() .

Para identificar la pantalla, use una ID única (este valor predeterminado usa DisplayInfo#uniqueId ) o una ID de puerto físico para las pantallas de hardware (consulte la DisplayInfo#address ).

Por ejemplo, el siguiente ejemplo de configuración de pantalla permite decoraciones del sistema y el IME en una pantalla simulada:

<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="0" />
<display
  name="overlay:1"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

En el ejemplo anterior, uniqueId se usa para la identificación de visualización en el atributo de nombre, que para una visualización simulada se overlay:1 . Para una pantalla integrada, un valor de muestra puede ser "local:45354385242535243453" . Otra opción es usar la información del puerto de hardware y establecer identifier="1" para que se corresponda con DisplayWindowSettings#IDENTIFIER_PORT y luego actualizar el nombre para usar el formato "port:<port_id>" :

<?xmlversion='1.0' encoding='utf-8' standalone='yes' ?>
<display-settings>
<config identifier="1" />
<display
  name="port:12345"
  shouldShowSystemDecors="true"
  shouldShowIme="true" />
</display-settings>

Para más detalles, consulte Identificadores de visualización estáticos .

Para más información, ver: