Android N上的TYPE_APPLICATION_OVERLAY权限被拒绝2038?

时间:2018-03-01 21:53:53

标签: android android-permissions android-windowmanager

我需要从服务中绘制系统覆盖视图。这是将此视图添加到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

我已尝试过我在网上找到的所有内容,但仍然无法通过此权限。

  • 我在清单中有SYSTEM_ALERT_WINDOW。
  • 我必须使用TYPE_APPLICATION_OVERLAY而不是任何其他TYPE。
  • 我查了Settings.canDrawOverlays,这是真的。
  • 我检查了我的应用在App Settings中启用了Draw over other apps权限。

我查看了Android: permission denied for window type 2038 using TYPE_APPLICATION_OVERLAY中的所有答案,但没有一个能解决我的问题。

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

您应为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);