Ich versuche, ein Overlay-Fenster zu erstellen, aber wenn ich versuche, die Ansicht zum WindowManager hinzuzufügen, gibt es mir eine Ausnahme. Ich habe die Berechtigung "SYSTEM_ALERT_WINDOW" hinzugefügt und in den App-Informationen "Über andere Apps überlappen" aktiviert. Ich rufe dies aus der onCreate-Funktion eines Dienstes heraus an.WindowManager.addView() verursacht BadTokenException
- Device: Emulator läuft 8.0.0
- Ziel SDK und kompilierten SDK-Versionen: 26
- AppCompat Version: 26.0.0
Code:
WindowManager manager = (WindowManager)getSystemService(WINDOW_SERVICE);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
RelativeLayout overlay = (RelativeLayout) inflater.inflate(R.layout.button_main, null);
final WindowManager.LayoutParams params =
new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_PANEL,
0,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.TOP | Gravity.START;
params.x = 0;
params.y = 0;
manager.addView(overlay, params);
Exception Stacktrace :
Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:764
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:92)
Egal welchen TYPE ich für die LayoutParams verwende, bekomme ich immer diesen Absturz.
Danke. Das war's! Ich mache das tatsächlich in einem Accessibility-Service und frage mich, warum TYPE_ACCESSIBILITY_OVERLAY nicht funktioniert. (mit dem Dienst, der in den Einstellungen als verbundener Zugänglichkeitsdienst aktiviert ist) – ravindu1024