标签:ViewRootImpl permission OVERLAY SYSTEM system window 报错 TYPE 弹窗
Android 11上点击事件触发AlertDialog弹窗时,弹窗无法显示;后台打印提示Unable to add window android.view.ViewRootImpl$W. permission denied
代码中设置窗口类型时使用的TYPE_SYSTEM_ALERT,
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
关于TYPE_SYSTEM_ALERT在源码中的解释
/** * Window type: system window, such as low power alert. These windows * are always on top of application windows. * In multiuser systems shows only on the owning user's window. * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ @Deprecated public static final int TYPE_SYSTEM_ALERT = FIRST_SYSTEM_WINDOW+3;
该类型为系统级别窗口,用于低电量提示等信息显示,窗口显示在最顶部。对于非系统的app,应该使用TYPE_APPLICATION_OVERLAY替代。但是设置这个类型的情况下,可能会被系统弹窗覆盖掉,因此我们需要将它设置为既能显示在最顶部,也不会被其他系统弹窗覆盖的类型。
我们可以使用TYPE_SYSTEM_OVERYLAY类型,同时也不会报错,可以在系统上正常显示弹窗。
/** * Window type: system overlay windows, which need to be displayed * on top of everything else. These windows must not take input * focus, or they will interfere with the keyguard. * In multiuser systems shows only on the owning user's window. * @deprecated for non-system apps. Use {@link #TYPE_APPLICATION_OVERLAY} instead. */ @Deprecated public static final int TYPE_SYSTEM_OVERLAY = FIRST_SYSTEM_WINDOW+6;
标签:ViewRootImpl,permission,OVERLAY,SYSTEM,system,window,报错,TYPE,弹窗 来源: https://www.cnblogs.com/zoowei/p/16306335.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。