Android O razbija aplikacije, ki se prekrivajo na vrhu statusne vrstice

Android O opusti TYPE_SYSTEM_OVERLAY v korist TYPE_APPLICATION_OVERLAY, zaradi česar se aplikacije, ki se prekrivajo na vrhu vrstice stanja, pokvarijo.

Množica objav, ki opisujejo nove funkcije, namenjene uporabnikom, najdemo v Android O se začenja upočasnjevati zdaj, ko so imeli uporabniki na voljo tedne, da preizkusijo programsko opremo na svoji napravi. Vendar pa je pod pokrovom veliko, veliko sprememb, ki se počasi odkrivajo. O eni taki spremembi smo objavili prejšnji dan o napravah Nexus in Pixel z operacijskim sistemom Android O prevzem SDCardFS. Toda danes bi radi razpravljali o spremembi, ki bo vplivala na razvijalce določenih aplikacij, zlasti tistih, ki prekrivni element na vrhu statusne vrstice. Zdi se, da so te aplikacije pokvarjen v predogledu za razvijalce za Android O, ki bi ga na prvi pogled morda zavrnili kot preprosto napako, a če se poglobite v referenčno dokumentacijo, je to morda nameravana sprememba s strani Googla.


Android O prekine prekrivne vrstice stanja

Ena mojih najljubših stvari pri Androidu je, kako prilagodljiv je. Uporabniki, ki so zakoreninjeni ali uporabljajo ROM-e po meri, lahko izvorno tematizirajo vrstice stanja sistema brez omejitev, če pa vaša naprava ni zakoreninjena, imate na voljo manj možnosti. Na srečo je v trgovini Google Play veliko aplikacij, ki vam omogočajo spreminjanje videza vrstice stanja na osnovni ravni. To je mogoče zaradi pametne kombinacije System Overlay Windows za prikaz statusne vrstice po meri čez obstoječo, Poslušalci obvestil za prikaz obvestil in po izbiri storitev dostopnosti, ki omogoča kontekstualno obarvanje po meri statusna vrstica.

Zgornja dva posnetka zaslona prikazujeta, kako bi bila videti moja vrstica z obvestili, ko bi uporabljal eno od številnih aplikacij za prekrivanje vrstice stanja, ki so na voljo v Trgovini Play. Ti posnetki zaslona so bili posneti z neukoreninjenim Huawei Mate 9 z EMUI 5.0. Za tiste, ki ne poznate EMUI, vrstica stanja ni nič podobna zgornjim posnetkom zaslona. Namesto tega je videti takole:

Če vas ne moti, kako izgleda vrstica stanja vaše zaloge, lahko aplikacije, kot je npr Stanje oz Vrstica stanja materiala so božji dar. Toda če ali ko se vaša naprava posodobi na Android O, te aplikacije morda ne bodo več delovale. Evo, kako izgledata ti dve aplikaciji na Google Pixelu, ki izvaja Android O Developer Preview:

Namesto da prekrivanje blokira prvotno vrstico stanja, je videti kot prekrivanje prekriva z izvirno vrstico stanja, kar povzroči veliko zmešnjavo.

Na žalost so zaradi tega aplikacije, kot so te, dejansko neuporabne. In to ne vpliva le na vaše tipične aplikacije za temo vrstice stanja – prizadete so vse aplikacije, ki zahtevajo prikaz prekrivanja na vrhu statusne vrstice.

Tukaj je seznam nekaterih priljubljenih aplikacij, ki so morda neuporabne:

  • Stanje (500.000 - 1.000.000 namestitev)
  • Vrstica stanja materiala (1.000.000 - 5.000.000 namestitev)
  • Kul orodje - sistemska statistika (500.000 - 1.000.000 namestitev)
  • Telekino (50.000–100.000 namestitev)
  • Očistite vrstico stanja (100.000–500.000 namestitev)
  • Tinycore (100.000–500.000 namestitev)

In seznam nekaterih aplikacij, ki bodo delovale, vendar se ne morejo več prekrivati ​​na vrhu statusne vrstice (omejujejo prejšnje funkcije):

  • Somrak (5.000.000 - 10.000.000 namestitev)
  • Glave gor (100.000–500.000 namestitev)
  • Resource Monitor Mini (50.000–100.000 namestitev)
  • Omrežni monitor Mini (1.000.000 - 5.000.000 namestitev)

V Trgovini Play je veliko več aplikacij, ki uporabljajo nekakšno prekrivanje na vrhu vrstice stanja, vendar že lahko rečete, da bo takšna sprememba vplivala na številne aplikacije, ki jih uporablja potencialno na milijone uporabniki. Torej, kaj se tukaj dogaja?


TYPE_SYSTEM_OVERLAY je zastarel

Z vsako novo različico Androida Google uvaja in opušča (označuje kot zastarele in jih je treba odstraniti) različne funkcije. Tokrat je funkcija, ki je v bloku za sekanje, TYPE_SYSTEM_OVERLAY. Da citiram referenčna stran kaj je ta funkcija ponudila razvijalcem:

TYPE_SYSTEM_OVERLAY

