【问题标题】:Android exclude view from screenshotAndroid 从屏幕截图中排除视图
【发布时间】:2019-12-29 04:37:36
【问题描述】:
所以我有一项服务可以从我的应用程序运行覆盖视图(就像 facebook messenger 图标一样)。当您单击它时,它会打开另一个视图,其中包含一些信息。有没有办法阻止该视图仅在用户在其设备上截屏时显示?我的意思不是使用getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE); 来一起停止屏幕截图,而是在截屏时让该视图不可见?
【问题讨论】:
标签:
android
screenshot
android-view
【解决方案1】:
不,抱歉——你的选择是 FLAG_SECURE 窗口,或者什么都没有。您不会在即将截取屏幕截图时收到通知,以便对其进行任何响应。
【解决方案2】:
如果我正确理解了这个问题,您希望保护部分内容不受屏幕截图的影响,而不是整个窗口。正如@CommonsWare 建议的那样,这是不可能的。但是,如果你绝望的话,可能会有一个(愚蠢的)解决方案。
此解决方案可能看起来有点不切实际,并且不适用于您的用例(或任何用例).. 但无论如何
也许,您可以显示两个窗口(因此也显示活动) - 一个包含敏感内容,一个包含非敏感内容(并在敏感窗口/活动上使用 FLAG_SECURE)
如何同时显示两个活动?
- 从 N 开始,Android 支持 multi window mode(多个活动,并排)
- 您可以强制一个活动以多窗口模式启动/在启动后切换到多窗口模式.. 使用this 技术(将 AccessibilityService.html#GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN 传递给 AccessibilityService.html#performGlobalAction(int) ) .比如说,你在这种模式下启动了非敏感活动。
- 一旦您的非敏感活动处于分屏模式,您可以启动
sensitive 活动,也可以使用FLAG_ACTIVITY_LAUNCH_ADJACENT 在分屏模式下启动(此标志仅在设备已处于多窗口模式时有效,我们可以通过 AccessibilityService 技术实现)
免责声明:我没有尝试过。此外,如果它有效,它显然适用于 Android N 及更高版本。希望它有所帮助(可能不会,抱歉:-))
【解决方案3】:
在您的视图中使用 SurfaceView,以便为您提供帮助
参考
Link