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
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を使用しても、いつもこのクラッシュが発生します。
ありがとうございます。それだった!私は実際にアクセシビリティサービスでこれをやっているのですが、なぜTYPE_ACCESSIBILITY_OVERLAYが機能しないのだろうと思います。 (設定されたアクセシビリティサービスとしてサービスが有効になっている) – ravindu1024