Урок за скриване на постоянното известие в Android O, което показва, когато се изпълнява фоново приложение или когато се показва наслагване.
Актуализация 8/25/17: Този урок вече е остарял, тъй като Google коригира метода, който използваме, за да скрием постоянното известие във фонов режим. Ние обаче открихме друго решение на този проблем и написахме кратък урок за него, който можете да намерите тук.
Android O се стреми да внесе големи подобрения в операционната система Android, която всички познаваме и обичаме. Режим картина в картина за телефони, канали за уведомяване, интелигентен избор на текст, услуги за автоматично попълване и под капака много, много промени за подобряване на живота на батерията, производителността и сигурността. Една функция, която трябва да помогне на потребителите да решат проблемите с живота на батерията и производителността, са ограниченията на фоновия процес. Без да навлизаме в твърде много подробности, приложенията в Android O вече не могат да бъдат събудени от техните регистрирани манифести implicit broadcast приемници и те вече не могат да стартират фонови услуги, без да преминат JobScheduler. Ако дадено приложение иска да стартира услуга във фонов режим, то трябва изрично да каже на потребителя, че го прави, като публикува известие. Въпреки това, когато дадено приложение работи във фонов режим, Android O вече привидно се захваща
друг постоянно известие, което ви казва кои приложения се изпълняват. Това се случва и когато приложение с SYSTEM_ALERT_WINDOW разрешение (като популярното Здрач приложение) в момента показва наслагване.Въпреки че тези известия са сведени до минимум по подразбиране, те не могат да бъдат отхвърлени от потребителя или блокирани за постоянно в Настройки. Това поведение е много досадно за много потребители и аз сериозно се надявам, че Google ни дава начин да деактивираме това известие във финалната версия на Android O/Android 8.0. Ако обаче не го направят, там е все още начин за постоянно скриване на постоянното известие за фонови приложения. Ще покажа как да го направя в ръководство стъпка по стъпка, последвано от обяснение как работи, както и важни предупреждения.
Изисквания:
- Android O
- Инсталирайте USB драйверите за вашия конкретен телефон, ако сте на Windows (те могат да бъдат намерени тук).
- Изтеглете ADB двоичен файл за вашата конкретна операционна система (Windows, Mac, Linux). Тези връзки винаги ще сочат към най-новата версия на двоичния файл, така че не е нужно да ровите из мрежата в търсене на най-новата.
- Извлечете съдържанието на ZIP файла, който сте изтеглили, в леснодостъпна папка на вашия компютър (например в папката за изтегляния).
- Отидете в приложението Настройки на телефона си и докоснете опцията „Всичко за телефона“.
- Намерете номера на компилация и го докоснете 7 пъти, за да активирате режима за разработчици. Ще видите изскачащ прозорец, след като бъде активиран.
- Върнете се в главното меню Настройки и влезте в Опции за разработчици, за да можете да активирате USB режима за отстраняване на грешки.
- Включете телефона си в компютъра и плъзнете надолу панела за известия, за да промените USB режима от „само зареждане“ на режим „прехвърляне на файлове (MTP)“. Това може да не е необходимо за вашия телефон.
- На вашия компютър прегледайте директорията, където сте извлекли двоичния файл на ADB.
- Стартирайте команден ред/терминал в тази ADB директория. За потребители на Windows това може да стане чрез Shift+щракване с десен бутон, след което изберете опцията „отваряне на командния ред тук“.
- След като сте в командния ред или терминалната среда, въведете следната команда:
adb devices
- Това ще стартира ADB демона. Ако за първи път стартирате ADB, ще видите подкана на телефона си с молба да разрешите връзка.
- Сега изпълнете отново командата adb devices от стъпка 10 и командният ред/терминал ще отпечата серийния номер на вашето устройство. Ако стане, значи сте готови да продължите напред. Ако не, тогава USB драйверите вероятно не са инсталирани правилно.
- Върнете се в командния ред и въведете следната команда:
adb shell
- Сега изпълнете следната команда:
cmd appops set android POST_NOTIFICATION ignore
- Няма да получите съобщение за успех или нещо подобно, но стига да не виждате грешка, трябваше да работи. Сега просто рестартирайте телефона си!
Да, осъзнавам, че това са снимки на екрана на телефона, а не екранни снимки. Самият аз нямам устройство, съвместимо с Android O, затова помолих TK да ми изпрати изображения.
- Ако искате да върнете тази команда, въведете това в командния ред:
cmd appops set android POST_NOTIFICATION allow
Как работи
Използвайки скрития интерфейс на командния ред за App Ops, ориентираната към потребителя система за управление на разрешения на Android, можем да ограничим разрешението POST_NOTIFICATION от пакета "android". (Забележка: настройваме го на „игнориране“, а не на „отказ“, защото „отказ“ може да причини някои грешки.) Намерих това разрешение, като разгледах съответния изходен код за AppOpsManager, който изброява всички възможни разрешения, които могат да бъдат предоставени/отменени, много от които не са достъпни в настройките на Android. Пакетът "android" всъщност се отнася до "Android System" AKA framework-res.apk, който е отговорен за постоянното известие, от което се опитваме да се отървем.
По същество отменяйки разрешението POST_NOTIFICATION на системата Android, тя вече не може да показва известие! Звучи доста просто, нали? За съжаление има едно предупреждение, което трябва да знаете. „Android System“ е отговорна за повече от това известие, така че всички други известия, които може да публикува, повече няма да се показват. Това може да включва известието за USB режим (което все още може да бъде променено чрез настройката в Опции за разработчици), както и някои други неща.
Въпреки че това е доста драстична мярка, която трябва да предприемем от наша страна, в момента това е единственият начин да скриете това известие отделно от руутване на вашия телефон и модифициране на самата рамка, което очевидно е нещо, което не много потребители желаят или могат да направя. Искрено се надявам, че Google предлага начин да скриете това известие в бъдеща версия на Android O или дори по-добре да премахнете това известие изцяло. Google разбираемо иска да подобри потребителското изживяване, като уведомява потребителите, когато дадено приложение работи във фонов режим потребителят може да не знае, но методът, който са избрали, е досаден за онези от нас, които знаят какво за всяко приложение, което сме използвайки.