在Android N上键入\u应用程序\u覆盖权限被拒绝2038?

在Android N上键入\u应用程序\u覆盖权限被拒绝2038?,android,android-permissions,android-windowmanager,Android,Android Permissions,Android Windowmanager,我需要从服务中绘制一个系统覆盖视图。这是将此视图添加到WindowManager的部分: WindowManager.LayoutParams( WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,

我需要从服务中绘制一个系统覆盖视图。这是将此视图添加到WindowManager的部分:

WindowManager.LayoutParams(
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.MATCH_PARENT,
            WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);
它失败,权限被拒绝异常:

Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@f15e8de -- permission denied for window type 2038
我已经尝试了在网上找到的所有东西,但仍然无法获得通过许可

  • 我在舱单中有系统警报窗口
  • 我必须使用类型\应用程序\覆盖,而不是任何其他类型
  • 我检查了
    Settings.canDrawOverlays
    ,结果是真的
  • 我检查了我的应用程序是否在应用程序设置中启用了
    绘制其他应用程序的权限
我看了所有的答案,但没有一个能解决我的问题


感谢您的帮助!谢谢

您应该为Android N选择另一种类型:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    flags = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
} else {
    flags = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;
}

WindowManager.LayoutParams(
        WindowManager.LayoutParams.MATCH_PARENT,
        WindowManager.LayoutParams.MATCH_PARENT,
        flags,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
        PixelFormat.TRANSLUCENT);

我在一些设备上遇到了这个错误,大多数设备都是Vivo android 8.0。你已经有解决这个问题的办法了吗?请让我知道。谢谢