Android 移动设备管理:禁用所有应用程序的屏幕截图

Android Mobile Device Management: Disable screenshots capture across all apps

我正在制作一个 MDM 应用程序,我必须在其中屏蔽所有屏幕截图 设备中的应用程序。我知道使用

 getWindow().setFlags(LayoutParams.FLAG_SECURE,LayoutParams.FLAG_SECURE)

我可以在我的应用程序活动中禁用屏幕捕获,但我想 在安装到设备的所有应用程序中禁用屏幕捕获。之前 我正在使用文件观察器来阻止屏幕捕获,它正在检测是否 任何图像已添加到屏幕截图文件夹,它正在删除 图片。但是从 Android M 开始,他们不允许文件观察器。我 有很多搜索但没有得到任何解决方案。但是很多 android 应用程序 就像 quick heal 的 seqrite MDM 在 android 中阻止屏幕捕获 M也是,所以一定有办法。

我找到了 api setScreenCaptureDisabled 在 DevicePolicyManger class 中可以禁用屏幕捕获,但它 只能由设备所有者应用程序调用。

哪位知道屏蔽截屏的方法请帮帮我

要启动设备所有者,您需要擦除设备并使用 NFC 碰撞它,或者让用户 select 从菜单中执行(仅限 5.1 及更高版本)。除非你使用诸如摩托罗拉或 KNOX API(特定于平台)之类的东西,否则你对通用 Android 不走运。

我通过在 seqrite 应用程序中阻止屏幕捕获时使用日志获得了解决方案。在激活屏幕阻止的情况下,他们启动了一项服务,在该服务上显示浮动 window

  WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.WRAP_CONTENT,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_SECURE,
                    PixelFormat.TRANSPARENT);
                params.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
                params.gravity = Gravity.CENTER;
                mView = new LinearLayout(ctx);
                View  btn = new View(ctx);
                mView.addView(btn);
                wm.addView(mView, params);

我在这里使用安全标志,它阻止在所有应用程序中捕获屏幕。因为此 window 位于顶部,阻止屏幕捕获。