2016-04-28 46 views
20

Android允许应用程序使用android.permission.SYSTEM_ALERT_WINDOW绘制其他应用程序,它被称为浮动/覆盖应用程序。例如Facebook Messenger在屏幕边缘总是有可见的聊天泡泡。Android检测或阻止浮动/覆盖应用程序

我的问题是:是否有可能在Java代码中检测或阻止绘制我的应用程序的任何应用程序?

+0

在较新的版本,你可以问来回屏幕录制权限,并比较你画的是什么,并在屏幕上 –

回答

8

有一个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你的意见。

+0

谢谢,将检查并让你知道,如果这是工作 –

+0

谢谢,它的作品像一个魅力! –