Android O distruge aplicațiile care se suprapun deasupra barei de stare

Android O renunță la TYPE_SYSTEM_OVERLAY în favoarea TYPE_APPLICATION_OVERLAY, ceea ce duce la spargerea aplicațiilor care se suprapun deasupra barei de stare.

Scurgerea de postări care evidențiază noi funcții orientate către utilizatori găsite în Android O începe să încetinească acum că utilizatorii au avut la dispoziție săptămâni pentru a testa software-ul pe dispozitivul lor. Cu toate acestea, există multe, multe schimbări făcute sub capotă care sunt dezvăluite încet. Am postat despre o astfel de schimbare chiar zilele trecute despre dispozitivele Nexus și Pixel care rulează Android O adoptând SDCardFS. Dar astăzi, am dori să discutăm despre o schimbare care va afecta dezvoltatorii anumitor aplicații, în special pe cele care suprapunere deasupra barei de stare. Aceste aplicații par să fie spart în Previzualizarea dezvoltatorului Android O, pe care la prima vedere s-ar putea să îl respingeți ca fiind o simplă eroare, dar mergând mai adânc în documentația de referință, acest lucru poate fi o schimbare intenționată de Google.


Android O rupe suprapunerile barei de stare

Unul dintre lucrurile mele preferate despre Android este cât de personalizabil este. Utilizatorii care sunt rootați sau care rulează ROM-uri personalizate își pot tema barele de stare a sistemului în mod nativ, practic fără restricții, dar dacă dispozitivul dvs. nu este rootat, aveți mai puține opțiuni disponibile. Din fericire, există multe aplicații pe Google Play Store care vă permit să schimbați modul în care arată bara de stare la un nivel de bază. Acest lucru este posibil datorită unei combinații inteligente de System Overlay Windows pentru a afișa o bară de stare personalizată peste cea existentă, Ascultători de notificări pentru a afișa notificări și, opțional, un serviciu de accesibilitate pentru a permite colorarea contextuală a personalizării bara de stare.

Cele două capturi de ecran de mai sus arată cum ar arăta bara mea de notificări atunci când folosesc una dintre numeroasele aplicații de suprapunere a barei de stare disponibile în Magazinul Play. Aceste capturi de ecran au fost făcute pe un Huawei Mate 9 nerootat care rulează EMUI 5.0. Pentru cei dintre voi care nu sunt familiarizați cu EMUI, bara de stare nu seamănă deloc cu capturile de ecran de mai sus. În schimb, arată așa:

Dacă nu vă deranjează cum arată bara de stare a stocurilor, atunci aplicații precum stare sau Bara de stare a materialului sunt manuri dumnezeiesti. Dar dacă sau când dispozitivul se actualizează la Android O, este posibil ca aceste aplicații să nu mai funcționeze. Iată cum arată aceleași două aplicații pe un Google Pixel care rulează Android O Developer Preview:

În loc de suprapunerea care blochează bara de stare originală, arată ca suprapunerea se suprapune cu bara de stare originală care are ca rezultat o mare mizerie.

Din păcate, acest lucru face ca aplicațiile ca acestea să fie inutile. Și nu doar aplicațiile de tematică tipice din bara de stare sunt afectate de acest lucru - sunt afectate toate aplicațiile care necesită ca o suprapunere să fie afișată în partea de sus a barei de stare.

Iată o listă cu câteva aplicații populare care pot fi inutile:

  • stare (500.000 - 1.000.000 de instalări)
  • Bara de stare a materialului (1.000.000 - 5.000.000 de instalări)
  • Cool Tool - Statistici de sistem (500.000 - 1.000.000 de instalări)
  • Telecine (50.000 - 100.000 de instalări)
  • Curățați bara de stare (100.000 - 500.000 de instalări)
  • Tinycore (100.000 - 500.000 de instalări)

Și o listă cu unele aplicații care vor funcționa, dar nu se mai pot suprapune deasupra barei de stare (restricționând funcționalitatea anterioară):

  • Amurg (5.000.000 - 10.000.000 de instalări)
  • Atenție (100.000 - 500.000 de instalări)
  • Resource Monitor Mini (50.000 - 100.000 de instalări)
  • Network Monitor Mini (1.000.000 - 5.000.000 de instalări)

Există multe mai multe aplicații în Magazinul Play care folosesc un fel de suprapunere deasupra barei de stare, dar puteți deja să spuneți că o astfel de schimbare va afecta multe aplicații care sunt utilizate de milioane de persoane utilizatorii. Deci ce se întâmplă aici?


TYPE_SYSTEM_OVERLAY este retras

Cu fiecare nouă iterație a Android, Google introduce și depreciază (desemnează ca învechit și care urmează să fie eliminat) diverse funcții. De data aceasta, caracteristica care se află pe blocul de tăiere este TYPE_SYSTEM_OVERLAY. Pentru a cita pagina de referință pentru ceea ce a oferit această caracteristică dezvoltatorilor:

TYPE_SYSTEM_OVERLAY

