0

オーバーレイウィンドウを作成しようとしていますが、ビューをWindowManagerに追加しようとすると例外が発生します。 「SYSTEM_ALERT_WINDOW」権限を追加しました。アプリ情報に「Draw over other apps」を有効にしました。私はこれをサービスのonCreate関数の中から呼び出しています。WindowManager.addView()によってBadTokenExceptionが発生する

  • デバイス:26
  • APPCOMPATバージョン:26.0.0

コード:

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); 

例外スタックトレース8.0.0

  • ターゲットSDKとコンパイル済みSDKバージョンを実行しているエミュレータ:

    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) 
    

    LayoutParamsにどのようなTYPEを使用しても、いつもこのクラッシュが発生します。

  • 答えて

    0

    TYPE_APPLICATION_OVERLAYを使用してください。これは、Android Oが他のアプリに表示できる唯一のウィンドウタイプです。

    説明を確認してください:https://developer.android.com/preview/behavior-changes.html#cwt

    +0

    ありがとうございます。それだった!私は実際にアクセシビリティサービスでこれをやっているのですが、なぜTYPE_ACCESSIBILITY_OVERLAYが機能しないのだろうと思います。 (設定されたアクセシビリティサービスとしてサービスが有効になっている) – ravindu1024

    関連する問題