Android O ломает работу приложений, которые накладываются поверх строки состояния

click fraud protection

В Android O TYPE_SYSTEM_OVERLAY устарел в пользу TYPE_APPLICATION_OVERLAY, в результате чего приложения, которые накладываются поверх строки состояния, ломаются.

Поток сообщений, описывающих новые функции для пользователей, обнаруженные в Андроид О начинает замедляться сейчас, когда у пользователей есть недели, чтобы протестировать программное обеспечение на своих устройствах. Тем не менее, есть много, много изменений, внесенных под капотом, которые постепенно раскрываются. На днях мы писали об одном таком изменении в устройствах Nexus и Pixel под управлением Android O. внедрение SDCardFS. Но сегодня мы хотели бы обсудить изменение, которое повлияет на разработчиков некоторых приложений, особенно тех, которые наложение поверх строки состояния. Эти приложения кажутся сломано в предварительной версии Android O Developer Preview, которую на первый взгляд можно отбросить как простую ошибку, но если глубже погрузиться в справочную документацию, это может быть запланированное изменение Google.


Android O ломает наложения в строке состояния

Одна из моих любимых особенностей Android — это то, насколько он настраиваем. Пользователи, имеющие root-права или использующие собственные ПЗУ, могут изначально оформлять строки состояния своей системы практически без ограничений, но если ваше устройство не рутировано, у вас будет меньше доступных опций. К счастью, в магазине Google Play есть множество приложений, которые позволяют вам изменить внешний вид строки состояния на базовом уровне. Это возможно благодаря умной комбинации System Overlay Windows для отображения пользовательской строки состояния поверх существующей. Прослушиватели уведомлений для отображения уведомлений и, при необходимости, служба специальных возможностей, позволяющая контекстно изменять пользовательские оттенки. статус бар.

На двух скриншотах выше показано, как будет выглядеть моя панель уведомлений при использовании одного из многих приложений наложения строки состояния, доступных в Play Store. Эти снимки экрана были сделаны на нерутированном Huawei Mate 9 под управлением EMUI 5.0. Для тех из вас, кто не знаком с EMUI, строка состояния выглядит совсем не так, как на скриншотах выше. Вместо этого это выглядит так:

Если вас не волнует, как выглядит строка состояния вашего стока, то такие приложения, как Положение дел или Строка состояния материала это находка. Но если или когда ваше устройство обновится до Android O, эти приложения могут перестать работать. Вот как эти же два приложения выглядят на Google Pixel под управлением Android O Developer Preview:

Вместо наложения, блокирующего исходную строку состояния, оно выглядит как наложение перекрывается с оригинальной строкой состояния, что приводит к огромному беспорядку.

К сожалению, это фактически делает подобные приложения бесполезными. И это затрагивает не только ваши типичные приложения с темами строки состояния — затронуты все приложения, которым требуется отображение наложения поверх строки состояния..

Вот список некоторых популярных приложений, которые могут оказаться бесполезными:

  • Положение дел (500 000 - 1 000 000 установок)
  • Строка состояния материала (1 000 000 - 5 000 000 установок)
  • Крутой инструмент - Системная статистика (500 000 - 1 000 000 установок)
  • Телекино (50 000 - 100 000 установок)
  • Очистить строку состояния (100 000 - 500 000 установок)
  • Тайникор (100 000 - 500 000 установок)

И список некоторых приложений, которые будут работать, но больше не смогут накладываться поверх строки состояния (ограничивая предыдущую функциональность):

  • Сумерки (5 000 000 - 10 000 000 установок)
  • Берегись (100 000 - 500 000 установок)
  • Монитор ресурсов Мини (50 000 - 100 000 установок)
  • Сетевой монитор Мини (1 000 000 - 5 000 000 установок)

В Play Store есть еще много приложений, которые используют своего рода наложение поверх строки состояния, но вы уже можете сказать, что такое изменение повлияет на многие приложения, которыми потенциально пользуются миллионы пользователей. пользователи. Так что же здесь происходит?


TYPE_SYSTEM_OVERLAY устарел

С каждой новой версией Android Google одновременно вводит и устаревает (обозначает устаревшими и подлежащими удалению) различные функции. На этот раз на блоке находится функция TYPE_SYSTEM_OVERLAY. Цитируя справочная страница за что эту функцию предложили разработчики:

