Android O está rompiendo aplicaciones que se superponen en la barra de estado

Android O desaprueba TYPE_SYSTEM_OVERLAY en favor de TYPE_APPLICATION_OVERLAY, lo que provoca que las aplicaciones que se superponen en la parte superior de la barra de estado se rompan.

El goteo de publicaciones que describen nuevas funciones orientadas al usuario que se encuentran en Android O está empezando a disminuir ahora que los usuarios han tenido semanas para probar el software en su dispositivo. Sin embargo, se han realizado muchos, muchos cambios ocultos que poco a poco se están descubriendo. Publicamos sobre uno de esos cambios el otro día en los dispositivos Nexus y Pixel con Android O. adoptando SDCardFS. Pero hoy nos gustaría hablar de un cambio que afectará a los desarrolladores de determinadas aplicaciones, en particular aquellas que superposición en la parte superior de la barra de estado. Estas aplicaciones parecen ser roto en la vista previa del desarrollador de Android O, que a primera vista podría descartarse como un simple error, pero al profundizar en la documentación de referencia, esto puede ser un cambio intencionado por Google.


Android O rompe las superposiciones de la barra de estado

Una de mis cosas favoritas de Android es lo personalizable que es. Los usuarios que están rooteados o que ejecutan ROM personalizadas pueden crear temas para las barras de estado de su sistema de forma nativa, básicamente sin restricciones, pero si su dispositivo no está rooteado, tiene menos opciones disponibles. Afortunadamente, existen muchas aplicaciones en Google Play Store que te permiten cambiar el aspecto de la barra de estado en un nivel básico. Esto es posible gracias a una combinación inteligente de System Overlay Windows para mostrar una barra de estado personalizada sobre la existente. Escuchas de notificaciones para mostrar notificaciones y, opcionalmente, un servicio de accesibilidad para permitir teñir contextualmente la personalización. barra de estado.

Las dos capturas de pantalla anteriores muestran cómo se vería mi barra de notificaciones al usar una de las muchas aplicaciones de superposición de barra de estado disponibles en Play Store. Estas capturas de pantalla se tomaron en un Huawei Mate 9 sin root con EMUI 5.0. Para aquellos de ustedes que no están familiarizados con EMUI, la barra de estado no se parece en nada a las capturas de pantalla anteriores. En cambio, se ve así:

Si no le importa el aspecto de su barra de estado de acciones, entonces aplicaciones como Estado o Barra de estado de materiales son regalos del cielo. Pero si su dispositivo se actualiza a Android O, es posible que estas aplicaciones ya no funcionen. Así es como se ven estas mismas dos aplicaciones en un Google Pixel con Android O Developer Preview:

En lugar de que la superposición bloquee la barra de estado original, parece la superposición se superpone con la barra de estado original lo que resulta en un gran desastre.

Desafortunadamente, esto efectivamente hace que aplicaciones como estas sean inútiles. Y no son sólo las típicas aplicaciones temáticas de la barra de estado las que se ven afectadas por esto: todas las aplicaciones que requieren que se muestre una superposición en la parte superior de la barra de estado se ven afectadas.

Aquí hay una lista de algunas aplicaciones populares que pueden resultar inútiles:

  • Estado (500.000 - 1.000.000 instalaciones)
  • Barra de estado de materiales (1.000.000 - 5.000.000 instalaciones)
  • Herramienta genial: estadísticas del sistema (500.000 - 1.000.000 instalaciones)
  • Telecine (50.000 - 100.000 instalaciones)
  • Limpiar barra de estado (100.000 - 500.000 instalaciones)
  • pequeño núcleo (100.000 - 500.000 instalaciones)

Y una lista de algunas aplicaciones que funcionarán, pero que ya no pueden superponerse en la parte superior de la barra de estado (lo que restringe la funcionalidad anterior):

  • Crepúsculo (5.000.000 - 10.000.000 instalaciones)
  • Aviso (100.000 - 500.000 instalaciones)
  • Monitor de recursos mini (50.000 - 100.000 instalaciones)
  • Monitor de red mini (1.000.000 - 5.000.000 instalaciones)

Hay muchas más aplicaciones en Play Store que usan algún tipo de superposición en la parte superior de la barra de estado, pero Ya se puede decir que tal cambio afectará a muchas aplicaciones que potencialmente utilizan millones de personas. usuarios. Entonces, ¿qué está pasando aquí?


TYPE_SYSTEM_OVERLAY está en desuso

Con cada nueva versión de Android, Google introduce y desaprueba (designa como obsoletas y por eliminar) varias características. Esta vez, la característica que está en la tabla de cortar es TYPE_SYSTEM_OVERLAY. Para citar el página de referencia por lo que esta característica ofreció a los desarrolladores:

