你可以重写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。