在 'Recent Apps List' 中隐藏屏幕,但允许截屏

Hide screen in 'Recent Apps List', but allow screenshots

我主要是想在最近的应用程序列表中黑屏,因为显示了敏感数据。为此,解决方案是使用:

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

但这也不允许屏幕截图,这是一个问题。

有没有办法在最近的应用程序列表中显示空白屏幕(或预定义的图像),同时仍然允许屏幕截图?

我想你需要的是:

android:excludeFromRecents="true"

将其放入 android 清单中 <activity>(activity you want to exclude from recents)</activity>

如果您的 Activity 显示敏感数据,出于安全原因最好不要让用户进行屏幕截图。如果您甚至担心最近的应用程序屏幕,为什么您不同时担心屏幕截图?我认为,Android OS SecureFlag 旨在保护您的数据和屏幕截图功能,只是否定了它的目的。
如果您无论如何都想要这种能力,您可以尝试将所有敏感数据移动到带有此标志的 activity 分隔。在这种情况下,您将保护您的敏感数据,并且在其他应用程序的活动中将能够进行屏幕截图。

经过一些研究,我发现目前这是不可能的。

onCreateThumbnail 似乎是您要找的功能。不幸的是,此功能似乎未实现或至少不起作用。

正如 Ped7g 指出的那样:自 2014 年以来,onCreateThumbnail 是 "won't fix"。

它在 Android onCreateThumbnail reference page

此功能很可能永远无法使用。

这个方法我试过了,很管用。要使最近列表中的屏幕空白并仍然允许屏幕,您可以在 onPause() 中设置标志并清除 onResume() 中的标志。

@Override
protected void onPause() {
  super.onPause();
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);
}

@Override
protected void onResume() {
    super.onResume();
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);     
}