3

有什么方法可以确保我的应用程序的窗口不会被任何其他应用程序的视图遮蔽并使用SYSTEM_ALERT_WINDOW许可?

如果没有,那么除了每100 毫秒左右获得相同的权限并刷新/显示/我自己的视图(当然显示在警报窗口中)以保持它之外,还有什么更好的方法可以确保我的应用程序不会被此类窗口遮挡可见的?

最终闪烁,以防我的应用程序被遮挡,实际上是一件好事,并且向用户表明有问题。

编辑:似乎没有办法做到这一点,除非通过三星上的 KNOX 或其他一些可信 UI 的专有解决方案。接受的答案足以满足我的目的,但它不是所问问题的答案。

4

1 回答 1

1

即使这不是您要问的,我所知道的最接近的替代品是:

稍后可以像这样实现:

override fun onFilterTouchEventForSecurity(event: MotionEvent): Boolean {
    if ((event.flags and MotionEvent.FLAG_WINDOW_IS_OBSCURED) == MotionEvent.FLAG_WINDOW_IS_OBSCURED) {
        Toast.makeText(context, "Screen overlay detected!", Toast.LENGTH_LONG).show()
        return false // touch event is cancelled
    }
    return super.onFilterTouchEventForSecurity(event)
}

另请参阅查看类文档的安全部分

请注意,此功能在 API 9+ 中可用。可以在此 SO 问题中找到旧 API 的解决方法:Analogue of android:filterTouchesWhenObscured for API level below 9

于 2017-11-08T13:09:54.610 回答