Android O bricht Apps, die sich über der Statusleiste befinden

Betroffene Apps umfassen unter anderem Status-, Dämmerungs- und Cool-Tools

Die Menge an Beiträgen, in denen neue Funktionen für Benutzer beschrieben werden, die in Android O zu finden sind, verlangsamt sich allmählich, da Benutzer Wochen Zeit hatten, die Software auf ihrem Gerät zu testen. Es gibt jedoch viele, viele Änderungen, die unter der Haube vorgenommen werden und langsam aufgedeckt werden. Wir haben neulich eine solche Änderung über Nexus- und Pixel-Geräte veröffentlicht, auf denen Android O mit SDCardFS ausgeführt wird. Heute möchten wir jedoch eine Änderung diskutieren, die sich auf Entwickler bestimmter Apps auswirkt, insbesondere auf solche, die über der Statusleiste angezeigt werden . Diese Anwendungen scheinen in der Android O Developer Preview fehlerhaft zu sein . Auf den ersten Blick könnten Sie dies als einen einfachen Fehler abtun. Wenn Sie jedoch tiefer in die Referenzdokumentation eintauchen, könnte dies eine beabsichtigte Änderung durch Google sein.


Android O unterbricht Überlagerungen in der Statusleiste

Eines meiner Lieblingssachen an Android ist, wie anpassbar es ist. Benutzer, die als Root angemeldet sind oder benutzerdefinierte ROMs ausführen, können ihre Systemstatusleisten grundsätzlich ohne Einschränkungen mit Themen versehen. Wenn Ihr Gerät jedoch nicht über Root verfügt, stehen Ihnen weniger Optionen zur Verfügung. Glücklicherweise gibt es im Google Play Store viele Anwendungen, mit denen Sie das Aussehen der Statusleiste auf einer grundlegenden Ebene ändern können. Dies ist möglich dank einer cleveren Kombination von System-Overlay-Fenstern, um eine benutzerdefinierte Statusleiste über der vorhandenen anzuzeigen, Benachrichtigungslistenern, um Benachrichtigungen anzuzeigen, und optional einem Eingabehilfedienst, um das kontextbezogene Abtönen der benutzerdefinierten Statusleiste zu ermöglichen.

"Status" auf Android Nougat

"Material Status Bar" auf Android Nougat

Die beiden Screenshots oben zeigen, wie meine Benachrichtigungsleiste aussehen würde, wenn Sie eine der vielen Statusleisten-Overlay-Apps verwenden, die im Play Store verfügbar sind. 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, ähnelt die Statusleiste nicht den obigen Screenshots. Stattdessen sieht es so aus:

Wenn es Ihnen nichts ausmacht, wie Ihre Bestandsstatusleiste aussieht, sind Apps wie die Status- oder Materialstatusleiste ein Glücksfall. Wenn Ihr Gerät jedoch auf Android O aktualisiert wird, funktionieren diese Anwendungen möglicherweise nicht mehr. So sehen diese beiden Apps auf einem Google Pixel aus, auf dem die Android O Developer Preview ausgeführt wird:

"Status" auf Android O

"Material Status Bar" auf Android O

Anstatt dass die Überlagerung die ursprüngliche Statusleiste blockiert, sieht es so aus, als ob sich die Überlagerung mit der ursprünglichen Statusleiste überschneidet, was zu einem großen Durcheinander führt.

