[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
看这个名字也就知道了吧,上面注释说的是:这个标志是用来将窗口内容视为安全的,它不会出现在屏幕截图里面.
也就是说:我们自己的Activity,只要加上了这个标志,就会变得“安全”,就不能使用屏幕截图.
总结
要让APP无法使用截图功能,就直接写一个基类Activity,在onCreate方法中加入
getWindow().addFlags(WindowManager.LayoutParams. FLAG_SECURE);
是不是很简单,对的,so easy.