让我以我已经阅读过的Android "Screen Overlay Detected" message if user is trying to grant a permission when a notification is showing开头,我完全理解覆盖问题是什么。
我也知道如何请求它,以及如何检查我当前运行的应用程序是否有权绘制覆盖图(!settings.candrawoverlays(this))。
我因为我的应用程序而挨骂,因为每次弹出权限请求时,都会显示套印格式弹出窗口,即使用户允许我的应用程序绘制套印格式,他们也永远无法通过权限屏幕。
经过一番挖掘,问题是一些用户正在屏幕上运行一个录制应用程序:
问题是,这不是我的应用程序!这是AZ屏幕录制器(link),它以覆盖方式运行,但由于在弹出窗口出现时它们就在我的应用程序中,所以我要为这个问题负责。
我想显示一些东西给用户,他们需要检查任何其他应用程序正在运行的东西作为覆盖,但我不知道如何检查这个。
我可以检查他们是否能够在我的应用程序中绘制覆盖图,但我不知道如何检查其他人。
因此,我的问题是,是否有方法以编程方式检查当前是否有任何应用在运行时运行覆盖,如果有,我可以找出所述应用的包名称吗?
(注:我对这个屏幕录制应用毫无疑虑,我只是想链接到它,这样任何人都可以下载并测试,如果他们愿意的话)
最佳答案
如果您可以创建一个测试视图并在该视图上生成一个tap事件,那么对于nougat和oreo版本,您可以使用:
view.setOnTouchListener((v, event) -> {
if ((event.getFlags() & 0x2) != 0) {
mPresenter.onVideoViewTapped();
return false;
}
return false;
});
这里0x2是flag_window_is_partially_obseried的值,它根据文档隐藏。