让APP无法使用截图功能


[toc]


背景

最近有个需求,要求APP不能使用截图,以前没有弄过这种需求,有点摸不着头脑,自己的思路是拦截截屏的 快捷键,然而并不需要这么复杂

方法

接入过银联的就知道银联在支付的时候,是无法截图的,在AS里面的截图也无法使用,然后就去看银联的源码,发现了新大陆,里面的BaseActivity有行代码是这样写的

this.getWindow().addFlags(8192);

看到这个你有没有想到我们以前设置全屏的方法

this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

然后我们去查询8192,Android的系统常量一般是16进制的,故8192对应的16进制为0x2000
所以我们进入到WindowManager.LayoutParams去看看,搜索2000,发现FLAG_SECURE
QQ截图20161107111355.jpg

看这个名字也就知道了吧,上面注释说的是:这个标志是用来将窗口内容视为安全的,它不会出现在屏幕截图里面.

也就是说:我们自己的Activity,只要加上了这个标志,就会变得“安全”,就不能使用屏幕截图.

总结

要让APP无法使用截图功能,就直接写一个基类Activity,在onCreate方法中加入

getWindow().addFlags(WindowManager.LayoutParams. FLAG_SECURE);

是不是很简单,对的,so easy.

谢谢你请我吃糖,Mua
0%