【发布时间】:2019-11-10 17:41:47
【问题描述】:
给定View,我如何确定View 是否显示在具有FLAG_SECURE 的Window 中?
在简单的情况下,View 直接显示在Activity 的窗口中,我们可以get that Window,然后调用getAttributes().flags 并查看这些标志是否包含FLAG_SECURE。
但是:
如果
View显示在 Activity 的某个子窗口中,这可能不准确(该 Activity 可能有一个安全窗口,但子窗口可能不安全)它不适用于非活动窗口(例如,
Service和SYSTEM_ALERT_WINDOW)
是否有一种技术也可以处理这些边缘情况?
【问题讨论】:
-
您可能正在寻找属性标志
0x20000(FLAG_SECURE)。这个question 类似,但它是adb shell dumpsys。 -
@MartinZeitler:我不知道如何从
View获取这些标志,除了尝试查看与View关联的Activity。这错过了我在项目符号中提到的边缘情况。 -
他们的共同点是父母
Window;甚至在子窗口中显示的内容也有父Window。所以需要找到View的直接父级Window。 -
@CommonsWare 如果显示在屏幕上很重要。为什么我们不能使用带有
View的自定义吐司,它会显示在安全的Window上,并且只能在上下文中工作。
标签: android