Las pantallas conectadas extienden la experiencia de ventanas de computadoras de escritorio a teléfonos estándar, lo que les brinda a los usuarios acceso a pantallas grandes desde sus dispositivos móviles. Esta función abre nuevas posibilidades para la interacción de la app y la productividad del usuario.
Todas las funciones únicas de las ventanas de escritorio se aplican a las pantallas conectadas. Cuando conectas un teléfono a una pantalla, el estado del teléfono no cambia y se inicia una sesión de escritorio en blanco en la pantalla conectada. El dispositivo y la pantalla actúan como dos sistemas individuales, con apps específicas para cada pantalla.
Si conectas un dispositivo compatible con el modo de ventanas de escritorio, como una tablet, a un monitor externo, la sesión de escritorio se extiende a ambas pantallas. Luego, las dos pantallas funcionan como un sistema continuo. Esta configuración permite que las ventanas, el contenido y el cursor se muevan libremente entre las dos pantallas.
Para admitir pantallas conectadas de manera eficaz, debes prestar atención a varios aspectos del diseño y la implementación de tu app. Las siguientes prácticas recomendadas garantizan una experiencia del usuario fluida y productiva.
Cómo controlar cambios en la pantalla dinámica
Muchas apps se compilan con la suposición de que el objeto Display
y sus características no cambiarán durante el ciclo de vida de la app. Sin embargo, cuando un usuario conecta o desconecta un monitor externo, o incluso mueve una ventana de la app entre pantallas, el objeto Display
subyacente asociado con el contexto o la ventana de tu app puede cambiar. Las propiedades de la pantalla, como el tamaño, la resolución, la frecuencia de actualización, la compatibilidad con HDR y la densidad, pueden ser diferentes. Por ejemplo, si codificas valores según la pantalla del teléfono, es probable que tus diseños se rompan en una pantalla externa.
Las pantallas externas también pueden tener densidades de píxeles muy diferentes. Debes asegurarte de que tu app responda correctamente a los cambios de densidad. Esto implica usar píxeles independientes de la densidad (dp) para los diseños, proporcionar recursos específicos para la densidad y garantizar que tu IU se ajuste de forma adecuada.
Usa el contexto correcto
Usar el contexto correcto es fundamental en los entornos de varias pantallas. Cuando se accede a recursos, el contexto de la actividad (que se muestra) difiere del contexto de la aplicación (que no se muestra).
El contexto de la actividad contiene información sobre la pantalla y siempre se ajusta de acuerdo con el área de visualización donde aparece la actividad. Esto te permite obtener la información correcta sobre la densidad de la pantalla o las métricas de la ventana de tu app. Siempre usa el contexto de la actividad (o algún otro contexto basado en la IU) para obtener información sobre la ventana o la pantalla actual. Esto también afecta a algunas APIs del sistema que usan información del contexto.
Cómo obtener información de la pantalla
Puedes usar la clase Display
para obtener información sobre una pantalla en particular, como su tamaño o las marcas que indican si una pantalla es segura. Para obtener las pantallas disponibles, usa el servicio del sistema DisplayManager
:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()
Administra el inicio y la configuración de actividades
Con las pantallas conectadas, las apps pueden especificar en qué pantalla deben ejecutarse cuando se inician o cuando crean otra actividad. Este comportamiento depende del modo de inicio de la actividad definido en el archivo de manifiesto, y de las opciones y los marcadores de intent establecidos por la entidad que inicia la actividad.
Cuando una actividad se traslada a una pantalla secundaria, tu app puede experimentar una actualización de contexto, un cambio de tamaño de ventana y modificaciones en la configuración y los recursos. Si la actividad administra el cambio de configuración, se le notificará en onConfigurationChanged()
. De lo contrario, se reinicia la actividad.
Si el modo de inicio seleccionado para una actividad permite varias instancias, el inicio en una pantalla secundaria puede crear una nueva instancia de la actividad. Ambas actividades se reanudan al mismo tiempo, lo que puede ser beneficioso para ciertas situaciones de multitarea.
Puedes iniciar una actividad en una pantalla en particular con ActivityOptions
:
val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId)
startActivity(intent, options.toBundle())
Evita las listas de entidades permitidas del dispositivo
A veces, las apps restringen la IU y las funciones de pantalla grande para seleccionar dispositivos a través de una lista de entidades permitidas o verificando el tamaño de pantalla integrado. Con las pantallas conectadas, este enfoque ya no es eficaz, ya que prácticamente cualquier dispositivo nuevo se puede conectar a una pantalla grande. Diseña tu app para que sea responsiva y adaptable a varios tamaños y densidades de pantalla.
Compatibilidad con periféricos externos
Cuando los usuarios se conectan a una pantalla externa, suelen crear un entorno más parecido al de una computadora de escritorio. Esto suele implicar el uso de teclados, mouse, paneles táctiles, cámaras web, micrófonos y bocinas externos. Debes asegurarte de que tu app funcione sin problemas con estos periféricos. Esto incluye controlar las combinaciones de teclas, administrar las interacciones del puntero del mouse, admitir correctamente cámaras o micrófonos externos y respetar el enrutamiento de salida de audio. Para obtener más detalles, consulta Compatibilidad de entrada en pantallas grandes.
Mejora la productividad del usuario
Las pantallas conectadas ofrecen una oportunidad significativa para mejorar la productividad del usuario. Ahora tienes las herramientas para compilar apps para dispositivos móviles que pueden ofrecer experiencias comparables a las aplicaciones para computadoras de escritorio. Considera implementar las siguientes funciones para aumentar la productividad de los usuarios:
- Permite que los usuarios abran varias instancias de la misma app. Esto es invaluable para tareas como comparar documentos, administrar diferentes conversaciones o ver varios archivos de forma simultánea.
- Permite que los usuarios compartan datos enriquecidos dentro y fuera de tu app con arrastrar y soltar.
- Ayuda a los usuarios a mantener su flujo de trabajo en todos los cambios de configuración implementando un sistema de administración de estado sólido.
Si sigues estos lineamientos y utilizas los ejemplos de código proporcionados, puedes crear apps que se adapten sin problemas a las pantallas conectadas y ofrecer a los usuarios una experiencia más rica y productiva.