【发布时间】:2017-09-02 14:41:22
【问题描述】:
我正在开发的应用程序显示一些敏感信息,当按下主页按钮停止应用程序时,这些信息不得显示在“最近的任务”屏幕上。
我想模糊屏幕截图中的敏感数据或改为显示应用徽标。
我知道以下方法,但它们不符合我的要求:
- 在清单中将 actvtie 的
android:excludeFromRecents设置为 true 会阻止应用程序在最近的任务中显示。这会破坏用户体验。 - 使用
FLAG_SECURE会导致最近任务屏幕上出现空白卡片。 (How do I prevent Android taking a screenshot when my app goes to the background?) 我不喜欢空白屏幕。但是,如果没有解决方法,我会坚持使用此解决方案。 - 覆盖
onCreateThumbnail似乎是理想的解决方案,但不幸的是,它不起作用,因为操作系统目前没有调用它:( (https://code.google.com/p/android/issues/detail?id=29370)
然后,我尝试了一些解决方法,但效果不如预期:
- 启动一个在
onPause中显示应用程序徽标的新活动,以便显示它的屏幕截图而不是实际活动的屏幕截图。但新 Activity 需要很长时间才能打开,并且会破坏用户体验。 - 将活动的内容视图设置为
onPause中的应用程序徽标图像。这对我来说似乎是一个很好的解决方案。不幸的是,最近任务屏幕的屏幕截图是在未指定的时间拍摄的。在测试过程中,应用徽标会在应用关闭前快速出现,但在此之前的一小段时间会显示屏幕截图。 - 从小部件中删除敏感数据(例如
textView.setText(""))与刚才提到的屏幕截图时间问题相同。
对于列出的变通办法有任何替代想法或解决方案吗?
【问题讨论】:
-
@Ωmega 如果适合您的用户体验,请尝试使用android:autoRemoveFromRecents。
-
@PravinDivraniya - 如果应用程序通过按 Recents Apps 按钮从该活动进入后台,那么该标志将不起作用。系统仍会显示缩略图。只有当您按下 Home 按钮然后转到 Recents App 列表时,它才会像预期的那样出现。很奇怪,对吧?
-
@Ωmega 是的,这是非常奇怪的行为。
-
@Ωmega 据我说,FLAG_SECURE 是您最好的选择,但您还应该在 onPause/onStop 中更改活动的视图(可能使用您提到的应用程序的徽标),因为有些设备显示屏幕截图即使在使用 FLAG_SECURE
-
@SarthakMittal - 不幸的是,
onPause/onStop被触发/调用太晚了,因此在这些点所做的任何更改都不会更改 Recents 中的应用程序缩略图.