Samouczek dotyczący ukrywania trwałego powiadomienia w Androidzie O, które pokazuje, kiedy działa aplikacja w tle lub kiedy wyświetla się nakładka.
Aktualizacja 25.08.17: Ten samouczek jest już nieaktualny, ponieważ Google załatał metodę, której używamy do ukrywania trwałego powiadomienia w tle. Odkryliśmy jednak inne obejście tego problemu i napisaliśmy na ten temat krótki samouczek znajdziesz tutaj.
Android O chce wprowadzić duże ulepszenia do systemu operacyjnego Android, który wszyscy znamy i kochamy. Tryb obrazu w obrazie dla telefonów, kanały powiadomień, inteligentny wybór tekstu, usługi automatycznego uzupełniania i wiele, wiele zmian pod maską poprawiających żywotność baterii, wydajność i bezpieczeństwo. Jedną z funkcji, która ma pomóc użytkownikom rozwiązać problemy z żywotnością baterii i wydajnością, są ograniczenia procesów w tle. Nie wdając się w zbyt wiele szczegółów, aplikacji w systemie Android O nie można już wybudzić z rejestru w manifeście ukrytych odbiorników rozgłoszeniowych i nie mogą już uruchamiać usług w tle bez przechodzenia przez nie Harmonogram zadań. Jeśli aplikacja chce uruchomić usługę w tle, musi wyraźnie poinformować o tym użytkownika, publikując powiadomienie. Jednak gdy aplikacja działa w tle, Android O pozornie się włącza
inny trwałe powiadomienie informujące, jakie aplikacje są uruchomione. Dzieje się tak również wtedy, gdy aplikacja z rozszerzeniem SYSTEM_ALERT_WINDOW pozwolenie (takie jak popularne Zmierzch app) aktualnie wyświetla nakładkę.Chociaż powiadomienia te są domyślnie zminimalizowane, użytkownik nie może ich odrzucić ani trwale zablokować w Ustawieniach. To zachowanie jest bardzo irytujące dla wielu użytkowników i mam nadzieję, że Google umożliwi nam wyłączenie tego powiadomienia w ostatecznej wersji Androida O/Android 8.0. Jeśli jednak tego nie zrobią, nie Jest wciąż jest sposób trwale ukryj trwałe powiadomienie o aplikacjach działających w tle. Pokażę, jak to zrobić, w przewodniku krok po kroku, po którym zamieszczę wyjaśnienie, jak to działa, oraz ważne zastrzeżenia.
Wymagania:
- Android O
- Zainstaluj sterowniki USB dla swojego konkretnego telefonu, jeśli korzystasz z systemu Windows (można je znaleźć Tutaj).
- Pobierz Binarny ADB dla konkretnego systemu operacyjnego (Okna, Prochowiec, Linuksa). Linki te zawsze będą wskazywały najnowszą wersję pliku binarnego, więc nie musisz przeszukiwać sieci w poszukiwaniu najnowszej.
- Wyodrębnij zawartość pobranego pliku ZIP do łatwo dostępnego folderu na komputerze (np. folderu Pobrane).
- Przejdź do aplikacji Ustawienia na swoim telefonie i wybierz opcję „Informacje o telefonie”.
- Znajdź numer kompilacji i dotknij go 7 razy, aby włączyć tryb programisty. Po włączeniu zobaczysz wyskakujące okienko.
- Wróć do głównego menu Ustawienia i wejdź do Opcji programisty, aby włączyć tryb debugowania USB.
- Podłącz telefon do komputera i przesuń w dół panel powiadomień, aby zmienić tryb USB z „tylko ładowanie” na tryb „transfer plików (MTP)”. Może to nie być konieczne w przypadku Twojego telefonu.
- Na komputerze przejdź do katalogu, w którym rozpakowałeś plik binarny ADB.
- Uruchom wiersz poleceń/terminal w tym katalogu ADB. W przypadku użytkowników systemu Windows można to zrobić, naciskając Shift i klikając prawym przyciskiem myszy, a następnie wybierając opcję „Otwórz tutaj wiersz poleceń”.
- Gdy znajdziesz się w wierszu poleceń lub środowisku terminala, wprowadź następujące polecenie:
adb devices
- Spowoduje to uruchomienie demona ADB. Jeśli po raz pierwszy uruchamiasz ADB, na telefonie pojawi się również monit z prośbą o autoryzację połączenia.
- Teraz ponownie uruchom polecenie adb devices z kroku 10, a wiersz poleceń/terminal wydrukuje numer seryjny twojego urządzenia. Jeśli tak, jesteś gotowy, aby przejść dalej. Jeśli nie, oznacza to, że sterowniki USB prawdopodobnie nie zostały poprawnie zainstalowane.
- Wróć do wiersza poleceń i wprowadź następujące polecenie:
adb shell
- Teraz wykonaj następujące polecenie:
cmd appops set android POST_NOTIFICATION ignore
- Nie otrzymasz komunikatu o powodzeniu ani nic, ale dopóki nie zobaczysz błędu, powinno zadziałać. Teraz wystarczy ponownie uruchomić telefon!
Tak, zdaję sobie sprawę, że są to zdjęcia ekranu telefonu, a nie zrzuty ekranu. Sam nie mam urządzenia kompatybilnego z Androidem O, więc poprosiłem TK o przesłanie mi zdjęć.
- Jeśli chcesz cofnąć to polecenie, wpisz to w wierszu poleceń:
cmd appops set android POST_NOTIFICATION allow
Jak to działa
Korzystając z ukrytego interfejsu wiersza poleceń dla App Ops, systemu zarządzania uprawnieniami dostępnego dla użytkownika w systemie Android, możemy ograniczyć uprawnienia POST_NOTIFICATION z pakietu „Android”. (Uwaga: ustawiamy opcję „ignoruj”, a nie „odmawiaj”, ponieważ „odmawiaj” może powodować pewne błędy.) Znalazłem to pozwolenie, przeglądając odpowiedni kod źródłowy Menedżer aplikacji, który zawiera listę wszystkich możliwych uprawnień, które można przyznać/odwołać, a wiele z nich nie jest dostępnych w ustawieniach Androida. Pakiet „Android” w rzeczywistości odnosi się do „Systemu Android” AKA framework-res.apk, który jest odpowiedzialny za ciągłe powiadomienia, których próbujemy się pozbyć.
Zasadniczo cofając pozwolenie POST_NOTIFICATION systemu Android, nie może on już wyświetlać powiadomień! Brzmi całkiem prosto, prawda? Niestety należy pamiętać o pewnym zastrzeżeniu. „System Android” odpowiada za coś więcej niż tylko to powiadomienie, więc wszelkie inne powiadomienia, które może publikować, nie będą już wyświetlane. Może to obejmować powiadomienie o trybie USB (które nadal można zmienić za pomocą ustawień w Opcjach programisty), a także kilka innych rzeczy.
Chociaż jest to dość drastyczny krok z naszej strony, obecnie jest to jedyny sposób na ukrycie tego powiadomienia od zrootowania telefonu i modyfikacji samego frameworka, co oczywiście jest czymś, czego niewielu użytkowników chce lub nie może do zrobienia. Mam szczerą nadzieję, że Google zaoferuje sposób na ukrycie tego powiadomienia w przyszłej wersji Androida O lub jeszcze lepiej całkowite usunięcie tego powiadomienia. Google, co zrozumiałe, chce poprawić wygodę użytkownika, powiadamiając go, gdy aplikacja działa w tle użytkownik może nie być tego świadomy, ale wybrana przez niego metoda jest irytująca dla tych z nas, którzy wiedzą, czym jesteśmy w każdej aplikacji za pomocą.