FLAG_WINDOW_IS_OBSCURED 不适用于较新的 Android

Hou*_*ser 7 security android

我一直在android应用程序中实现窃听防御,但我发现FLAG_WINDOW_IS_OBSCURED在android 7.0上设置了标志,但在android 10.0上没有设置,而窗口被另一个应用程序遮挡。

你知道为什么会发生吗?

我在模拟器和物理设备上测试了它。覆盖测试应用程序是黄昏。官方文档感觉没什么用。

我发现了这个评论:

FLAG_WINDOW_IS_OBSCURED 仅在覆盖层中继触摸事件并且触摸坐标实际上被遮挡时才起作用

这可能表明,在较新的 Android 版本中,它也必须模糊触摸坐标,但我找不到任何模糊触摸坐标的应用程序来测试它。

为了集中检测重叠的应用程序,我使用了:

@Override
    public boolean dispatchTouchEvent(MotionEvent event) {
        final boolean obscuredTouch = (event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) != 0;
        if(obscuredTouch) return false;

        return super.dispatchTouchEvent(event);
    }
Run Code Online (Sandbox Code Playgroud)

在所有其他活动扩展的 BaseActivity 中。

我认为视图的Android 标签 android:filterTouchesWhenObscured 使用了相同的标志FLAG_WINDOW_IS_OBSCURED(如果我错了,请纠正我):

Thi*_*van 2

从 Android 10 及更高版本开始,我们必须使用FLAG_WINDOW_IS_PARTIALLY_OBSCURED。