WindowManager弹窗提示时需要注意下,比如系统应用和非系统应用权限的不同、Android不同版本的权限申请不同等,下面是我在应用中出现的问题,因此整理一下。

问题一:没有设置android.permission.SYSTEM_ALERT_WINDOW

出现异常提示

Unable to add window android.view.ViewRootImpl$W@41da4958 -- permission denied for this window type

解决方法

  1. 可能是在AndroidManifest.xml中添加如下代码
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
  1. 可能是设置的TYPE错误

比如我设置了WindowManager.LayoutParams.TYPE_SEARCH_BAR,这个type非系统应用是不可以设置的。

mLayoutParams.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

或者其他的

mLayoutParams.type = WindowManager.LayoutParams.TYPE_PHONE;
问题二:permission denied for window type 2038 或者 permission denied for window type 2003

我的应用没有设置为系统应用且运行在Android 9.0上运行,出现异常的提示有如下

android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@72fb5d4 -- permission denied for window type 2038

解决方法

非系统应用,需要在[系统设置]找到[应用和通知]已经的[我们的应用],然后点击进入[高级],打开[在应用上方显示]开关

参考文章

  1. Android: permission denied for window type 2038 using TYPE_APPLICATION_OVERLAY
  2. Android: permission denied for window type 2038

相关文章

暂无评论

none
暂无评论...