TYPE_SYSTEM_OVERLAY

Тип окна: системные окна-наложения, которые должны отображаться поверх всего остального. Эти окна не должны получать фокус ввода, иначе они будут мешать работе клавиатуры. В многопользовательских системах отображается только в окне владельца.

По сути, этот тип окна позволяет приложению рисовать поверх любого элемента на экране, включая строку состояния. Однако, начиная с Android O, этот тип окна устарел. Для несистемных приложений Google рекомендует разработчикам вместо этого использовать TYPE_APPLICATION_OVERLAY. Цитируя справочная страница что делает этот новый тип окна:

TYPE_APPLICATION_OVERLAY

Тип окна: окна наложения приложений отображаются над всеми окнами действий (типы между FIRST_APPLICATION_WINDOW и LAST_APPLICATION_WINDOW), но под критически важными системными окнами, такими как строка состояния или IME.

Система может изменить положение, размер или видимость этих окон в любое время, чтобы уменьшить визуальный беспорядок для пользователя, а также управлять ресурсами.

Система будет регулировать важность процессов с этим типом окна, чтобы уменьшить вероятность их уничтожения убийцей с нехваткой памяти.

В многопользовательских системах отображается только на экране владельца.

Как видите, этот новый тип окна позволяет приложениям накладывать контент поверх всех других окон активности. кроме «важнейшие системные окна, такие как строка состояния или IME» (IME относится к клавиатуре). Это нормально для таких приложений, как Facebook Messenger, поскольку чаты, предоставляемые этим приложением, не предназначены для размещения поверх строки состояния, но это отрицательно влияет на большинство приложений, о которых я упоминал ранее.

Более того, в настоящее время разработчикам, по-видимому, не существует обходного пути. Можно было бы ожидать, что, чтобы избежать этой проблемы в Android O, разработчики просто создают свои приложения для SDK 25 (Android 7.1.1). Однако, как указывает разработчик Статуса на Reddit, у Google есть заменены TYPE_SYSTEM_OVERLAY с TYPE_APPLICATION_OVERLAY, и это изменение независимо от целевого SDK версия. Разработчикам, использующим TYPE_SYSTEM_OVERLAY, в настоящее время приходится использовать TYPE_APPLICATION_OVERLAY для обеспечения совместимости, следовательно, независимо от того, на какой целевой версии SDK основано конкретное приложение, оно может больше не используйте TYPE_SYSTEM_OVERLAY на Android O.


Что можно с этим сделать?

Не совсем понятно, почему Google внес это изменение, поскольку они еще не предоставили официального объяснения. Я предполагаю, что это попытка улучшить безопасность Android, предотвращая случайную установку ничего не подозревающих пользователей приложений, которые злонамеренно блокируют или заменяют строку состояния. К сожалению, это изменение попадает под перекрестный огонь многих совершенно законных приложений, использующих TYPE_SYSTEM_OVERLAY.

Разработчики, использующие эту функцию, открыли отчеты об ошибках в системе отслеживания проблем Android (#260787 и #36574245), чтобы протестовать против изменения и попросить альтернативный API, но сотрудник Google прокомментировал трекер с помощью следующее положение:

Статус: не будет исправлено (предполагаемое поведение)

Мы связались с командой разработчиков и инженерами и получили предложение о том, что разработчики могут использовать действия SHOW_WHEN_LOCKED для показывать, когда устройство заблокировано, но намеренно больше невозможно показывать поверх экрана блокировки/штрих уведомлений

На данный момент кажется, что этим разработчикам не повезло, поскольку разработчики отметили, что FLAG_SHOW_WHEN_LOCKED по-прежнему не позволяет накладывать окна поверх строки состояния. Непонятно, что могут сделать разработчики этих приложений, кроме как молиться, чтобы Google изменил ситуацию, или поднимать шум по этому поводу.

Поскольку это всего лишь первая предварительная версия Developer Preview для Android O, у Google все еще есть возможность изменить свою версию. умы и предоставить эту функциональность приложениям, не предназначенным для Android O, или Google для восстановления TYPE_SYSTEM_OVERLAY. Но если все останется так, как есть сейчас, вы можете поцелуй эти приложения на прощание. И это было бы чертовски обидно.


Спасибо Эли Ирвину за то, что он протестировал для меня многие из этих приложений!