【问题标题】:Android Mobile Device Management: Disable screenshots capture across all appsAndroid 移动设备管理:禁用跨所有应用程序的屏幕截图
【发布时间】:2016-03-04 23:30:52
【问题描述】:

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

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

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

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

如果有人知道阻止屏幕捕获的方法,请帮助我。

【问题讨论】:

标签: android screenshot mdm


【解决方案1】:

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

  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);

这里我使用了安全标志,它阻止了所有应用程序的屏幕捕获。因为这个窗口位于顶部,阻止了屏幕截图。

【讨论】:

  • 谢谢,但是你愿意放完整的代码吗?什么是虚拟机?活动的根视图?此代码是否运行到已启动的服务中?
  • wm = WindowManager
  • TYPE_SYSTEM_OVERLAY 现已弃用
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2022-10-08
    • 1970-01-01
    • 1970-01-01
    • 2019-02-18
    • 2019-11-13
    • 1970-01-01
    • 2017-10-21
    • 2013-11-17
    • 2013-07-19
    相关资源
    最近更新 更多