gpt4 book ai didi

java - Android:自定义最近的应用程序缩略图(默认截图)

转载 作者:IT老高 更新时间:2023-10-28 20:30:35 32 4
gpt4 key购买 nike

我正在开发的应用程序显示一些敏感信息,当按下主页按钮停止应用程序时,这些信息不得显示在“最近的任务”屏幕上。

我想模糊屏幕截图中的敏感数据或改为显示应用 Logo

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

然后,我尝试了一些解决方法,但效果不如预期:

  • 启动一个在 onPause 中显示应用程序 Logo 的新 Activity ,以便显示它的屏幕截图而不是实际 Activity 的屏幕截图。但新 Activity 需要很长时间才能打开,并且会破坏用户体验。
  • 将 Activity 的内容 View 设置为 onPause 中的应用 Logo 图像。这对我来说似乎是一个很好的解决方案。不幸的是,最近任务屏幕的屏幕截图是在未指定的时间拍摄的。在测试过程中,应用 Logo 会在应用关闭前快速出现,但在此之前的一小段时间会显示屏幕截图。
  • 从小部件中删除敏感数据(例如textView.setText(""))与刚才提到的屏幕截图时间问题相同。

对于列出的变通办法有任何替代想法或解决方案吗?

最佳答案

几个月前,我出于与您相同的目的调查了此问题。

不幸的是,我不得不得出结论,这根本不可能。我翻遍了android源码并确认了。

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

How to change the snapshot shown by recent apps list? 中所述曾经有一个回调可以用来自定义缩略图:onCreateThumbnail .但是,这不起作用,它永远不会被调用。需要明确的是,回调仍然存在,操作系统根本不会调用它。它停止工作的事实没有得到很好的记录,但显然在 4.0.3 中被默默地弃用/删除了

至于缩略图本身,它是在服务器端截取的屏幕截图。它发生在 onPause 被调用之前(或者实际上是在任何表明您的 Activity 即将进入后台的回调被调用之前)。

当您的应用确实进入后台时,您的实际 View 是动画的(以获得缩小的过渡)。该动画可以通过您在 onPause 中所做的更改受到影响(如果您足够快的话)(我尝试在窗口上将不透明度设置为 0 等) .然而,这只会影响动画。动画完成后, View 将替换为之前截取的屏幕截图。

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

关于java - Android:自定义最近的应用程序缩略图(默认截图),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43274289/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com