我正在使用颤振,并已禁用正常的应用程序,从录制屏幕。这是代码
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);问题是,有些手机的屏幕录音应用程序是预先安装的,上面的代码无法阻止他们录制屏幕。那么,还有其他方法阻止这些应用程序录制屏幕吗?在其他答案中,我发现这是不可能的,但在playstore上有一些应用程序成功地实现了这一点。所以一定有办法。我在想,当屏幕记录应用程序被绘制出来时,它们可能会通过一段代码被检测到,因此我们可以在绘制屏幕记录应用程序时显示弹出。有可能吗?如果是,我们如何检测应用程序是否绘制在我们的应用程序之上。谢谢。
发布于 2020-07-30 11:58:39
将此代码添加到我的MainActivity.java中解决了这个问题:
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!this.setSecureSurfaceView()) {
Log.e("MainActivity", "Could not secure the MainActivity!");
}
}
private final boolean setSecureSurfaceView() {
ViewGroup content = (ViewGroup) this.findViewById(android.R.id.content);
//Intrinsics.checkExpressionValueIsNotNull(content, "content");
if (!this.isNonEmptyContainer((View) content)) {
return false;
} else {
View splashView = content.getChildAt(0);
//Intrinsics.checkExpressionValueIsNotNull(splashView, "splashView");
if (!this.isNonEmptyContainer(splashView)) {
return false;
} else {
View flutterView = ((ViewGroup) splashView).getChildAt(0);
//Intrinsics.checkExpressionValueIsNotNull(flutterView, "flutterView");
if (!this.isNonEmptyContainer(flutterView)) {
return false;
} else {
View surfaceView = ((ViewGroup) flutterView).getChildAt(0);
if (!(surfaceView instanceof SurfaceView)) {
return false;
} else {
((SurfaceView) surfaceView).setSecure(true);
this.getWindow().setFlags(8192, 8192);
return true;
}
}
}
}
}
private final boolean isNonEmptyContainer(View view) {
if (!(view instanceof ViewGroup)) {
return false;
} else {
return ((ViewGroup) view).getChildCount() >= 1;
}
}导入所需的东西。
发布于 2020-07-29 15:50:58
据我所知,没有官方的方法来普遍防止屏幕抓取/录音。
这是因为FLAG_SECURE只会阻止在非安全显示器上捕获
窗口标志:将窗口的内容视为安全,防止其出现在屏幕截图中或在非安全显示中被查看。
但是,具有较高权限的应用程序可以创建安全虚拟显示,并使用屏幕镜像记录屏幕,这不尊重安全标志。
欲了解更多信息,请阅读这篇文章:
这意味着安卓设备像电视一样向DRM保护的显示器转换,总是显示敏感的屏幕,因为安全的概念实际上意味着“版权”。对于应用程序,Google阻止未由系统密钥签名的应用程序创建虚拟“安全”显示,从而阻止了这一问题。
关于一些应用程序如何仍然能够做到这一点,您可以尝试以下几种:
https://stackoverflow.com/questions/63156931
复制相似问题