Android O veraltet TYPE_SYSTEM_OVERLAY zugunsten von TYPE_APPLICATION_OVERLAY, was dazu führt, dass Apps, die über der Statusleiste liegen, nicht mehr funktionieren.
Das Rinnsal von Beiträgen, die neue benutzerorientierte Funktionen beschreiben, die in gefunden wurden Android O beginnt sich zu verlangsamen, da Benutzer wochenlang Zeit hatten, die Software auf ihrem Gerät zu testen. Allerdings gibt es im Verborgenen viele, viele Veränderungen, die langsam ans Licht kommen. Wir haben neulich über eine solche Änderung bei Nexus- und Pixel-Geräten mit Android O berichtet Einführung von SDCardFS. Heute möchten wir jedoch eine Änderung besprechen, die sich auf Entwickler bestimmter Apps auswirken wird, insbesondere auf solche Overlay über der Statusleiste. Diese Anwendungen scheinen zu sein in der Android O Developer Preview defekt, was man auf den ersten Blick als einfachen Fehler abtun könnte, aber wenn man tiefer in die Referenzdokumentation eintaucht, kann es sein, dass dies der Fall ist eine beabsichtigte Änderung von Google.
Android O unterbricht Statusleisten-Overlays
Was mir an Android am besten gefällt, ist die Anpassbarkeit. Benutzer, die gerootet sind oder benutzerdefinierte ROMs ausführen, können ihre Systemstatusleisten praktisch ohne Einschränkungen nativ gestalten. Wenn Ihr Gerät jedoch nicht gerootet ist, stehen Ihnen weniger Optionen zur Verfügung. Glücklicherweise gibt es im Google Play Store viele Anwendungen, mit denen Sie das Aussehen der Statusleiste grundsätzlich ändern können. Dies ist dank einer cleveren Kombination von System-Overlay-Fenstern möglich, um eine benutzerdefinierte Statusleiste über der vorhandenen anzuzeigen. Benachrichtigungs-Listener zum Anzeigen von Benachrichtigungen und optional ein Barrierefreiheitsdienst, um eine kontextbezogene Einfärbung des Benutzers zu ermöglichen Statusleiste.
Die beiden Screenshots oben zeigen, wie meine Benachrichtigungsleiste aussehen würde, wenn ich eine der vielen im Play Store verfügbaren Statusleisten-Overlay-Apps verwende. Diese Screenshots wurden auf einem nicht gerooteten Huawei Mate 9 mit EMUI 5.0 aufgenommen. Für diejenigen unter Ihnen, die mit EMUI nicht vertraut sind: Die Statusleiste sieht überhaupt nicht so aus wie auf den obigen Screenshots. Stattdessen sieht es so aus:
Wenn Ihnen das Aussehen Ihrer Aktienstatusleiste nichts ausmacht, dann sind Apps wie z Status oder Materialstatusleiste sind ein Geschenk des Himmels. Wenn Ihr Gerät jedoch auf Android O aktualisiert wird, funktionieren diese Anwendungen möglicherweise nicht mehr. So sehen dieselben beiden Apps auf einem Google Pixel aus, auf dem die Android O Developer Preview ausgeführt wird:
Anstatt dass das Overlay die ursprüngliche Statusleiste blockiert, sieht es wie das Overlay aus Überschneidungen mit der ursprünglichen Statusleiste, was zu einem riesigen Durcheinander führt.
Leider werden Apps wie diese dadurch praktisch unbrauchbar. Und es sind nicht nur Ihre typischen Statusleisten-Themenanwendungen, die davon betroffen sind – Betroffen sind alle Apps, die die Anzeige eines Overlays oben in der Statusleiste erfordern.
Hier ist eine Liste einiger beliebter Apps, die möglicherweise unbrauchbar werden:
- Status (500.000 – 1.000.000 Installationen)
- Materialstatusleiste (1.000.000 – 5.000.000 Installationen)
- Cooles Tool – Systemstatistiken (500.000 – 1.000.000 Installationen)
- Telecine (50.000 – 100.000 Installationen)
- Bereinigen Sie die Statusleiste (100.000 – 500.000 Installationen)
- Tinycore (100.000 – 500.000 Installationen)
Und eine Liste einiger Apps, die funktionieren, aber nicht mehr über der Statusleiste angezeigt werden können (was die bisherige Funktionalität einschränkt):
- Dämmerung (5.000.000 – 10.000.000 Installationen)
- Kopf hoch (100.000 – 500.000 Installationen)
- Ressourcenmonitor Mini (50.000 – 100.000 Installationen)
- Netzwerkmonitor Mini (1.000.000 – 5.000.000 Installationen)
Es gibt viele weitere Apps im Play Store, die eine Art Overlay über der Statusleiste verwenden, aber Man kann schon jetzt erkennen, dass eine solche Änderung viele Apps betreffen wird, die potenziell von Millionen genutzt werden Benutzer. Also, was ist hier los?
TYPE_SYSTEM_OVERLAY ist veraltet
Mit jeder neuen Version von Android führt Google verschiedene Funktionen ein und verwirft sie (kennzeichnet sie als veraltet und soll entfernt werden). Diesmal ist das Feature, das sich auf dem Hackklotz befindet, TYPE_SYSTEM_OVERLAY. Um das zu zitieren Referenzseite Was diese Funktion den Entwicklern bot:
TYPE_SYSTEM_OVERLAY
Fenstertyp: System-Overlay-Fenster, die über allem anderen angezeigt werden müssen. Diese Fenster dürfen nicht den Eingabefokus einnehmen, da sie sonst die Tastensperre beeinträchtigen. In Mehrbenutzersystemen wird es nur im Fenster des besitzenden Benutzers angezeigt.
Im Wesentlichen ermöglicht dieser Fenstertyp einer App, über jedes beliebige Element auf dem Bildschirm zu zeichnen – einschließlich der Statusleiste. Ab Android O ist dieser Fenstertyp jedoch veraltet. Für Nicht-System-Apps empfiehlt Google Entwicklern stattdessen die Verwendung von TYPE_APPLICATION_OVERLAY. Um das zu zitieren Referenzseite für die Funktion dieses neuen Fenstertyps:
TYPE_APPLICATION_OVERLAY
Fenstertyp: Anwendungs-Overlay-Fenster werden über allen Aktivitätsfenstern angezeigt (Typen zwischen
FIRST_APPLICATION_WINDOW
UndLAST_APPLICATION_WINDOW
), aber unterhalb kritischer Systemfenster wie der Statusleiste oder IME.Das System kann die Position, Größe oder Sichtbarkeit dieser Fenster jederzeit ändern, um die visuelle Unordnung für den Benutzer zu reduzieren und auch Ressourcen zu verwalten.
Das System passt die Wichtigkeit von Prozessen mit diesem Fenstertyp an, um die Wahrscheinlichkeit zu verringern, dass der Low-Memory-Killer sie abbricht.
In Mehrbenutzersystemen wird die Anzeige nur auf dem Bildschirm des besitzenden Benutzers angezeigt.
Wie Sie sehen, ermöglicht dieser neue Fenstertyp Apps, Inhalte über alle anderen Aktivitätsfenster zu legen außer „kritische Systemfenster wie die Statusleiste oder IME“ (IME bezieht sich auf die Tastatur). Das ist für Apps wie Facebook Messenger in Ordnung, da die von dieser App bereitgestellten Chatheads keinen Zweck haben, oben in der Statusleiste zu sitzen, aber das wirkt sich negativ auf die meisten der Apps aus, die ich zuvor erwähnt habe.
Darüber hinaus scheint es derzeit keinen Workaround für Entwickler zu geben. Man könnte erwarten, dass Entwickler, um dieses Problem auf Android O zu vermeiden, ihre Apps einfach so erstellen, dass sie auf SDK 25 (Android 7.1.1) abzielen. Allerdings wies darauf hin Entwickler von Status auf Reddit, Google hat ersetzt TYPE_SYSTEM_OVERLAY mit TYPE_APPLICATION_OVERLAY, und die Änderung ist unabhängig vom Ziel-SDK Ausführung. Entwickler, die TYPE_SYSTEM_OVERLAY verwenden, müssen derzeit TYPE_APPLICATION_OVERLAY verwenden, um die Kompatibilität aufrechtzuerhalten. Daher ist dies unabhängig davon, auf welcher Ziel-SDK-Version eine bestimmte App basiert, möglich Verwenden Sie TYPE_SYSTEM_OVERLAY nicht mehr auf Android O.
Was kann man dagegen tun?
Es ist nicht ganz klar, warum Google diese Änderung vorgenommen hat, da noch keine offizielle Erklärung abgegeben wurde. Ich vermute, dass es sich um einen Versuch handelt, die Sicherheit auf Android zu verbessern, indem ahnungslose Benutzer daran gehindert werden, versehentlich Apps zu installieren, die in böswilliger Absicht ihre Statusleiste blockieren oder ersetzen. Leider erwischt diese Änderung viele völlig legitime Anwendungen, die TYPE_SYSTEM_OVERLAY verwenden, im Kreuzfeuer.
Entwickler, die diese Funktion nutzen, haben Fehlerberichte im Issue Tracker von Android geöffnet (#260787 Und #36574245), um gegen die Änderung zu protestieren und eine alternative API zu fordern, aber ein Google-Mitarbeiter kommentierte den Tracker mit dem folgende Erklärung:
Status: Kann nicht behoben werden (beabsichtigtes Verhalten)
Wir haben mit dem Produkt- und Technikteam Kontakt aufgenommen und den Vorschlag erhalten, dass Entwickler SHOW_WHEN_LOCKED-Aktivitäten verwenden können Wird angezeigt, wenn das Gerät gesperrt ist. Die Anzeige über dem Sperrbildschirm bzw. über dem Benachrichtigungsschirm ist jedoch absichtlich nicht mehr möglich
Im Moment scheint es, dass diese Entwickler kein Glück haben, da die Entwickler darauf hingewiesen haben, dass FLAG_SHOW_WHEN_LOCKED immer noch nicht zulässt, dass Fenster über der Statusleiste eingeblendet werden. Es ist nicht klar, was Entwickler dieser Apps tun können, außer zu beten, dass Google etwas ändert, oder die Sache zu vermasseln.
Da dies nur die erste Entwicklervorschau für Android O ist, ist es für Google immer noch möglich, diese zu ändern Köpfe und stellen diese Funktionalität für Apps bereit, die nicht auf Android O abzielen, oder für die Wiederherstellung durch Google TYPE_SYSTEM_OVERLAY. Aber wenn die Dinge so bleiben, wie sie derzeit sind, können Sie es tun Verabschieden Sie sich von diesen Apps. Und das wäre verdammt schade.
Vielen Dank an Eli Irvin, der viele dieser Apps für mich getestet hat!