Android O depreca TYPE_SYSTEM_OVERLAY a favore di TYPE_APPLICATION_OVERLAY, con conseguente interruzione delle app che si sovrappongono alla barra di stato.
Il flusso di post che delineano le nuove funzionalità rivolte agli utenti presenti in Androide O sta iniziando a rallentare ora che gli utenti hanno avuto settimane per testare il software sul proprio dispositivo. Tuttavia, ci sono moltissimi cambiamenti apportati dietro le quinte che vengono lentamente scoperti. Abbiamo pubblicato uno di questi cambiamenti proprio l'altro giorno sui dispositivi Nexus e Pixel con Android O adottando SDCardFS. Ma oggi vorremmo discutere di un cambiamento che interesserà gli sviluppatori di alcune app, in particolare quelle che sovrapposizione sulla parte superiore della barra di stato. Queste applicazioni sembrano essere rotto nell'anteprima per sviluppatori di Android O, che a prima vista potresti liquidare come un semplice bug, ma analizzando più a fondo la documentazione di riferimento, potrebbe esserlo un cambiamento voluto da Google.
Android O interrompe gli overlay della barra di stato
Una delle cose che preferisco di Android è la sua personalizzazione. Gli utenti con root o che utilizzano ROM personalizzate possono personalizzare le barre di stato del sistema in modo nativo senza praticamente alcuna restrizione, ma se il tuo dispositivo non è rootato hai meno opzioni a tua disposizione. Fortunatamente, ci sono molte applicazioni sul Google Play Store che ti consentono di modificare l'aspetto della barra di stato a livello base. Ciò è possibile grazie a un'intelligente combinazione di System Overlay Windows per visualizzare una barra di stato personalizzata sopra quella esistente, Listener di notifiche per visualizzare le notifiche e, facoltativamente, un servizio di accessibilità per consentire la colorazione contestuale della personalizzazione barra di stato.
I due screenshot qui sopra mostrano come apparirebbe la mia barra di notifica quando utilizzo una delle tante app in sovrapposizione della barra di stato disponibili sul Play Store. Questi screenshot sono stati acquisiti su un Huawei Mate 9 senza root con EMUI 5.0. Per quelli di voi che non hanno familiarità con EMUI, la barra di stato non assomiglia per niente agli screenshot sopra. Invece, assomiglia a questo:
Se non ti dispiace l'aspetto della barra di stato delle scorte, allora app come Stato O Barra di stato del materiale sono manna dal cielo. Ma se o quando il tuo dispositivo viene aggiornato ad Android O, queste applicazioni potrebbero non funzionare più. Ecco come appaiono queste stesse due app su un Google Pixel con Android O Developer Preview:
Piuttosto che l'overlay che blocca la barra di stato originale, sembra l'overlay si sovrappone con la barra di stato originale che si traduce in un enorme pasticcio.
Sfortunatamente, questo rende effettivamente inutili app come queste. E non sono solo le tipiche applicazioni a tema della barra di stato ad essere interessate da questo - sono interessate tutte le app che richiedono la visualizzazione di un overlay nella parte superiore della barra di stato.
Ecco un elenco di alcune app popolari che potrebbero essere rese inutilizzabili:
- Stato (500.000 - 1.000.000 di installazioni)
- Barra di stato del materiale (1.000.000 - 5.000.000 di installazioni)
- Strumento interessante: statistiche di sistema (500.000 - 1.000.000 di installazioni)
- Telecinema (50.000 - 100.000 installazioni)
- Barra di stato pulita (100.000 - 500.000 installazioni)
- Tinycore (100.000 - 500.000 installazioni)
E un elenco di alcune app che funzioneranno, ma che non potranno più sovrapporsi alla barra di stato (limitando le funzionalità precedenti):
- Crepuscolo (5.000.000 - 10.000.000 di installazioni)
- Dritta (100.000 - 500.000 installazioni)
- Monitoraggio delle risorse Mini (50.000 - 100.000 installazioni)
- Monitor di rete Mini (1.000.000 - 5.000.000 di installazioni)
Ci sono molte altre app sul Play Store che utilizzano una sorta di overlay nella parte superiore della barra di stato, ma puoi già dire che un tale cambiamento influenzerà molte app utilizzate potenzialmente da milioni di persone utenti. Allora cosa sta succedendo qui?
TYPE_SYSTEM_OVERLAY sta per essere deprecato
Con ogni nuova iterazione di Android, Google introduce e depreca (designa come obsolete e da rimuovere) varie funzionalità. Questa volta, la funzionalità che si trova sul ceppo è TYPE_SYSTEM_OVERLAY. Per citare il pagina di riferimento per ciò che questa funzionalità ha offerto agli sviluppatori:
TYPE_SYSTEM_OVERLAY
Tipo di finestra: finestre sovrapposte di sistema, che devono essere visualizzate sopra tutto il resto. Queste finestre non devono essere focalizzate sull'input, altrimenti interferiranno con lo scudo tastiera. Nei sistemi multiutente viene visualizzato solo nella finestra dell'utente proprietario.
In sostanza, questo tipo di finestra consente a un'app di disegnare sopra qualsiasi elemento sullo schermo, inclusa la barra di stato. Tuttavia, a partire da Android O, questo tipo di finestra è stato deprecato. Per le app non di sistema, Google consiglia agli sviluppatori di utilizzare invece TYPE_APPLICATION_OVERLAY. Per citare il pagina di riferimento per quello che fa questo nuovo tipo di finestra:
TYPE_APPLICATION_OVERLAY
Tipo di finestra: le finestre in sovrapposizione dell'applicazione vengono visualizzate sopra tutte le finestre di attività (tipi tra
FIRST_APPLICATION_WINDOW
ELAST_APPLICATION_WINDOW
) ma sotto finestre di sistema critiche come la barra di stato o l'IME.Il sistema può modificare la posizione, la dimensione o la visibilità di queste finestre in qualsiasi momento per ridurre l'ingombro visivo per l'utente e gestire anche le risorse.
Il sistema regolerà l'importanza dei processi con questo tipo di finestra per ridurre la possibilità che il killer con poca memoria li uccida.
Nei sistemi multiutente viene visualizzato solo sullo schermo dell'utente proprietario.
Come puoi vedere, questo nuovo tipo di finestra consente alle app di sovrapporre il contenuto a tutte le altre finestre di attività tranne "finestre di sistema critiche come la barra di stato o IME" (IME si riferisce alla tastiera). Questo va bene per app come Facebook Messenger, poiché le chathead fornite da quell'app non hanno alcuno scopo se si trovano in cima alla barra di stato, ma questo influisce negativamente sulla maggior parte delle app che ho menzionato prima.
Inoltre, al momento non sembra esserci una soluzione alternativa da utilizzare per gli sviluppatori. Ci si potrebbe aspettare che, per evitare questo problema su Android O, gli sviluppatori creino semplicemente le loro app in modo che abbiano come target l'SDK 25 (Android 7.1.1). Tuttavia, come sottolineato dall'art sviluppatore di Status su Reddit, Google ha sostituito TYPE_SYSTEM_OVERLAY con TYPE_APPLICATION_OVERLAY e la modifica è indipendente dall'SDK di destinazione versione. Gli sviluppatori che utilizzano TYPE_SYSTEM_OVERLAY attualmente devono utilizzare TYPE_APPLICATION_OVERLAY per mantenere la compatibilità, quindi, indipendentemente dalla versione SDK di destinazione su cui si basa una particolare app, può non utilizzare più TYPE_SYSTEM_OVERLAY su Android O.
Cosa si può fare a riguardo?
Non è esattamente chiaro il motivo per cui Google abbia apportato questa modifica, poiché non ha ancora fornito una spiegazione ufficiale. La mia ipotesi è che si tratti di un tentativo di migliorare la sicurezza su Android impedendo agli utenti ignari di installare accidentalmente app che bloccano o sostituiscono in modo dannoso la barra di stato. Sfortunatamente, questa modifica cattura molte applicazioni perfettamente legittime che utilizzano TYPE_SYSTEM_OVERLAY nel fuoco incrociato.
Gli sviluppatori che utilizzano questa funzionalità hanno aperto segnalazioni di bug sull'Issue Tracker di Android (#260787 E #36574245) per protestare contro la modifica e chiedere un'API alternativa, ma un Googler ha commentato il tracker con il seguente dichiarazione:
Stato: Non verrà risolto (comportamento previsto)
Abbiamo contattato il team tecnico e del prodotto e abbiamo ricevuto suggerimenti sugli sviluppatori che possono utilizzare le attività SHOW_WHEN_LOCKED mostra quando il dispositivo è bloccato, ma non è più intenzionalmente possibile mostrarlo sulla schermata di blocco/sull'area notifiche
Per ora, sembra che questi sviluppatori siano sfortunati, poiché gli sviluppatori hanno sottolineato che FLAG_SHOW_WHEN_LOCKED non consente ancora di sovrapporre le finestre alla barra di stato. Non è chiaro cosa possano fare gli sviluppatori di queste app se non pregare affinché Google cambi le cose o scatenare l'inferno.
Poiché questa è solo la prima anteprima per sviluppatori per Android O, è ancora possibile per Google modificarla menti e fornire questa funzionalità per le app che non hanno come target Android O o per il ripristino di Google TYPE_SYSTEM_OVERLAY. Ma se le cose rimangono come sono attualmente, puoi farlo saluta queste app. E sarebbe un vero peccato.
Grazie a Eli Irvin per aver testato molte di queste app per me!