Hinweis:
- adb sollte bereits im PC eingerichtet sein.
- Für Android vor Version 4.4.x ist möglicherweise Root-Zugriff erforderlich.
- Einige Befehle funktionieren unter Android nicht vor Version 5.1.
- Wechseln Sie zur Überschrift " Apps für Apps ", wenn Sie mit der Befehlszeile nicht vertraut oder nicht vertraut sind und / oder die Befehlszeile Ihr Problem nicht lösen kann.
Bearbeiten: Schneiden Sie die Verfolgung in der früheren Lösung ab und folgen Sie nur diesem bearbeiteten Abschnitt.
Richten Sie adb ein und führen Sie den folgenden Befehl aus:
adb shell "dumpsys window windows | toybox grep -i system_alert_window"
Sie erhalten die Ausgabe aller aktiven Overlays auf dem Bildschirm. Beispiel einer Ausgabe mit DU Screen Recorder, Tasker und AZ Screen Recorder, die aktive Overlays auf dem Bildschirm anzeigt:
bash-4.3 # adb shell "dumpsys fenster 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
Der hervorgehobene Text neben package = und vor appop ist der / die Paketname (n) der App (s), die gerade eine Überlagerung auf dem Bildschirm zeichnen . In Ihrem Fall würde sich die Ausgabe einschließlich der Paketnamen unterscheiden.
Notieren Sie sich die Paketnamen (nachfolgend als PKG bezeichnet) und führen Sie den folgenden Befehl aus:
adb shell am force-stop PKG
Ersetzen Sie PKG durch den Paketnamen, den Sie notiert haben. Wenn Sie mehrere Paketnamen hatten, wiederholen Sie den Befehl mit jeweils einem Paketnamen.
Der Befehl würde die App gewaltsam stoppen und dadurch die Überlagerung verwerfen. Das sollte funktionieren. Alternativ können Sie den Apps die Berechtigung "Über andere Apps zeichnen" (kurz "Bildschirmüberlagerung") mit folgendem Befehl entziehen:
adb shell appops set PKG SYSTEM_ALERT_WINDOW ignore
Ersetzen Sie PKG bei Bedarf durch den Paketnamen. Darüber hinaus müssen Sie möglicherweise den Force-Stop-Befehl für die PKG wiederholen. Wenn Sie die Änderungen rückgängig machen möchten, ersetzen Sie Ignorieren durch Zulassen im oben genannten Befehl.
Sie können alternativ App Ops verwenden , um die Berechtigungen über die GUI zu verwalten.
Um zu wissen, welcher Paketname zu welcher App gehört, können Sie eine Open-Source-App wie Applications Info ausprobieren . Suchen Sie nach dem Paketnamen und Sie erhalten den Namen der App.
Bearbeiten beendet
Sie brauchen jetzt wirklich nicht mehr zu lesen . Ich lasse die frühere Lösung (dh folgenden Abschnitt) intakt, da 21 Personen, die abgestimmt haben, dies als hilfreich empfanden und ich nicht mehr durcheinander bringen möchte.
Eine einfache Möglichkeit wäre, alle Apps mit der Berechtigung "Über andere Apps ziehen" herauszufinden und sie dann aus den derzeit auf dem Bildschirm aktiven herauszusuchen. Erzwingen Sie anschließend das Stoppen dieser gängigen Apps, bis Sie die für die aktive Überlagerung verantwortliche App ausgewählt haben.
Zählen Sie Apps auf, die die Berechtigung zum Overlay haben
Die Berechtigung, die eine App zum Erstellen eines Overlays benötigt, ist android.permission.SYSTEM_ALERT_WINDOW
(über andere Apps ziehen).
Wir müssen alle installierten Apps mit dieser Berechtigung herausfinden. Es liegt an Ihnen, eine Methode dafür zu finden. Meine Antwort hier kann Ihnen helfen.
Beachten Sie, dass wir die Paketnamen der Apps und nicht deren Bezeichnungen benötigen .
Kirschpickel aus aktiven Fenstern
Führen Sie den Befehl aus
adb shell dumpsys window windows
Auf diese Weise erhalten Sie Informationen darüber, was zur Anzeige auf dem Bildschirm geführt hat, einschließlich des Komponentennamens einer App, die dies verursacht.
Wie Sie den Namen extrahieren, liegt bei Ihnen. Sie können diesen Befehl jedoch versuchen
adb shell 'dumpsys window windows | grep "Window #"'
Wenn Sie den Fehler erhalten: 'grep' wird nicht als interner oder externer Befehl erkannt , versuchen Sie unter Windows diesen alternativen Befehl:
adb shell "dumpsys window windows | grep 'Window #'"
Demo-Ausgabe
Fenster # 4 Fenster {42065d50 u0 com.android.phone/com.mediatek.phone.UssdAlertActivity}:
Fenster # 5 Fenster {42197468 u0 ginlemon.flowerpro / ginlemon.flower.HomeScreen}:
Fenster # 6 Fenster {420fdb58 u0 com.android.systemui.ImageWallpaper}:
Fenster # 7 Fenster {421e3b88 u0 com.android.contacts / com.android.contacts.activities.DialtactsActivity}:
In der obigen Ausgabe ist alles, was folgt u0
und vorangeht, /
der Paketname einer App. Eine App kann mehrere Komponenten haben, die etwas auf dem Bildschirm anzeigen.
Sie müssen eine Liste dieser Paketnamen erstellen. Wenn Sie BusyBox installiert haben , können Sie dies tun
adb shell 'dumpsys window windows | grep "Window #" | sed -e "s/.*u0 //g" -e "s/\/.*//g" -e "s/}://g"'
Jedenfalls hätten Sie jetzt zwei Listen:
- Die erste Liste enthält alle Apps, die über die Berechtigung verfügen
android.permission.SYSTEM_ALERT_WINDOW
.
- Die zweite Liste enthält alle Apps, die aktiv etwas auf dem Bildschirm anzeigen.
Vergleichen Sie diese beiden Listen und wählen Sie die Apps aus, die in beiden Listen enthalten sind. Diese dritte Liste enthält Apps, die zum Zeichnen von Overlays berechtigt sind und derzeit ein aktives Overlay auf dem Bildschirm zeichnen.
Zeit zu töten
Beenden Sie jede der Apps aus der dritten Liste nacheinander und stellen Sie den Status der Überlagerung fest. Sie können am force-stop PACKAGE_NAME --user 0
jede andere Methode verwenden, die zu Ihnen passt. PACKAGE_NAME
ist der Paketname der App.
EDIT : Es ist nicht notwendig, eine App zu töten. Sie können erwägen, der App die Berechtigung zum Ziehen über andere Apps zu verweigern. Verwenden Sie diesen Befehl:
adb shell 'appops set PACKAGE SYSTEM_ALERT_WINDOW deny' # replace PACKAGE with package name of the app
Um die Änderungen rückgängig zu machen, ersetzen Sie den Befehl deny durch allow und führen Sie ihn aus.
Wenn Sie Android Marshmallow verwenden, kann diese Antwort von Andrew T. verwendet werden.
Hinweis: Der oben genannte Befehl wurde erfolgreich auf Android 5.1.1 und 6.0.1 (CM-Builds) getestet. Es ist auch möglich, dass der Befehl auf Android 5.0.x funktioniert, aber ich kann nicht garantieren . Die Ausführung dieses Befehls in einer Android-Version, die vor Lollipop veröffentlicht wurde, würde einen Fehler verursachen.
Da die Überlagerung häufig wahrnehmbar ist, verschwindet sie sofort, sobald die App, die sie verursacht hat, beendet wird. Daher wissen Sie, welche App diese Überlagerung verursacht hat.
Apps für Apps
Ursprünglich von Izzy vorgeschlagen, können Sie eine App verwenden, die über die Funktionalität verfügt, Berechtigungen für installierte Apps aufzulisten, um die Apps mit der Berechtigung "Über andere Apps ziehen" herauszugreifen. Sie können eine solche App entweder selbst suchen oder die von Izzy auf seiner Website gepflegte Liste Permission checker verwenden .
Sie benötigen außerdem einen Prozess- / App-Manager, um bestimmte Prozesse anzuhalten / abzubrechen. Ich empfehle OS Monitor, aber es steht Ihnen frei, eine kompetente App zu verwenden. Siehe verwandte Apps unter System Info .
Nur zu Demonstrationszwecken
Ich habe Advanced Permission Manager versucht , Apps mit der Berechtigung zum "Ziehen über andere Apps" aufzulisten. Danach wechselte ich zu OS Monitor, um die Apps im Vordergrund und im Hintergrund zu sehen. Ich habe die Ausgabe von beiden Apps abgeglichen und die Apps, die in beiden Apps gemeinsam sind, einzeln gestoppt. Sie können einen Prozess über den OS-Monitor beenden, sodass Sie nicht zu den App-Einstellungen wechseln müssen.
(Zum Vergrößern auf das Bild klicken)