Руководство по сокрытию постоянного уведомления в Android O, которое показывает, когда запущено фоновое приложение или отображается наложение.
Обновление от 25 августа 2017 г.: Это руководство устарело, поскольку Google исправил метод, который мы используем для скрытия постоянного уведомления в фоновом режиме. Однако мы нашли другой способ решения этой проблемы и написали по нему краткое руководство, которое вы можете найти здесь.
Android O стремится внести существенные улучшения в ОС Android, которую мы все знаем и любим. Режим «картинка в картинке» для телефонов, каналы уведомлений, умный выбор текста, услуги автозаполнения и множество внутренних изменений, позволяющих увеличить время автономной работы, производительность и безопасность. Одной из функций, которая должна помочь пользователям решать проблемы со временем автономной работы и производительностью, являются ограничения фоновых процессов. Не вдаваясь в подробности: приложения в Android O больше нельзя вывести из состояния, зарегистрированного в манифесте. неявные широковещательные приемники, и они больше не могут запускать фоновые службы без прохождения Планировщик заданий. Если приложение хочет запустить фоновую службу, оно должно явно сообщить пользователю об этом, отправив уведомление. Однако, когда приложение работает в фоновом режиме, Android O теперь, похоже, включается.
другой постоянное уведомление о том, какие приложения запущены. Это также происходит, когда приложение с СИСТЕМА_ALERT_WINDOW разрешение (например, популярное Сумерки app) в настоящее время отображает наложение.Хотя эти уведомления по умолчанию свернуты, пользователь не может их закрыть или навсегда заблокировать в настройках. Такое поведение очень раздражает многих пользователей, и я серьезно надеюсь, что Google предоставит нам возможность отключить это уведомление в финальной версии Android O/Android 8.0. Однако если они этого не сделают, то является все еще способ навсегда скрыть постоянное уведомление фоновых приложений. Я покажу, как это сделать, в пошаговом руководстве с последующим объяснением того, как это работает, а также с важными предостережениями.
Требования:
- Андроид О
- Установите драйверы USB для вашего конкретного телефона, если вы используете Windows (их можно найти здесь).
- Загрузите Бинарный файл АБР для вашей конкретной операционной системы (Окна, Мак, Линукс). Эти ссылки всегда будут указывать на последнюю версию двоичного файла, поэтому вам не придется рыскать по сети в поисках последней версии.
- Извлеките содержимое загруженного вами 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» (также известной как framework-res.apk), которая отвечает за постоянное уведомление, от которого мы пытаемся избавиться.
По сути, отозвав разрешение POST_NOTIFICATION системы Android, она больше не сможет отображать уведомления! Звучит довольно просто, не так ли? К сожалению, есть нюанс, о котором следует знать. «Система Android» отвечает не только за это уведомление, поэтому любые другие уведомления, которые она может публиковать, больше не будут отображаться. Это может включать уведомление о режиме USB (которое все еще можно изменить с помощью настроек в параметрах разработчика), а также некоторые другие вещи.
Хотя это довольно радикальная мера с нашей стороны, на данный момент это единственный способ скрыть это уведомление отдельно. от рутирования вашего телефона и изменения самой платформы, что, очевидно, не многие пользователи хотят или могут делать. Я искренне надеюсь, что Google предложит способ скрыть это уведомление в будущей версии Android O или, что еще лучше, полностью удалить это уведомление. Понятно, что Google хочет улучшить взаимодействие с пользователем, уведомляя пользователей, когда приложение работает в фоновом режиме. пользователь может не знать, но выбранный им метод раздражает тех из нас, кто знает, что о каждом приложении мы делаем с использованием.