Note :
-
adb devrait déjà être configuré dans le PC.
- Pour les systèmes Android antérieurs à la version 4.4.x, un accès Root peut être nécessaire.
- Certaines commandes ne fonctionnent pas sur Android avant la version 5.1.
- Sauter à la rubrique " Des applications pour des applications "si vous n'êtes pas familier ou mal à l'aise avec la ligne de commande et/ou si la ligne de commande ne résout pas votre problème.
Edit : couper court à la solution précédente et suivre uniquement cette section éditée.
Configuration adb et lancez cette commande :
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Vous obtiendrez la sortie de tous les superpositions actives sur l'écran. Exemple d'une sortie avec DU Screen Recorder, Tasker et AZ Screen Recorder montrant les superpositions actives à l'écran :
bash-4.3# adb shell "dumpsys window windows| 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 paquet= et avant appop est le(s) nom(s) de paquet(s) de la (des) application(s) la superposition du dessin actuel sur l'écran. Dans votre cas, la sortie incluant le(s) nom(s) de paquet(s) serait différente.
Notez le(s) nom(s) de paquet (désormais PKG) et exécutez cette commande :
adb shell am force-stop PKG
Remplacer PKG avec le nom du paquet que vous avez noté. Si vous aviez plusieurs noms de paquets, répétez la commande avec un seul nom de paquet à la fois.
La commande arrêterait de force l'application et supprimerait ainsi la superposition. Cela devrait fonctionner. Vous pouvez également supprimer 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
Là encore, remplacez PKG par le nom du paquet si nécessaire. De plus, vous devrez peut-être répéter la commande force-stop pour le PKG. Si vous décidez de revenir sur les modifications, remplacez ignorer avec permettre dans le commandement susmentionné.
Vous pouvez également utiliser App Ops pour gérer les permissions à partir de l'interface graphique.
Pour savoir quel nom de paquet correspond à quelle application, vous pouvez essayer une application open source comme Informations sur les applications . Recherchez par nom de paquet et vous obtiendrez le nom de l'application.
Édition terminée
Vous avez vraiment besoin de ne plus lire maintenant . Je laisse la solution précédente (c'est-à-dire la section suivante) intacte parce que 21 personnes qui l'ont votée l'ont trouvée utile et je ne veux pas faire d'autres erreurs.
Un moyen simple serait de trouver toutes les applications ayant la permission de "dessiner sur d'autres applications", puis de les distinguer parmi celles qui sont actuellement actives sur l'écran. Ensuite, arrêtez de force ces applications communes jusqu'à ce que vous trouviez l'application responsable de la superposition active.
Enumérer les applications ayant l'autorisation de superposition
L'autorisation requise par une application pour créer une superposition est la suivante android.permission.SYSTEM_ALERT_WINDOW
(dessiner sur d'autres applications).
Nous devons trouver toutes les applications installées qui ont cette permission. C'est à vous de trouver une méthode pour cela. Ma réponse aquí peut vous aider.
Nota que nous avons besoin des applications noms des paquets et non leurs étiquettes.
Choisir parmi les fenêtres actives
Exécuter la commande
adb shell dumpsys window windows
Vous obtiendrez ainsi des détails sur ce qui a provoqué l'affichage de quelque chose à l'écran, y compris le nom du composant d'une application qui en est à l'origine.
La façon dont vous extrairez le nom vous appartient. 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
Window #4 Window{42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Window #5 Window{42197468 u0 ginlemon.flowerpro/ginlemon.flower.HomeScreen}:
Window #6 Window{420fdb58 u0 com.android.systemui.ImageWallpaper}:
Window #7 Window{421e3b88 u0 com.android.contacts/com.android.contacts.activities.DialtactsActivity}:
Dans la sortie ci-dessus, tout ce qui succède à u0
et précédant /
est le nom du paquet d'une application. Une application peut avoir plusieurs composants qui affichent quelque chose à l'écran.
Vous devez créer une liste de ces noms de paquets. Si vous avoir BusyBox installé vous pouvez faire
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
De toute façon, vous auriez maintenant deux listes :
- La première liste contient toutes les applications ayant la permission
android.permission.SYSTEM_ALERT_WINDOW
.
- La deuxième liste contient toutes les applications qui affichent activement quelque chose à l'écran.
Comparez ces deux listes et identifiez les applications qui sont communes aux deux listes. Cette troisième liste serait constituée d'applications ayant la permission de dessiner une superposition et qui dessinent actuellement une superposition active à l'écran.
Le temps de tuer
Supprimez chacune des applications de la troisième liste une par une et remarquez 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 paquet de l'application.
EDITAR : Il n'est pas nécessaire de tuer une application. Vous pouvez envisager de refuser à l'application la permission de tirer 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 changements, remplacez refuser avec permettre dans ladite commande et l'exécuter.
Si vous utilisez Android Marshmallow, cette réponse par Andrew T. peut être utilisé.
Note : La commande susmentionnée a été testée avec succès sur Android 5.1.1 et 6.0.1 (CM builds). Il est aussi possible que la commande fonctionne sur Android 5.0.x mais Je ne peux pas garantir . Exécution de cette commande sur la version Android publié avant Lollipop provoquerait un échec.
Comme la surimpression est souvent perceptible, elle disparaîtrait instantanément dès que l'application qui la provoque serait tuée, ce qui vous permettrait de savoir quelle application est à l'origine de cette surimpression.
Des applications pour des applications
Comme suggéré à l'origine par Izzy, vous pouvez utiliser une application qui a la fonctionnalité de lister les permissions accordées aux applications installées, afin d'isoler les applications ayant la permission "dessiner sur les autres applications". Vous pouvez rechercher une telle application par vous-même ou utiliser la liste suivante Contrôleur de permission maintenu par Izzy sur son site web.
Vous aurez également besoin d'un gestionnaire de processus/applications pour forcer l'arrêt/la fermeture de certains processus. Je recommande Moniteur OS mais vous êtes libre d'utiliser n'importe quelle application compétente. Voir les applications connexes sous Informations sur le système .
À des fins de démonstration uniquement
J'ai essayé Gestionnaire de permissions avancé pour lister les applications ayant la permission de "dessiner sur d'autres applications". Ensuite, j'ai basculé vers OS Monitor pour voir les applications en cours d'exécution au premier plan et en arrière-plan. J'ai fait correspondre les résultats des deux applications et j'ai forcé l'arrêt des applications communes aux deux. Vous pouvez tuer un processus depuis l'OS Monitor, il n'est donc pas nécessaire de passer par les paramètres de l'application.
(Cliquez sur l'image pour l'agrandir)
0 votes
Juste pour ajouter aux problèmes notés dans les réponses ci-dessous (pour essayer de rester complet). Dans TouchWiz (Samsung Galaxy, le mien est le Note 4), désactiver le panneau de touches latérales a résolu ce problème pour moi.
0 votes
Pour les non-développeurs, il suffit de consulter ici la liste des applications : Android.stackexchange.com/questions/154274/