Скрыть постоянное уведомление для фоновых приложений и наложений в Android O

Руководство по сокрытию постоянного уведомления в Android O, которое показывает, когда запущено фоновое приложение или отображается наложение.

Обновление от 25 августа 2017 г.: Это руководство устарело, поскольку Google исправил метод, который мы используем для скрытия постоянного уведомления в фоновом режиме. Однако мы нашли другой способ решения этой проблемы и написали по нему краткое руководство, которое вы можете найти здесь.

Android O стремится внести существенные улучшения в ОС Android, которую мы все знаем и любим. Режим «картинка в картинке» для телефонов, каналы уведомлений, умный выбор текста, услуги автозаполнения и множество внутренних изменений, позволяющих увеличить время автономной работы, производительность и безопасность. Одной из функций, которая должна помочь пользователям решать проблемы со временем автономной работы и производительностью, являются ограничения фоновых процессов. Не вдаваясь в подробности: приложения в Android O больше нельзя вывести из состояния, зарегистрированного в манифесте. неявные широковещательные приемники, и они больше не могут запускать фоновые службы без прохождения Планировщик заданий. Если приложение хочет запустить фоновую службу, оно должно явно сообщить пользователю об этом, отправив уведомление. Однако, когда приложение работает в фоновом режиме, Android O теперь, похоже, включается.

другой постоянное уведомление о том, какие приложения запущены. Это также происходит, когда приложение с СИСТЕМА_ALERT_WINDOW разрешение (например, популярное Сумерки app) в настоящее время отображает наложение.

Постоянное уведомление Android O для фоновых и оверлейных приложений. Кредиты: Бен Шун \\ 9to5Google

Хотя эти уведомления по умолчанию свернуты, пользователь не может их закрыть или навсегда заблокировать в настройках. Такое поведение очень раздражает многих пользователей, и я серьезно надеюсь, что Google предоставит нам возможность отключить это уведомление в финальной версии Android O/Android 8.0. Однако если они этого не сделают, то является все еще способ навсегда скрыть постоянное уведомление фоновых приложений. Я покажу, как это сделать, в пошаговом руководстве с последующим объяснением того, как это работает, а также с важными предостережениями.


Требования:

  • Андроид О
  1. Установите драйверы USB для вашего конкретного телефона, если вы используете Windows (их можно найти здесь).
  2. Загрузите Бинарный файл АБР для вашей конкретной операционной системы (Окна, Мак, Линукс). Эти ссылки всегда будут указывать на последнюю версию двоичного файла, поэтому вам не придется рыскать по сети в поисках последней версии.
  3. Извлеките содержимое загруженного вами ZIP-файла в легкодоступную папку на вашем компьютере (например, в папку «Загрузки»).
  4. Зайдите в приложение «Настройки» на своем телефоне и нажмите «О телефоне».
  5. Найдите номер сборки и нажмите на него 7 раз, чтобы включить режим разработчика. Вы увидите всплывающее окно, как только оно будет включено.
  6. Вернитесь в главное меню «Настройки» и войдите в «Параметры разработчика», чтобы включить режим отладки по USB.
  7. Подключите телефон к ПК и проведите вниз по панели уведомлений, чтобы изменить режим USB с «только зарядка» на режим «передача файлов (MTP)». Для вашего телефона это может не потребоваться.
  8. На своем компьютере перейдите в каталог, в который вы распаковали двоичный файл ADB.
  9. Запустите командную строку/терминал в этом каталоге ADB. Для пользователей Windows это можно сделать, нажав Shift + щелчок правой кнопкой мыши и выбрав опцию «Открыть командную строку здесь».
  10. Находясь в командной строке или среде терминала, введите следующую команду: adb devices
  11. Это запустит демон ADB. Если вы впервые запускаете ADB, вы также увидите на своем телефоне сообщение с просьбой авторизовать соединение.
  12. Теперь повторно запустите команду adb devices с шага 10, и командная строка/терминал выведет серийный номер вашего устройства. Если да, то вы готовы двигаться дальше. Если нет, то драйверы USB, вероятно, установлены неправильно.
  13. Вернитесь в командную строку и введите следующую команду: adb shell
  14. Теперь выполните следующую команду: cmd appops set android POST_NOTIFICATION ignore
  15. Вы не получите сообщение об успехе или что-то в этом роде, но пока вы не видите ошибку, все должно работать. Теперь просто перезагрузите телефон!

    Да, я понимаю, что это фотографии экрана телефона, а не скриншоты. У меня самого нет устройства, совместимого с Android O, поэтому я попросил TK прислать мне изображения.

  16. Если вы хотите отменить эту команду, введите это в командную строку: 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 хочет улучшить взаимодействие с пользователем, уведомляя пользователей, когда приложение работает в фоновом режиме. пользователь может не знать, но выбранный им метод раздражает тех из нас, кто знает, что о каждом приложении мы делаем с использованием.