Android允许应用程序使用android.permission.SYSTEM_ALERT_WINDOW绘制其他应用程序,它被称为浮动/覆盖应用程序。例如,Facebook Messenger在屏幕边缘始终显示可见的聊天气泡。
我的问题是:是否有可能在Java代码中检测或阻止任何应用程序覆盖我的应用程序?
答案 0 :(得分:11)
您可以覆盖View#onFilterTouchEventForSecurity()
方法来检测动作事件是否具有FLAG_WINDOW_IS_OBSCURED
。如果在您的视图之上绘制了某些内容,则会通知您。
@Override
public boolean onFilterTouchEventForSecurity(MotionEvent event) {
if ((event.getFlags() & MotionEvent.FLAG_WINDOW_IS_OBSCURED) == MotionEvent.FLAG_WINDOW_IS_OBSCURED){
// show error message
return false;
}
return super.onFilterTouchEventForSecurity(event);
}
如果您只是想保护自己的应用免受因应用程序覆盖应用程序而导致的点按,您可以通过XML或以编程方式将setFilterTouchesWhenObscured
添加到您的视图中。