Nascondi notifiche persistenti per app in background e overlay in Android O

Tutorial su come nascondere la notifica persistente in Android O che mostra quando è in esecuzione un'app in background o quando viene visualizzato un overlay.

Aggiornamento 25/08/17: questo tutorial è ormai obsoleto, poiché Google ha corretto il metodo che stiamo utilizzando per nascondere la notifica persistente in background. Tuttavia, abbiamo scoperto un'altra soluzione alternativa a questo problema e abbiamo scritto un breve tutorial al riguardo puoi trovare qui.

Android O sta cercando di apportare importanti miglioramenti al sistema operativo Android che tutti conosciamo e amiamo. Modalità Picture-in-Picture per telefoni, canali di notifica, selezione intelligente del testo, servizi di compilazione automatica e tante, tantissime modifiche per migliorare la durata della batteria, le prestazioni e la sicurezza. Una funzionalità che dovrebbe aiutare gli utenti a risolvere i problemi relativi alla durata della batteria e alle prestazioni sono le limitazioni del processo in background. Senza entrare troppo nei dettagli, le app in Android O non possono più essere riattivate dal loro manifest registrato ricevitori di trasmissione impliciti e non possono più avviare servizi in background senza passare JobScheduler. Se un'app desidera avviare un servizio in background, deve informare esplicitamente l'utente che lo sta facendo pubblicando una notifica. Tuttavia, quando un'app è in esecuzione in background, Android O sembra ora attivarsi 

un altro notifica persistente che ti dice quali app sono in esecuzione. Ciò si verifica anche quando un'app con estensione SYSTEM_ALERT_WINDOW permesso (come il popolare Crepuscolo app) sta attualmente visualizzando una sovrapposizione.

Android O Notifica persistente per app in background e overlay. Crediti: Ben Schoon \\ 9to5Google

Sebbene queste notifiche siano ridotte a icona per impostazione predefinita, non possono essere ignorate dall'utente o bloccate in modo permanente nelle Impostazioni. Questo comportamento è molto fastidioso per molti utenti e spero seriamente che Google ci dia un modo per disabilitare questa notifica nella versione finale di Android O/Android 8.0. Tuttavia, se non lo fanno, ecco È ancora un modo per nascondere permanentemente la notifica persistente delle app in background. Mostrerò come farlo in una guida passo passo, seguita da una spiegazione di come funziona e da avvertenze importanti.


Requisiti:

  • Androide O
  1. Installa i driver USB per il tuo telefono specifico se utilizzi Windows (puoi trovarli Qui).
  2. Scarica il Binario ADB per il tuo particolare sistema operativo (finestre, Mac, Linux). Questi collegamenti punteranno sempre all'ultima versione del binario, quindi non dovrai setacciare la rete alla ricerca dell'ultima versione.
  3. Estrai il contenuto del file ZIP che hai scaricato in una cartella facilmente accessibile sul tuo PC (come nella cartella Download).
  4. Vai all'app Impostazioni sul tuo telefono e tocca l'opzione "Informazioni sul telefono".
  5. Trova il numero di build e toccalo 7 volte per abilitare la modalità sviluppatore. Vedrai un popup una volta abilitato.
  6. Torna al menu principale Impostazioni e accedi alle Opzioni sviluppatore in modo da poter abilitare la modalità debug USB.
  7. Collega il telefono al PC e scorri verso il basso sul pannello delle notifiche per modificare la modalità USB da "solo ricarica" ​​a "trasferimento file (MTP)". Potrebbe non essere necessario per il tuo telefono.
  8. Sul tuo PC, vai alla directory in cui hai estratto il binario ADB.
  9. Avvia un prompt dei comandi/terminale in questa directory ADB. Per gli utenti Windows, è possibile farlo premendo Maiusc+clic destro e selezionando l'opzione "Apri prompt dei comandi qui".
  10. Una volta che ti trovi nel prompt dei comandi o nell'ambiente Terminale, inserisci il seguente comando: adb devices
  11. Questo avvierà il demone ADB. Se è la prima volta che esegui ADB, vedrai anche un messaggio sul tuo telefono che ti chiede di autorizzare una connessione.
  12. Ora esegui nuovamente il comando adb devices dal passaggio 10 e il prompt/terminale dei comandi stamperà il numero di serie del tuo dispositivo. Se lo fa, allora sei pronto per andare avanti. In caso contrario, è probabile che i driver USB non siano installati correttamente.
  13. Torna al prompt dei comandi e inserisci il seguente comando: adb shell
  14. Ora esegui il seguente comando: cmd appops set android POST_NOTIFICATION ignore
  15. Non riceverai un messaggio di successo o altro, ma finché non vedi un errore dovrebbe aver funzionato. Ora riavvia il telefono!

    Sì, mi rendo conto che si tratta di immagini dello schermo di un telefono anziché di screenshot. Personalmente non ho un dispositivo compatibile con Android O, quindi ho chiesto a TK di inviarmi immagini.

  16. Se vuoi ripristinare questo comando, inserisci questo nel prompt dei comandi: cmd appops set android POST_NOTIFICATION allow

Come funziona

Utilizzando l'interfaccia a riga di comando nascosta per App Ops, il sistema di gestione delle autorizzazioni rivolto agli utenti di Android, siamo in grado di limitare l'autorizzazione POST_NOTIFICATION dal pacchetto "android". (Nota: lo stiamo impostando su "ignora" anziché su "nega" perché "nega" potrebbe causare alcuni errori.) Ho trovato questa autorizzazione esaminando il codice sorgente pertinente per AppOpsManager, che elenca tutte le possibili autorizzazioni che possono essere concesse/revocate, molte delle quali non accessibili nelle impostazioni di Android. Il pacchetto "android" in realtà si riferisce al "Sistema Android" AKA framework-res.apk, che è responsabile della notifica persistente di cui stiamo cercando di eliminare.

Essenzialmente, revocando l'autorizzazione POST_NOTIFICATION del sistema Android, non sarà più possibile mostrare una notifica! Sembra piuttosto semplice, vero? Sfortunatamente, c’è un avvertimento di cui essere consapevole. "Sistema Android" non è responsabile solo di questa notifica, quindi qualsiasi altra notifica che potrebbe pubblicare non verrà più mostrata. Ciò può includere la notifica della modalità USB (che può ancora essere modificata tramite l'impostazione in Opzioni sviluppatore) e alcune altre cose.

Sebbene questa sia una misura piuttosto drastica da parte nostra, al momento è l'unico modo per nascondere questa notifica dal rooting del telefono e dalla modifica del framework stesso, cosa che ovviamente non molti utenti sono disposti o in grado di fare fare. Spero sinceramente che Google offra un modo per nascondere questa notifica in una futura versione di Android O, o meglio ancora rimuoverla completamente. Google vuole comprensibilmente migliorare l'esperienza dell'utente avvisando gli utenti quando un'app è in esecuzione in background l'utente potrebbe non esserne a conoscenza, ma il metodo che ha scelto è fastidioso per quelli di noi che sanno cosa riguarda ogni app che utilizziamo utilizzando.