TYPE_SYSTEM_OVERLAY

Tipo de ventana: ventanas superpuestas del sistema, que deben mostrarse encima de todo lo demás. Estas ventanas no deben recibir foco de entrada o interferirán con el bloqueo del teclado. En sistemas multiusuario se muestra sólo en la ventana del usuario propietario.

En esencia, este tipo de ventana permite que una aplicación dibuje encima de cualquier elemento de la pantalla, incluida la barra de estado. Sin embargo, a partir de Android O, este tipo de ventana ha quedado obsoleto. Para aplicaciones que no son del sistema, Google recomienda que los desarrolladores utilicen TYPE_APPLICATION_OVERLAY en su lugar. Para citar el página de referencia para lo que hace este nuevo tipo de ventana:

TYPE_APPLICATION_OVERLAY

Tipo de ventana: las ventanas de superposición de aplicaciones se muestran encima de todas las ventanas de actividad (tipos entre FIRST_APPLICATION_WINDOW y LAST_APPLICATION_WINDOW) pero debajo de ventanas críticas del sistema como la barra de estado o IME.

El sistema puede cambiar la posición, el tamaño o la visibilidad de estas ventanas en cualquier momento para reducir el desorden visual para el usuario y también administrar los recursos.

El sistema ajustará la importancia de los procesos con este tipo de ventana para reducir la posibilidad de que el asesino de poca memoria los elimine.

En sistemas multiusuario se muestra solo en la pantalla del usuario propietario.

Como puede ver, este nuevo tipo de ventana permite que las aplicaciones superpongan contenido sobre todas las demás ventanas de actividades. excepto "ventanas críticas del sistema como la barra de estado o IME" (IME se refiere al teclado). Esto está bien para aplicaciones como Facebook Messenger, ya que los chatheads proporcionados por esa aplicación no tienen ningún propósito en la parte superior de la barra de estado, pero esto afecta negativamente a la mayoría de las aplicaciones que mencioné anteriormente.

Además, no parece haber una solución alternativa para que la utilicen los desarrolladores en este momento. Se podría esperar que, para evitar este problema en Android O, los desarrolladores simplemente creen sus aplicaciones para apuntar al SDK 25 (Android 7.1.1). Sin embargo, como señala el desarrollador de Status en Reddit, Google tiene reemplazado TYPE_SYSTEM_OVERLAY con TYPE_APPLICATION_OVERLAY, y el cambio es independiente del SDK de destino versión. Los desarrolladores que usan TYPE_SYSTEM_OVERLAY actualmente tienen que usar TYPE_APPLICATION_OVERLAY para mantener la compatibilidad, por lo tanto, no importa en qué versión de SDK de destino se base una aplicación en particular, puede ya no uso TYPE_SYSTEM_OVERLAY en Android O.


¿Qué se puede hacer con esto?

No está exactamente claro por qué Google realizó este cambio, ya que aún no han proporcionado una explicación oficial. Supongo que es un intento de mejorar la seguridad en Android evitando que usuarios desprevenidos instalen accidentalmente aplicaciones que bloqueen o reemplacen maliciosamente su barra de estado. Desafortunadamente, este cambio detecta muchas aplicaciones perfectamente legítimas que usan TYPE_SYSTEM_OVERLAY en el fuego cruzado.

Los desarrolladores que utilizan esta función han abierto informes de errores en el Rastreador de problemas de Android (#260787 y #36574245) para protestar por el cambio y solicitar una API alternativa, pero un empleado de Google comentó sobre el rastreador con el la siguiente oración:

Estado: No se soluciona (comportamiento previsto)

Hicimos un seguimiento con el equipo de ingeniería y producto y recibimos sugerencias de que los desarrolladores pueden usar las actividades SHOW_WHEN_LOCKED para se muestra cuando el dispositivo está bloqueado, pero intencionalmente ya no es posible mostrarlo en la pantalla de bloqueo/en el tono de notificación

Por ahora, parece que estos desarrolladores no tienen suerte, ya que los desarrolladores han señalado que FLAG_SHOW_WHEN_LOCKED todavía no permite que las ventanas se superpongan sobre la barra de estado. No está claro qué pueden hacer los desarrolladores de estas aplicaciones excepto rezar para que Google cambie las cosas o armar un escándalo al respecto.

Dado que esta es solo la primera vista previa para desarrolladores de Android O, todavía es posible que Google cambie su mentes y proporcionar esta funcionalidad para aplicaciones que no están dirigidas a Android O, o para que Google las restaure TYPE_SYSTEM_OVERLAY. Pero si las cosas siguen como están actualmente, puedes Despídete de estas aplicaciones. Y eso sería una maldita lástima.


¡Gracias a Eli Irvin por probar muchas de estas aplicaciones por mí!