在我的 Android 应用程序中,我需要使用
SECURE_FLAG
对 Android 说:“嘿,你不要在后台截取我的应用程序的屏幕截图!”。好的,只需在我的活动中使用以下代码行即可工作:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
...
}
我获得的内容在下面的屏幕截图中进行了解释:
现在,我怎样才能:
我寻找解决方案,但我没有找到任何东西..除了不可能做到这一点(如果是真的,我认为对于Android来说很遗憾)。
您可以使用两种布局。
在布局的 xml 代码中,创建一个单独的布局,然后将整个 ui 代码剪切并粘贴到其中,并为其指定 id
mainLayout
。制作另一个用于保护 UI 的布局。为这个布局指定 id protectLayout
,然后您可以自定义您想要的内容,例如图像背景等...
然后在您想要确保安全的活动中遵循此操作。
LinearLayout mainLayout,secureLayout;
@Override
protected void onPause() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
mainLayout.setVisibility(View.GONE);
secureLayout.setVisibility(View.VISIBLE);
super.onPause();
}
@Override
protected void onStart() {
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);
mainLayout.setVisibility(View.VISIBLE);
secureLayout.setVisibility(View.GONE);
super.onStart();
}
注意:这最适合 Android 版本 11 及更高版本,因为在其他版本中,最近的显示不会立即更新。
(在 Samsung M30s API 32 和 Google Pixel API 33 模拟器上测试)