android.view.WindowManager $ BadTokenException:无法添加窗口android.view.ViewRootImpl$W@3decac7 - 此窗口类型的权限被拒绝

时间:2017-07-18 06:04:47

标签: android overlay android-windowmanager

我在广播接收器中有一个Windows管理器,我正在使用API​​> 23所以我在主要活动中提供了覆盖权限,如下所示。

 if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        Intent myIntent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
        startActivity(myIntent);
    }

提供权限后,我也会收到以下错误。

 android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@3decac7 -- permission denied for this window type.

广播接收器中使用的窗口管理器

 WindowManager.LayoutParams params = new 
 WindowManager.LayoutParams(WindowManager.LayoutParams.MATCH_PARENT,
                            WindowManager.LayoutParams.MATCH_PARENT,
                            WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG,
                            WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
                                    WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON,
                            PixelFormat.TRANSLUCENT);
                    params.gravity= Gravity.CENTER;
                    params.x=0;
                    params.y=0;
                    windowManager.addView(look, params);

也提供了Manifest的许可。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

请帮助您继续操作。

1 个答案:

答案 0 :(得分:0)

您的布局类型不正确(WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG)。 您可以将TYPE_APPLICATION_OVERLAY用于api&gt; = 26,将TYPE_TOAST用于较低的api。 您还可以阅读WindowManager.LayoutParams api doc以了解您可以使用的类型