Leider macht dies Apps wie diese effektiv unbrauchbar. Davon betroffen sind nicht nur Ihre typischen Themenanwendungen für die Statusleiste, sondern auch alle Apps, bei denen ein Overlay über der Statusleiste angezeigt werden muss .

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)
  • Cool Tool - System Stats (500.000 - 1.000.000 Installationen)
  • Telecine (50.000 - 100.000 Installationen)
  • Statusleiste bereinigen (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 (Einschränkung der vorherigen Funktionen):

  • Twilight (5.000.000 - 10.000.000 Installationen)
  • HeadsUp (100.000 - 500.000 Installationen)
  • Resource Monitor Mini (50.000 - 100.000 Installationen)
  • Network Monitor Mini (1.000.000 - 5.000.000 Installationen)

Es gibt im Play Store noch viel mehr Apps, die eine Art Overlay über der Statusleiste verwenden. Sie können jedoch bereits feststellen, dass sich eine solche Änderung auf viele Apps auswirkt, die möglicherweise von Millionen von Benutzern verwendet werden. Also, was ist hier los?


TYPE_SYSTEM_OVERLAY wird nicht mehr unterstützt

Mit jeder neuen Iteration von Android führt Google verschiedene Funktionen ein und weist sie zurück (sie werden als veraltet und müssen entfernt werden). Dieses Mal ist das Feature, das sich auf dem Hackblock befindet, TYPE_SYSTEM_OVERLAY. So zitieren Sie die Referenzseite für das, was diese Funktion Entwicklern bot:

TYPE_SYSTEM_OVERLAY

Fenstertyp: System-Overlay-Fenster, die über allem anderen angezeigt werden müssen. Diese Fenster dürfen keinen Eingabefokus haben, da sie sonst die Tastensperre beeinträchtigen. In Mehrbenutzersystemen wird nur im Fenster des Besitzers angezeigt.

Im Wesentlichen ermöglicht dieser Fenstertyp einer App, über jedes 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, dass Entwickler stattdessen TYPE_APPLICATION_OVERLAY verwenden. So zitieren Sie die Referenzseite für die Funktion dieses neuen Fenstertyps:

TYPE_APPLICATION_OVERLAY

Fenstertyp: Anwendungs-Overlay-Fenster werden über allen Aktivitätsfenstern (Typen zwischen FIRST_APPLICATION_WINDOW und LAST_APPLICATION_WINDOW ), aber unter kritischen Systemfenstern wie der Statusleiste oder IME angezeigt.

Das System kann die Position, Größe oder Sichtbarkeit dieser Fenster jederzeit ändern, um die visuelle Unordnung für den Benutzer zu verringern und Ressourcen zu verwalten.

Erfordert die SYSTEM_ALERT_WINDOW .

Das System passt die Wichtigkeit von Prozessen mit diesem Fenstertyp an, um die Wahrscheinlichkeit zu verringern, dass der Low-Memory-Killer sie tötet.

In Mehrbenutzersystemen wird nur auf dem Bildschirm des Besitzers angezeigt.

Wie Sie sehen, können mit diesem neuen Fenstertyp Inhalte von Apps über alle anderen Aktivitätsfenster gelegt werden, mit Ausnahme von "kritischen Systemfenstern wie der Statusleiste oder dem IME" (IME bezieht sich auf die Tastatur). Dies ist in Ordnung für Apps wie Facebook Messenger, da die von dieser App bereitgestellten Chatheads keinen Zweck haben, über der Statusleiste zu sitzen, dies wirkt sich jedoch negativ auf die meisten Apps aus, die ich zuvor erwähnt habe.

Darüber hinaus scheint es derzeit keine Problemumgehung für Entwickler zu geben. Um dieses Problem unter Android O zu vermeiden, sollten Entwickler ihre Apps einfach auf SDK 25 (Android 7.1.1) ausrichten. Wie der Entwickler von Status on Reddit jedoch betont hat, hat Google TYPE_SYSTEM_OVERLAY durch TYPE_APPLICATION_OVERLAY ersetzt. Die Änderung ist unabhängig von der SDK-Zielversion . Entwickler, die TYPE_SYSTEM_OVERLAY verwenden, müssen TYPE_APPLICATION_OVERLAY verwenden, um die Kompatibilität aufrechtzuerhalten. Daher kann TYPE_SYSTEM_OVERLAY unter Android O nicht mehr verwendet werden, unabhängig davon, auf welcher Ziel-SDK-Version eine bestimmte App basiert.


Was kann man dagegen tun?

Es ist nicht ganz klar, warum Google diese Änderung vorgenommen hat, da noch keine offizielle Erklärung vorliegt. Ich vermute, es ist ein Versuch, die Sicherheit unter Android zu verbessern, indem verhindert wird, dass ahnungslose Benutzer versehentlich Apps installieren, die ihre Statusleiste in böswilliger Absicht blockieren oder ersetzen. Leider erfasst diese Änderung viele absolut legitime Anwendungen, die TYPE_SYSTEM_OVERLAY im Crossfire verwenden.

Entwickler, die diese Funktion nutzen, haben Fehlerberichte im Android Issue Tracker (260787 und 36574245) geöffnet, um gegen die Änderung zu protestieren und eine alternative API anzufordern. Ein Googler kommentierte den Tracker jedoch mit der folgenden Aussage:

Status: Wird nicht behoben (beabsichtigtes Verhalten)

Wir sind dem Produkt- und Entwicklungsteam gefolgt und haben den Vorschlag erhalten, dass Entwickler mithilfe von SHOW_WHEN_LOCKED-Aktivitäten anzeigen können, wann das Gerät gesperrt ist, es ist jedoch absichtlich nicht mehr möglich, über dem Sperrbildschirm / über dem Benachrichtigungsschatten anzuzeigen

Momentan scheinen diese Entwickler Pech zu haben, da die Entwickler darauf hingewiesen haben, dass FLAG_SHOW_WHEN_LOCKED weiterhin nicht zulässt, dass Fenster über der Statusleiste eingeblendet werden. Es ist nicht klar, was Entwickler dieser Apps tun können, außer dafür zu beten, dass Google Dinge ändert oder die Hölle darüber aufwirft.

Da dies nur die erste Entwicklervorschau für Android O ist, kann Google weiterhin seine Meinung ändern und diese Funktionalität für Apps bereitstellen, die nicht auf Android O ausgerichtet sind, oder TYPE_SYSTEM_OVERLAY wiederherstellen. Aber wenn die Dinge so bleiben, wie sie aktuell sind, können Sie diese Apps zum Abschied küssen . Und das wäre eine verdammte Schande.


Vielen Dank an Eli Irvin, der viele dieser Apps für mich getestet hat!