我目前正在寻求开发一个 Android 界面调试工具,它将显示一些系统信息,覆盖在下面运行的任何应用程序之上。我在线查看了许多不同的资源,并遵循将应用程序设置为 TYPE_APPLICATION_OVERLAY
的基本过程,使用 android.permission.SYSTEM_ALERT_WINDOW
定义 list 中所需的权限,但是,当尝试运行应用程序进程时,它崩溃并出现错误 FATAL EXCEPTION
... 无法添加窗口 android.view.ViewRootImpl$W...
-- 权限窗口类型 2038 被拒绝
。
我尝试进一步调查可能导致问题的原因,并发现从某个版本开始,Android 将要求用户通过 Settings.ACTION_MANAGE_OVERLAY_PERMISSION
显式设置应用的权限以覆盖其他应用,但是,即使在启用了对其他应用的绘制权限后,该过程仍然会导致相同的错误。
我目前的应用程序设置是检查是否已授予提款权限,如果没有,则要求用户进行设置。一旦它确认用户启用了权限,它就会调用我尝试创建覆盖 View 的服务。
我对 Android 开发还比较陌生,因此我希望得到任何想法或指导!
更新:通过将窗口的 LayoutParam 设置为使用 TYPE_PHONE
而不是 TYPE_APPLICATION_OVERLAY
来设法使其正常工作。这适用于 Android N,但值得注意的是,此方法在 Android O+ 中已被弃用
最佳答案
在您的 list 中添加此权限。
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
关于java - 无法添加窗口 - 尝试创建 float View 时权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45142745/