Remarque:
- adb doit déjà être configuré sur PC.
- Pour Android antérieur à la version 4.4.x, un accès root peut être requis.
- Certaines commandes ne fonctionneraient pas sur Android avant la version 5.1.
- Passez à la rubrique " Applications pour les applications " si vous n'êtes pas familier ou mal à l'aise avec la ligne de commande et / ou la ligne de commande ne parvient pas à résoudre votre problème.
Modifier: coupez la chasse dans la solution précédente et suivez uniquement cette section modifiée.
Configurez adb et exécutez cette commande:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Vous obtiendrez la sortie de toutes les superpositions actives à l'écran. Exemple de sortie avec DU Screen Recorder, Tasker et AZ Screen Recorder montrant les superpositions actives à l'écran:
bash-4.3 # adb shell "fenêtres de fenêtre dumpsys | toybox grep -i system_alert_window"
mOwnerUid = 10087 mShowToOwnerOnly = true package = net.dinglisch.android.tasker appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10649 mShowToOwnerOnly = true package = com.duapps.recorder appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10604 mShowToOwnerOnly = true package = com.hecorat.screenrecorder.free appop = SYSTEM_ALERT_WINDOW
mOwnerUid = 10638 mShowToOwnerOnly = true package = ninja.sesame.app.edge appop = SYSTEM_ALERT_WINDOW
Le texte en surbrillance à côté de package = et avant appop est le (s) nom (s) de package des applications qui dessinent actuellement la superposition à l'écran. Dans votre cas, la sortie incluant le (s) nom (s) de package serait différente.
Notez le (s) nom (s) du package (désormais PKG) et exécutez cette commande:
adb shell am force-stop PKG
Remplacez PKG par le nom du package que vous avez noté. Si vous aviez plusieurs noms de package, répétez la commande avec un seul nom de package à la fois.
La commande arrêterait de force l'application et éliminerait ainsi la superposition. Cela devrait fonctionner. Vous pouvez également retirer l'autorisation de "Dessiner sur d'autres applications" (superposition d'écran en bref) des applications en utilisant cette commande:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Encore une fois, remplacez PKG par le nom du package si nécessaire. En outre, vous devrez peut-être répéter la commande d'arrêt forcé pour le PKG. Si vous décidez d'annuler les modifications, remplacez ignore par allow dans la commande susmentionnée.
Vous pouvez également utiliser App Ops pour gérer les autorisations de l'interface graphique.
Pour savoir quel nom de package correspond à quelle application, vous pouvez essayer une application open source comme Applications Info . Recherchez par nom de package et vous obtiendrez le nom de l'application.
Edition terminée
Vous n'avez vraiment plus besoin de lire maintenant . Je laisse intacte la solution précédente (c'est-à-dire la section suivante) parce que 21 personnes qui l'ont votée l'ont trouvée utile et je ne veux plus me tromper.
Un moyen simple serait de trouver toutes les applications autorisées à "dessiner sur d'autres applications", puis de les distinguer de celles actuellement actives à l'écran. Ensuite, arrêtez de force ces applications courantes jusqu'à ce que vous identifiiez l'application responsable de la superposition active.
Énumérer les applications autorisées à superposer
L'autorisation requise par une application pour créer une superposition est android.permission.SYSTEM_ALERT_WINDOW
(dessiner sur d'autres applications).
Nous devons trouver toutes les applications installées ayant ladite autorisation. C'est à vous de trouver une méthode pour cela. Ma réponse ici peut vous aider.
Notez que nous avons besoin des noms de packages des applications et non de leurs étiquettes.
Sélection de cerises depuis les fenêtres actives
Exécutez la commande
adb shell dumpsys window windows
Cela vous donnerait des détails sur la cause de l'affichage de quelque chose à l'écran, y compris le nom du composant d'une application à l'origine de cela.
La façon dont vous extrairez le nom dépend de vous. Vous pouvez cependant essayer cette commande
adb shell 'dumpsys window windows | grep "Window #"'
Si vous recevez l'erreur: 'grep' n'est pas reconnu comme une commande interne ou externe , sous Windows essayez cette commande alternative:
adb shell "dumpsys window windows | grep 'Window #'"
Sortie démo
Fenêtre # 4 Fenêtre {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Fenêtre # 5 Fenêtre {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Fenêtre # 6 Fenêtre {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Fenêtre no 7 Fenêtre {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
Dans la sortie ci-dessus, tout ce qui réussit u0
et précède /
est le nom du package d'une application. Une application peut avoir plusieurs composants affichant quelque chose à l'écran.
Vous devez créer une liste de ces noms de packages. Si vous avez BusyBox installé , vous pouvez le faire
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
Quoi qu'il en soit, vous auriez maintenant deux listes:
- La première liste contient toutes les applications ayant l'autorisation
android.permission.SYSTEM_ALERT_WINDOW
.
- La deuxième liste contient toutes les applications affichant activement quelque chose à l'écran.
Comparez ces deux listes et identifiez les applications qui sont courantes dans les deux listes. Cette troisième liste constituerait des applications autorisées à dessiner une superposition et dessinent actuellement une superposition active à l'écran.
Temps de tuer
Tuez chacune des applications de la troisième liste une par une et notez l'état de la superposition. Vous pouvez utiliser am force-stop PACKAGE_NAME --user 0
ou toute autre méthode qui vous convient. PACKAGE_NAME
est le nom du package de l'application.
EDIT : il n'est pas nécessaire de tuer une application. Vous pouvez envisager de refuser à l'application la permission de dessiner sur d'autres applications. Utilisez cette commande:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Pour annuler les modifications, remplacez deny par allow dans ladite commande et exécutez-la.
Si vous utilisez Android Marshmallow, cette réponse d'Andrew T. peut être utilisée.
Remarque: La commande susmentionnée a été testée avec succès sur Android 5.1.1 et 6.0.1 (versions CM). Il est également possible que la commande fonctionne sur Android 5.0.x mais je ne peux pas garantir . L'exécution de cette commande sur la version Android publiée avant Lollipop entraînerait un échec.
Étant donné que souvent la superposition est perceptible, elle disparaîtrait instantanément au moment où l'application à l'origine de sa suppression, par conséquent, vous sauriez quelle application était à l'origine de cette superposition.
Applications pour applications
Initialement suggéré par Izzy, vous pouvez utiliser une application qui a la fonctionnalité de répertorier les autorisations accordées aux applications installées, pour distinguer les applications qui ont l'autorisation de "dessiner sur d'autres applications". Vous pouvez soit rechercher une telle application par vous-même, soit utiliser la liste Permission checker maintenue par Izzy sur son site Web.
Vous auriez également besoin d'un gestionnaire de processus / application pour forcer / arrêter certains processus. Je recommande OS Monitor mais vous êtes libre d'utiliser n'importe quelle application compétente. Voir les applications associées sous Infos système .
Pour démonstration seulement
J'ai essayé Advanced Permission Manager pour répertorier les applications avec l'autorisation de "dessiner sur d'autres applications". Ensuite, je suis passé à OS Monitor pour voir les applications s'exécuter en premier plan et en arrière-plan. J'ai fait correspondre la sortie des deux applications et arrêté individuellement les applications communes aux deux. Vous pouvez tuer un processus depuis l'intérieur du moniteur du système d'exploitation, donc pas besoin de passer aux paramètres de l'application.
(Cliquez sur l'image pour agrandir)