这篇文章上次修改于 218 天前,可能其部分内容已经发生变化,如有疑问可询问作者。
转载自:android近期任务列表,Android最近任务列表的安全问题

最近遇到一个需求,由于app中存在自动扫描证件(敏感信息)获取用户真实信息的功能。而且由于在系统会自动获取app的最后一个activity的screen shot,并将其显示于recent task list(最近任务列表)中。因此可能会存在敏感信息泄露的问题。

解决方法1:

在AndroidManifest.xml中对应的会处于activity栈底的activity节点上添加属性

android:excludeFromRecents="true"

此时,所有与该activity处于同一个栈里的同一个app的activity都不会显示在recent task list(最近任务列表)中。

但是此方法带来的问题是:用户不能使用recent task list(最近任务列表)来快速启动我们的app。

解决方法2:

重写Activity中的

public boolean onCreateThumbnail(Bitmap outBitmap, Canvas canvas)

方法,使用该方法将自定义的图片供recent task list(最近任务列表)使用。

但是经过从4.4.4到6.0.1系统的测试,该方法在这两个版本之间系统均不起作用。

解决方法3:

在对应的activity中的onCreate()方法中添加如下代码

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

可以使设置了该flag的activity不能被截屏,包括系统。这就解决了敏感信息出现在recent task list(最近任务列表)中的问题。

注意:这个flag的设置可以是动态的,这意味着当监听到是用户操作按键截取当前屏幕的时候可以解除这个flag,然后等待用户截屏完成后,再恢复这个flag。