Vrsta okna: sistemska prekrivna okna, ki morajo biti prikazana poleg vsega drugega. Ta okna ne smejo prevzeti fokusa vnosa, sicer bodo motila zaklepanje tipkovnice. V večuporabniških sistemih se prikaže samo v oknu lastnika uporabnika.

V bistvu ta vrsta okna omogoča aplikaciji, da riše na vrhu katerega koli elementa na zaslonu - vključno z vrstico stanja. Vendar pa je ta vrsta oken od Androida O opuščena. Za nesistemske aplikacije Google priporoča, da razvijalci namesto tega uporabljajo TYPE_APPLICATION_OVERLAY. Da citiram referenčna stran kaj naredi ta nova vrsta okna:

TYPE_APPLICATION_OVERLAY

Vrsta okna: Prekrivna okna aplikacij so prikazana nad vsemi okni dejavnosti (vrste med FIRST_APPLICATION_WINDOW in LAST_APPLICATION_WINDOW), vendar pod kritičnimi sistemskimi okni, kot sta vrstica stanja ali IME.

Sistem lahko kadar koli spremeni položaj, velikost ali vidnost teh oken, da zmanjša vizualno nered za uporabnika in tudi upravlja vire.

Sistem bo prilagodil pomembnost procesov s to vrsto oken, da bi zmanjšal možnost, da jih ubijalec z malo pomnilnika uniči.

V večuporabniških sistemih se prikaže samo na zaslonu lastnika uporabnika.

Kot lahko vidite, ta nova vrsta oken omogoča aplikacijam, da prekrijejo vsebino nad vsemi drugimi okni dejavnosti razen "kritična sistemska okna, kot je vrstica stanja ali IME" (IME se nanaša na tipkovnico). To je v redu za aplikacije, kot je Facebook Messenger, saj klepetalnice, ki jih ponuja ta aplikacija, nimajo namena sedeti na vrhu statusne vrstice, vendar to negativno vpliva na večino aplikacij, ki sem jih omenil prej.

Poleg tega se zdi, da trenutno ni rešitve, ki bi jo lahko uporabili razvijalci. Lahko bi pričakovali, da bodo razvijalci, da bi se izognili tej težavi v sistemu Android O, svoje aplikacije preprosto zgradili tako, da bodo ciljali na SDK 25 (Android 7.1.1). Vendar, kot poudarjajo v razvijalec statusa na Redditu, ima Google zamenjal TYPE_SYSTEM_OVERLAY s TYPE_APPLICATION_OVERLAY, sprememba pa je neodvisen od ciljnega SDK-ja različica. Razvijalci, ki uporabljajo TYPE_SYSTEM_OVERLAY, morajo trenutno uporabljati TYPE_APPLICATION_OVERLAY, da ohranijo združljivost, zato lahko ne glede na to, na kateri ciljni različici SDK temelji določena aplikacija ne uporabljajte več TYPE_SYSTEM_OVERLAY v sistemu Android O.


Kaj se lahko glede tega naredi?

Zakaj je Google naredil to spremembo, ni povsem jasno, saj uradne razlage še niso podali. Predvidevam, da gre za poskus izboljšanja varnosti v sistemu Android s preprečevanjem nič hudega slutečim uporabnikom, da bi pomotoma namestili aplikacije, ki zlonamerno blokirajo ali zamenjajo njihovo vrstico stanja. Na žalost ta sprememba ujame številne popolnoma legitimne aplikacije, ki uporabljajo TYPE_SYSTEM_OVERLAY v navzkrižnem ognju.

Razvijalci, ki uporabljajo to funkcijo, so odprli poročila o napakah v Androidovem Issue Trackerju (#260787 in #36574245), da bi protestiral proti spremembi in zahteval alternativni API, vendar je Googler komentiral sledilnik z naslednjo izjavo:

Stanje: ne bo popravljeno (načrtovano vedenje)

Povezali smo se z ekipo izdelkov in inženirjev ter dobili predlog, da lahko razvijalci uporabijo dejavnosti SHOW_WHEN_LOCKED za prikaži, ko je naprava zaklenjena, vendar namenoma ni več mogoče prikazati nad zaklenjenim zaslonom / nad zaslonom za obvestila

Zaenkrat se zdi, da ti razvijalci nimajo sreče, saj so razvijalci poudarili, da FLAG_SHOW_WHEN_LOCKED še vedno ne dovoljuje prekrivanja oken na vrhu statusne vrstice. Ni jasno, kaj lahko razvijalci teh aplikacij storijo, razen da molijo, da bi Google spremenil stvari, ali da zaradi tega povzročijo pekel.

Ker je to le prvi predogled za razvijalce za Android O, jih Google še vedno lahko spremeni misli in omogočite to funkcijo za aplikacije, ki ne ciljajo na Android O, ali za obnovitev Googlu TYPE_SYSTEM_OVERLAY. Če pa stvari ostanejo takšne, kot so trenutno, lahko poljub te aplikacije v slovo. In to bi bila prekleta škoda.


Hvala Eli Irvin, ker je zame preizkusil veliko teh aplikacij!