Tip de fereastră: ferestre suprapuse de sistem, care trebuie afișate deasupra tuturor celorlalte. Aceste ferestre nu trebuie să se concentreze pe intrare, altfel vor interfera cu blocarea tastaturii. În sistemele multiutilizator se afișează numai în fereastra utilizatorului proprietar.

În esență, acest tip de fereastră permite unei aplicații să deseneze deasupra oricărui element de pe ecran - inclusiv bara de stare. Cu toate acestea, începând cu Android O, acest tip de fereastră a fost depreciat. Pentru aplicațiile care nu sunt de sistem, Google recomandă dezvoltatorilor să folosească în schimb TYPE_APPLICATION_OVERLAY. Pentru a cita pagina de referință pentru ce face acest nou tip de fereastră:

TYPE_APPLICATION_OVERLAY

Tip de fereastră: ferestrele de suprapunere a aplicației sunt afișate deasupra tuturor ferestrelor de activitate (tipurile între FIRST_APPLICATION_WINDOW și LAST_APPLICATION_WINDOW), dar sub ferestrele critice ale sistemului, cum ar fi bara de stare sau IME.

Sistemul poate schimba oricând poziția, dimensiunea sau vizibilitatea acestor ferestre pentru a reduce dezordinea vizuală pentru utilizator și, de asemenea, pentru a gestiona resursele.

Sistemul va ajusta importanța proceselor cu acest tip de fereastră pentru a reduce șansa ca ucigașul cu memorie scăzută să le omoare.

În sistemele cu mai mulți utilizatori se afișează numai pe ecranul utilizatorului proprietar.

După cum puteți vedea, acest nou tip de fereastră permite aplicațiilor să suprapună conținut peste toate celelalte ferestre de activitate cu exceptia „ferestre critice ale sistemului, cum ar fi bara de stare sau IME” (IME se referă la tastatură). Acest lucru este în regulă pentru aplicații precum Facebook Messenger, deoarece capetele de chat furnizate de acea aplicație nu au niciun scop să stea deasupra barei de stare, dar acest lucru afectează negativ majoritatea aplicațiilor pe care le-am menționat mai devreme.

În plus, în acest moment nu pare să existe o soluție pentru dezvoltatori. Ne-am putea aștepta ca, pentru a evita această problemă pe Android O, dezvoltatorii pur și simplu își construiesc aplicațiile pentru a viza SDK 25 (Android 7.1.1). Cu toate acestea, după cum a subliniat dezvoltator de Status pe Reddit, Google are înlocuit TYPE_SYSTEM_OVERLAY cu TYPE_APPLICATION_OVERLAY, iar modificarea este independent de SDK-ul țintă versiune. Dezvoltatorii care folosesc TYPE_SYSTEM_OVERLAY în prezent trebuie să folosească TYPE_APPLICATION_OVERLAY pentru a menține compatibilitatea, prin urmare, indiferent de versiunea SDK-ului țintă pe care se bazează o anumită aplicație, aceasta poate nu mai folosiți TYPE_SYSTEM_OVERLAY pe Android O.


Ce se poate face în privința asta?

Nu este tocmai clar de ce Google a făcut această modificare, deoarece încă nu a oferit o explicație oficială. Bănuiesc că este o încercare de a îmbunătăți securitatea pe Android, împiedicând utilizatorii nebănuiți să instaleze accidental aplicații care blochează sau înlocuiesc bara de stare în mod rău intenționat. Din păcate, această modificare prinde multe aplicații perfect legitime care folosesc TYPE_SYSTEM_OVERLAY în focul încrucișat.

Dezvoltatorii care folosesc această caracteristică au deschis rapoarte de eroare pe Issue Tracker de la Android (#260787 și #36574245) pentru a protesta împotriva schimbării și a cere un API alternativ, dar un Googler a comentat tracker-ul cu următoarea afirmație:

Stare: nu se rezolvă (comportament intenționat)

Am urmărit cu echipa de produs și de inginerie și am primit sugestii că dezvoltatorii pot folosi activitățile SHOW_WHEN_LOCKED pentru a arată când dispozitivul este blocat, dar nu mai este posibil să se afișeze în mod intenționat peste ecranul de blocare / peste umbra de notificare

Deocamdată, se pare că acești dezvoltatori nu au noroc, deoarece dezvoltatorii au subliniat că FLAG_SHOW_WHEN_LOCKED încă nu permite ca ferestrele să fie suprapuse deasupra barei de stare. Nu este clar ce pot face dezvoltatorii acestor aplicații, cu excepția să se roage pentru ca Google să schimbe lucrurile sau să ridice iadul despre asta.

Deoarece aceasta este doar prima Previzualizare pentru dezvoltatori pentru Android O, este încă posibil ca Google să le schimbe minte și oferă această funcționalitate pentru aplicațiile care nu vizează Android O sau pentru ca Google să le restabilească TYPE_SYSTEM_OVERLAY. Dar dacă lucrurile rămân așa cum sunt în prezent, poți sărut aceste aplicații la revedere. Și asta ar fi al naibii de rușine.


Mulțumesc lui Eli Irvin pentru că a testat multe dintre aceste aplicații pentru mine!