android - 以编程方式检测 Android 屏幕覆盖

标签 android user-interface overlay

有没有办法让应用程序:

  1. 检查上面是否有屏幕覆盖,以及
  2. 找出哪个包名称拥有叠加层?

我知道 Android M 及更高版本能够在权限页面中检测屏幕覆盖,并在检测到屏幕覆盖时拒绝权限更改,但开发人员是否能够在应用层实现相同的功能?

最佳答案

您可以通过检查 MotionEvent.FLAG_WINDOW_IS_OBSCURED 来检测重叠当用户触摸您的 View 之一时标记

final View.OnTouchListener filterTouchListener = new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        // Filter obscured touches by consuming them.
        if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0) {
            if (event.getAction() == MotionEvent.ACTION_UP) {
                Toast.makeText(v.getContext(), "Overlay detected", Toast.LENGTH_SHORT).show();
            }
            return true;
        }
        return false;
    }
};

yourButton.setOnTouchListener(filterTouchListener);

来源:Android M's settings app

但是,我认为不可能检测到哪个应用拥有叠加层。

关于android - 以编程方式检测 Android 屏幕覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44197671/

相关文章:

JAVA BoofCV 方法的 Android 替代方案

android - 来自另一个 fragment 的 fragment 导航

java - 在定时器开始触发后重新设置延迟

android - 是否可以将尺寸设置为独立于 map 缩放级别的 groundOverlay?

java - Firebase 查询类似于 sql 的 WHERE 子句

java - 将字符串转换为日期 - 结果不准确

java - 带有Java的ColorGame(如Minesweeper)

java - 有没有办法让Jikes RVM通过GUI运行Java应用程序?

html - overlay:svg 移动 overlay-div,它们不再匹配

css - Bootstrap 4顶部的 sticky-top 覆盖层