0

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.

Antwort

0

Verwenden Sie TYPE_APPLICATION_OVERLAY. Es ist der einzige Fenstertyp, den Android O für die Anzeige über andere Apps zulässt.

dieses Datum für eine Erklärung heraus: https://developer.android.com/preview/behavior-changes.html#cwt

+0

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

Verwandte Themen