Dölj beständiga meddelanden för bakgrundsappar och överlägg i Android O

Handledning om att dölja den ihållande aviseringen i Android O som visar när en bakgrundsapp körs eller när en överlagring visas.

Uppdatering 8/25/17: Denna handledning är nu föråldrad, eftersom Google korrigerade metoden vi använder för att dölja den ihållande aviseringen i bakgrunden. Vi har dock upptäckt en annan lösning på det här problemet och har skrivit en kort handledning om det hittar du här.

Android O vill ge stora förbättringar till Android OS som vi alla känner och älskar. Bild-i-bild-läge för telefoner, aviseringskanaler, smart textval, autofylltjänster och under huven många, många ändringar för att förbättra din batteritid, prestanda och säkerhet. En funktion som är tänkt att hjälpa användare att reda ut problem med batterilivslängd och prestanda är bakgrundsprocessbegränsningar. Utan att gå in på för mycket detaljer kan appar i Android O inte längre väckas från deras manifestregistrerade implicita sändningsmottagare och de kan inte längre starta bakgrundstjänster utan att gå igenom JobScheduler. Om en app vill starta en bakgrundstjänst måste den uttryckligen berätta för användaren att den gör det genom att lägga upp ett meddelande. Men när en app körs i bakgrunden tycks Android O nu till synes 

annan ihållande meddelande som talar om vilka appar som körs. Detta inträffar också när en app med SYSTEM_ALERT_WINDOW tillstånd (som den populära Skymning app) visar för närvarande en överlagring.

Android O Beständig avisering för bakgrunds- och överlagringsappar. Medverkande: Ben Schoon \\ 9to5Google

Även om dessa meddelanden är minimerade som standard, kan de inte avvisas av användaren eller permanent blockeras i Inställningar. Detta beteende är väldigt irriterande för många användare, och jag hoppas verkligen att Google ger oss ett sätt att inaktivera detta meddelande i den slutliga Android O/Android 8.0-versionen. Men om de inte gör det, där är fortfarande ett sätt att dölj permanent bakgrundsappaviseringen. Jag kommer att visa upp hur man gör det i en steg-för-steg-guide, följt av en förklaring av hur det fungerar samt viktiga varningar.


Krav:

  • Android O
  1. Installera USB-drivrutinerna för just din telefon om du använder Windows (de kan hittas här).
  2. Ladda ner ADB binär för just ditt operativsystem (Windows, Mac, Linux). Dessa länkar kommer alltid att peka på den senaste versionen av binären, så du behöver inte leta runt på nätet och leta efter den senaste.
  3. Extrahera innehållet i ZIP-filen du laddade ner till en lättillgänglig mapp på din dator (som i mappen Nedladdningar).
  4. Gå till appen Inställningar på din telefon och tryck på alternativet "Om telefonen".
  5. Hitta byggnumret och tryck på det 7 gånger för att aktivera utvecklarläget. Du kommer att se en popup när den är aktiverad.
  6. Gå tillbaka till huvudmenyn Inställningar och ange utvecklaralternativ så att du kan aktivera USB-felsökningsläge.
  7. Anslut din telefon till datorn och svep nedåt i meddelandepanelen för att ändra USB-läget från "endast laddning" till "filöverföring (MTP)". Detta kanske inte är nödvändigt för din telefon.
  8. På din PC, bläddra till katalogen där du extraherade ADB-binären.
  9. Starta en kommandotolk/terminal i denna ADB-katalog. För Windows-användare kan detta göras genom att Skift+Högerklicka och sedan välja alternativet "öppna kommandotolken här".
  10. När du är i kommandotolken eller terminalmiljön anger du följande kommando: adb devices
  11. Detta kommer att starta ADB-demonen. Om det här är första gången du kör ADB kommer du också att se en uppmaning på din telefon som ber dig att auktorisera en anslutning.
  12. Kör nu kommandot adb devices igen från steg 10, och kommandotolken/terminalen kommer att skriva ut serienumret för din enhet. Om det gör det är du redo att gå vidare. Om inte, är USB-drivrutinerna troligen inte korrekt installerade.
  13. Gå tillbaka till kommandotolken och skriv in följande kommando: adb shell
  14. Kör nu följande kommando: cmd appops set android POST_NOTIFICATION ignore
  15. Du kommer inte att få ett framgångsmeddelande eller något, men så länge du inte ser något fel borde det ha fungerat. Nu är det bara att starta om telefonen!

    Ja, jag inser att det här är bilder på en telefonskärm snarare än skärmdumpar. Jag har inte en Android O-kompatibel enhet själv, så jag bad TK att skicka bilder till mig.

  16. Om du vill återställa det här kommandot, skriv in detta i kommandotolken: cmd appops set android POST_NOTIFICATION allow

Hur det fungerar

Genom att använda det dolda kommandoradsgränssnittet för App Ops, Androids användarvänliga behörighetshanteringssystem, kan vi begränsa POST_NOTIFICATION-behörigheten från "android"-paketet. (Obs: vi ställer in den till "ignorera" snarare än "neka" eftersom "neka" kan orsaka vissa fel.) Jag hittade denna behörighet genom att titta på den relevanta källkoden för AppOpsManager, som listar alla möjliga behörigheter som kan beviljas/återkallas, varav många inte är tillgängliga i Android-inställningarna. "Android"-paketet hänvisar faktiskt till "Android System" AKA framework-res.apk, som är ansvarig för den ihärdiga notifikationen som vi försöker bli av med.

Genom att i huvudsak återkalla Android-systemets POST_NOTIFICATION-behörighet kan det inte längre visa ett meddelande! Låter ganska enkelt, eller hur? Tyvärr finns det en varning att vara medveten om. "Android System" är ansvarigt för mer än bara denna avisering, så alla andra aviseringar som den kan lägga upp kommer inte längre att visas. Detta kan inkludera meddelandet om USB-läge (som fortfarande kan ändras genom inställningen i Utvecklaralternativ) samt några andra saker.

Även om detta är en ganska drastisk åtgärd att vidta från vår sida, är det för närvarande det enda sättet att dölja denna avisering isär från att rota din telefon och modifiera själva ramverket, vilket uppenbarligen är något som inte många användare vill eller kan att göra. Jag hoppas verkligen att Google erbjuder ett sätt att dölja detta meddelande i en framtida version av Android O, eller ännu hellre ta bort det här meddelandet helt. Google vill förståeligt nog förbättra användarupplevelsen genom att meddela användare när en app körs i bakgrunden användaren kanske inte är medveten om, men metoden de valde är irriterande för de av oss som vet vad om varje app vi är använder sig av.