如何确定哪个应用程序导致“检测到屏幕覆盖”错误?

Posted

技术标签:

【中文标题】如何确定哪个应用程序导致“检测到屏幕覆盖”错误?【英文标题】:How Do I determine which app is causing the “Screen Overlay Detected” error? 【发布时间】:2017-08-04 03:06:50 【问题描述】:

让我以我已经阅读过android "Screen Overlay Detected" message if user is trying to grant a permission when a notification is showing 开头,并且我完全理解覆盖问题是什么。

我还了解如何请求它以及如何检查我当前正在运行的应用程序是否有权在叠加层上绘制 (!Settings.canDrawOverlays(this))。

我因为我的应用程序而受到责骂,因为每次弹出权限请求时,都会显示叠加层弹出窗口,并且 即使用户允许我的应用程序绘制叠加层,他们也永远无法通过权限屏幕。

经过一番挖掘,问题是一些用户正在他们的屏幕上运行录音应用:

问题是,这不是我的应用程序!这是 AZ Screen Recorder (link),它作为叠加层运行,但由于出现此弹出窗口时它们就在我的应用程序中,因此我受到了这个问题的指责。

我想向用户显示一些内容,他们需要检查是否有任何其他应用程序正在以覆盖的形式运行某些内容,但我不知道如何检查。

我可以检查他们是否能够在我的应用程序中绘制叠加层,但我不知道如何检查其他人。

因此,我的问题是,有没有办法以编程方式检查当前是否有任何应用程序在运行时运行覆盖,如果有,我可以找出说应用?

(PS,我对有问题的屏幕录像机应用程序没有疑虑,我只是想链接到它,以便任何人都可以下载并测试他们是否选择)

【问题讨论】:

您好,如果您找到任何解决方案,请告诉我。 【参考方案1】:

如果您可以制作测试视图并在其上生成点击事件,那么您可以使用牛轧糖和奥利奥版本:

view.setOnTouchListener((v, event) -> 
        if ((event.getFlags() & 0x2) != 0) 
            mPresenter.onVideoViewTapped();
            return false;
        
        return false;
    );

这里 0x2 是 FLAG_WINDOW_IS_PARTIALLY_OBSCURED 的值,根据文档隐藏。

【讨论】:

有趣的想法,ty。下次有机会我会测试这个 也请分享结果

以上是关于如何确定哪个应用程序导致“检测到屏幕覆盖”错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在棉花糖设备中检查屏幕覆盖检测到的权限

如何确定哪个 EndPoint 导致了错误代码 10054 的 SocketException? (“现有连接被远程主机强行关闭。”)

Symfony Messenger 如何确定应由哪个处理程序处理每种类型的消息?

如何确定哪个反应视图应该处理商店事件

如何确定哪个 UIControlEvents 类型导致了 UIEvent?

如果用户在显示通知时尝试授予权限,则 Android“检测到屏幕覆盖”消息