Android:自定义最近的应用缩略图(默认为屏幕截图)

Tob*_*ann 53 java android

我正在处理的应用程序显示了一些敏感信息,当按下主页按钮停止应用程序时,这些信息不能显示在"近期任务"屏幕上.

我想模糊屏幕截图中的敏感数据或显示应用徽标.

我知道以下方法,但它们不符合我的要求:

然后我尝试了一些解决方法,但是没有按预期工作:

  • 启动一个显示应用徽标的新活动,以便显示onPause屏幕截图,而不是实际的活动屏幕截图.但新活动需要很长时间才能打开,这会破坏用户体验.
  • 将activitie的内容视图设置为应用徽标的图像onPause.这对我来说似乎是一个很好的解决方案.不幸的是,最近任务屏幕的屏幕截图是在未指定的时间进行的.在测试期间,在按下"主页"时应用程序关闭之前会快速显示应用程序徽标,但生成的屏幕截图会在此之前的短时间内显示活动.
  • 从小部件中移除敏感数据(例如textView.setText(""))具有与刚刚提到的屏幕截图定时相同的问题.

列出的解决方法的任何其他想法或解决方案?

小智 36

几个月前我和你一样对此进行了调查.

不幸的是,我不得不得出结论,这根本不可能.我挖掘了android源代码并确认了它.

  • 没有来自android的回调或方法允许你自定义它(无论如何都有效).此外FLAG_SECURE,这部分代码不接受任何输入或更改.
  • 调用OnPause和类似的生命周期方法为时已晚(已截屏).所有会暗示您即将进入后台的生命周期方法运行得太晚了.
  • 您在最近的任务中看到的图像是一个实际的屏幕截图 - 因此不受您对视图所做的更改(太晚)的影响.这意味着您无法及时修改视图(例如将其视为不可见,替换为其他内容,添加SECURE_FLAG或视图的任何其他障碍).另外,这些图像可以在仿真器上找到/data/system_ce/0/recent_images.
  • 唯一的例外是使用FLAG_SECURE,这将阻止截取您的应用程序的屏幕截图.我尝试将此FLAG设置onPause并将其删除onResume,但是如前所述,这些生命周期方法已经在截屏后已经运行,因此完全没有效果.

如何更改最近的应用列表显示的快照中所述?曾经有一个可以用来自定义缩略图的回调:onCreateThumbnail.但是,这不起作用,永远不会被调用.要清楚的是,回调仍然存在,它根本就不会被操作系统调用.它停止工作的事实记录很少,但显然在4.0.3中被默默地弃用/删除

至于缩略图本身,它是服务器端的截图.它被onPause调用之前(或实际上在任何回调之前,表明你的活动即将进入后台被调用).

当您的应用程序进入后台时,您的实际视图将被设置为动画(以实现缩小过渡).你可以通过改变来影响那个动画onPause(如果你足够快的话)(我尝试在窗口中将不透明度设置为0等).但这只会影响动画.动画完成后,视图将被之前拍摄的屏幕截图所取代.

另请参阅以下讨论此问题的问题:


Cha*_*apz 0

在整个 Activity 之上实现布局覆盖怎么样?

使其透明,默认情况下是点击式的,因此在使用时不会对用户体验产生负面影响。

如果onPause()设置一个半透明的模糊图像作为该布局的背景,则其后面的数据将被打乱。再次将onResume()背景更改为完全透明。瞧。

它可能比其他类型的覆盖更快。积极的副作用是,如果您在用户返回时将模糊处理作为短动画效果(使用使用 C++ 而不是 Java 的适当库),它甚至可能看起来很酷,并且用户甚至不介意看到它。

我自己没有尝试过,但这是你还没有尝试过的。

  • 这不是一个解决方案,因为屏幕截图是在 onPause 之前意外时间截取的 (5认同)

归档时间:

查看次数:

6190 次

最近记录:

6 年,2 月 前