Есть ли способ определить, какое приложение рисует поверх других приложений?
Например, приложение Facebook Messenger может рисовать пузыри чата поверх всего, но как мне узнать, какое приложение это делает?
Моя проблема:
У меня есть приложение, которое рисует рекламу поверх всего, и я хочу знать, какое приложение делает это. Не просто удалить его, но предупредить всех, кто использует это приложение. (Я недавно не устанавливал никаких приложений и уже проверил последние обновления.)
Я пытался использовать Dump View Hierarchy для UI Automator из Android Studio, но кажется, что приложения, которые рисуются сверху, не могут быть выбраны таким образом.
(Нажмите на изображение, чтобы увеличить)
applications
overlay
andreroggeri
источник
источник
Ответы:
Замечания:
Редактировать: сократить погоню в более раннем решении и следовать только этому отредактированному разделу.
Настройте adb и выполните эту команду:
Вы получите вывод всех активных наложений на экране. Пример вывода с DU Screen Recorder, Tasker и AZ Screen Recorder, показывающий активные наложения на экране:
Выделенный текст рядом с package = и перед appop - это название пакета (ов) приложений, которые в настоящее время рисуют наложение на экране. В вашем случае выходные данные, включая имена пакетов, будут отличаться.
Запишите имена пакетов (далее как PKG) и выполните эту команду:
Замените PKG на имя пакета, которое вы записали. Если у вас было несколько имен пакетов, повторите команду с одним именем пакета за раз.
Команда принудительно остановит приложение и тем самым откажется от наложения. Это должно работать. В качестве альтернативы вы можете лишить приложения разрешения «Рисовать поверх других приложений» (кратко наложение экрана) с помощью этой команды:
Снова замените PKG на имя пакета при необходимости. Кроме того, вам может потребоваться повторить команду принудительной остановки для PKG. Если вы решили отменить изменения, замените ignore на allow в указанной выше команде.
В качестве альтернативы вы можете использовать App Ops для управления разрешениями из графического интерфейса.
Чтобы узнать, какое имя пакета соответствует какому приложению, вы можете попробовать приложение с открытым исходным кодом, такое как « Информация о приложениях» . Поиск по имени пакета, и вы получите имя приложения.
Редактирование завершено
Вам действительно не нужно больше читать сейчас . Я оставляю предыдущее решение (т.е. следующий раздел) без изменений, потому что 21 человек, проголосовавший за него, нашел это полезным, и я не хочу больше портить.
Простой способ - найти все приложения, имеющие разрешение «рисовать поверх других приложений», а затем выделить их из тех, которые в данный момент активны на экране. После этого включите принудительную остановку этих распространенных приложений, пока не определите приложение, ответственное за активное наложение.
Перечислять приложения, имеющие разрешение для наложения
Разрешение, требуемое приложением для создания наложения:
android.permission.SYSTEM_ALERT_WINDOW
(рисовать поверх других приложений).Нам нужно выяснить все установленные приложения, имеющие указанное разрешение. Это зависит от вас, чтобы найти метод для этого. Мой ответ здесь может помочь вам.
Обратите внимание, что нам нужны имена пакетов приложений, а не их ярлыки.
Вишня из активных окон
Выполнить команду
Это даст вам подробную информацию о том, что вызывает появление чего-либо на экране, включая имя компонента приложения, вызывающего это.
Как вы могли бы извлечь имя, зависит от вас. Вы можете попробовать эту команду, однако
Если вы получили сообщение об ошибке: «grep» не распознается как внутренняя или внешняя команда , в Windows попробуйте эту альтернативную команду:
Демо выход
В приведенном выше выводе все последующее
u0
и предшествующее/
является именем пакета приложения. Приложение может иметь несколько компонентов, отображающих что-то на экране.Вы должны создать список этих имен пакетов. Если у вас установлен BusyBox , вы можете сделать
Во всяком случае, теперь у вас будет два списка:
android.permission.SYSTEM_ALERT_WINDOW
.Сравните эти два списка и отдельные приложения, которые являются общими в обоих списках. Этот третий список будет состоять из приложений, имеющих разрешение на рисование наложения, и в настоящее время на экране отображает активное наложение.
Время убивать
Убейте каждое из приложений из третьего списка одно за другим и обратите внимание на состояние наложения. Вы можете использовать
am force-stop PACKAGE_NAME --user 0
или любой другой способ, который вам подходит.PACKAGE_NAME
это имя пакета приложения.РЕДАКТИРОВАТЬ : нет необходимости убивать приложение. Вы можете отказать приложению в разрешении рисовать поверх других приложений. Используйте эту команду:
Чтобы отменить изменения, замените команду deny на allow в указанной команде и выполните ее.
Если вы используете Android Marshmallow, этот ответ Эндрю Т. может быть использован.
Примечание . Вышеуказанная команда успешно протестирована на Android 5.1.1 и 6.0.1 (сборки CM). Также возможно, что команда работает на Android 5.0.x, но я не могу гарантировать . Выполнение этой команды в версии Android, выпущенной до Lollipop, может привести к сбою.
Поскольку наложение часто воспринимается, оно мгновенно исчезает в тот момент, когда приложение, вызывающее его уничтожение, следовательно, вы будете знать, какое приложение вызывало это наложение.
Приложения для приложений
Первоначально предложенный Izzy, вы можете использовать приложение, которое имеет функции перечисления разрешений, предоставленных установленным приложениям, чтобы выделить приложения, имеющие разрешение «рисовать поверх других приложений». Вы можете либо выполнить поиск такого приложения самостоятельно, либо воспользоваться списком проверки прав доступа, который ведет Иззи на своем веб-сайте.
Вам также понадобится менеджер процессов / приложений, чтобы принудительно остановить / убить некоторые процессы. Я рекомендую OS Monitor, но вы можете использовать любое компетентное приложение. См. Связанные приложения в разделе Информация о системе .
Только для демонстрационных целей
Я попробовал Advanced Permission Manager, чтобы вывести список приложений с разрешением «рисовать поверх других приложений». После этого я переключился на OS Monitor, чтобы увидеть приложения, работающие на переднем и заднем плане. Я сопоставил выходные данные обоих приложений и по отдельности принудительно остановил приложения, общие для обоих приложений. Вы можете убить процесс изнутри монитора ОС, поэтому не нужно переключаться в настройки приложения.
(Нажмите на изображение, чтобы увеличить)
источник
Если вы используете Android 6.0 Marshmallow, вы можете использовать его собственный менеджер разрешений.
Из статьи о BGR ,
Чтобы просмотреть список приложений, которые могут рисовать поверх других приложений, перейдите в « Настройки» - «Приложения» - «Дополнительно» (меню со значком шестеренки) - «Рисовать поверх других приложений» .
Вы также можете временно включить / отключить эту функцию, коснувшись приложения и переключив «Разрешить рисование поверх других приложений».
Изображение предоставлено Себастьяно Готтардо на Medium
источник
Спасибо большое @Firelord! Я наконец нашел приложение, которое мешало мне устанавливать apk и выполнять резервное копирование adb.
Для меня я обнаружил, что это приложение под названием
Battery Mix
Читать дальше, чтобы увидеть, что я сделал и как я это сделал.https://play.google.com/store/apps/details?id=jp.smapho.battery_mix
У многих людей были проблемы с установкой apk и невозможностью нажать «Install». Все ответы, которые я мог найти, в основном сводились к отображению диммирующих, тонирующих и энергосберегающих приложений. Поскольку я не использовал ни одного или удалил все подобные приложения, я изо всех сил пытался выяснить, что происходит, и какое приложение было виновником. И наконец! После одной простой команды и быстрого поиска она была решена: D
Неприятное приложение
Battery Mix
- это простое приложение для мониторинга заряда батареи, в котором была функция, которую я использовал для отображения тонкой линии в верхней части экрана, чтобы показать состояние уровня заряда батареи (отличное небольшое приложение).Поэтому для диагностики я использовал команду из
Firelord
(выше), чтобы создать дамп текстового файла, а затем найти приложение, которое заставляло систему Android препятствовать тому, чтобы я нажимал эту кнопку Установить.Выполнить команду с ПК
adb shell dumpsys window windows > dumpsys-windows.txt
Искать
SYSTEM_ALERT_WINDOW
Чтобы найти какие-либо оскорбительные приложения, я искал вышеуказанную строку
Который дал мне строку:
mOwnerUid=10129 mShowToOwnerOnly=true package=jp.smapho.battery_mix appop=SYSTEM_ALERT_WINDOW
(Смотрите загрузку изображений для раздела текстового файла)
я сразу же узнал, к какому приложению оно относится: jp.smapho. battery_mix
Так что теперь я знаю, чтобы убить это приложение всякий раз, когда я планирую загружать или создавать резервные копии adb.
источник
Для Android Marshmallow и Oxygen 3.0.2: отключение всплывающего окна
Перейдите в Приложения и настройте Приложения и выберите Рисовать поверх других приложений.
Перейдите и выберите приложение, чтобы отключить его, чтобы оно разблокировалось с разрешения макета экрана. и приложение может напрямую получать разрешения
Перейдите в соответствующее приложение и Разрешения и включите необходимые разрешения.
наслаждаться
Радж
источник