我正在构建的应用程序要求应用程序必须阻止操作系统在出于安全原因将其推入后台时截取应用程序的屏幕截图.这样,在应用程序之间切换时,它将无法看到最后一个活动屏幕.
我打算将此功能放在应用程序类的onPause方法中,但首先我需要了解如何实现此功能.
所以有人在那里,有一个线索如何解决这个问题?
我正在开发一个具有私人信息的应用程序,不应在Android最近的应用程序切换器中显示真实的屏幕截图.我已经尝试了这个解决方案的变体,通过将内容视图设置为onPause函数内的ImageView,但似乎操作系统在内容视图更改为自定义图像之前截取屏幕截图.
我也知道设置窗口的布局参数标志是安全的,使截图完全白色,但我希望有一种方法来自定义屏幕截图.
所以,我想知道Android在什么时候为应用程序切换器(特别是在KitKat和Lollipop中)截取应用程序的屏幕截图.
在较新版本的Android(> 3.0)中,有一个屏幕按钮,它将显示最近的应用程序列表及其名称和快照.即使我的应用程序本身受密码保护,此概述也可能会显示该快照中的敏感数据.那么有没有办法强制显示某个图像(如徽标)而不是让操作系统决定?
据我所知,在Android 4.0(或更高版本)上,默认任务管理器显示程序的最后一个截图,程序图标没有左上角.见图:

我的问题是如何将任务管理器中的应用程序图像(不是图标)更改为自定义?不要问我为什么,我只是需要它.
经过一些研究后,我在SO上找到了类似的问题:在ICS的任务管理器中显示黑色预览屏幕.但它没有回答我的问题.
此外,我没有找到任何API与此任务管理器一起使用.
因此我决定在程序(活动)关闭时显示自定义图像.从活动生命周期中我发现我需要覆盖方法onPause.所以我决定编写一个小程序.这很容易理解:
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public void onResume()
{
super.onResume();
setContentView(createImageView("/sdcard/program-image.jpg"));
}
@Override
public void onPause()
{
setContentView(createImageView("/sdcard/task-manager-image.jpg"));
super.onPause();
}
private ImageView createImageView(String pathFile)
{
ImageView imageView = new ImageView(getApplication());
imageView.setImageBitmap(BitmapFactory.decodeFile(pathFile));
imageView.invalidate();
return imageView;
}
}
Run Code Online (Sandbox Code Playgroud)
在task-manager-image真正显示了按Home键后一段时间,但任务管理器只显示program-image.
这样做有什么好的解决方案吗?
谢谢你的帮助.
我有一个请求,当我的Android应用程序放入后台时,我将屏幕空白以隐藏敏感数据.这很容易实现使用:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
Run Code Online (Sandbox Code Playgroud)
困难的部分似乎正在改变在后台查看应用程序时获得的空白屏幕的颜色.默认情况下,它似乎是白色的,我似乎找不到覆盖它的方法.有人有主意吗?