【发布时间】:2021-05-26 18:56:25
【问题描述】:
我想阻止用户截屏和录屏,我尝试为android和ios添加本机代码,对于android它完美地工作但对于ios它不起作用。
【问题讨论】:
-
重复是错误的,因为这个问题是iOS问题。 [android] 标签可能会让人们感到困惑。如果您需要帮助调试您的代码为什么不起作用,您可以发布代码。
我想阻止用户截屏和录屏,我尝试为android和ios添加本机代码,对于android它完美地工作但对于ios它不起作用。
【问题讨论】:
最简单的方法是使用名为flutter_windowmanager的flutter包
Future<void> secureScreen() async {
await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
}
@override
void initState() {
secureScreen();
super.initState();
}
如果您想禁用整个应用的屏幕截图,只需在 main.dart 文件的 main() 函数中调用 securescreen() 方法(如上定义)即可。
注意:由于 flutter_windowmanager 只封装和公开了一个底层的 Android 特定接口,因此没有计划或可能的 iOS 支持。对于那些对跨平台 FLAG_SECURE 功能感兴趣的人,此功能已在第三方 secure_application plugin 中重新创建。
【讨论】:
在 Flutter 中没有这样的公共 API 可以让您阻止截屏,以及您在问题中已经提到的原因是原生 Android 可以完美运行,但原生 iOS 不能,因为 iOS 不提供任何此类公共可以限制用户截屏的 API。
虽然有一种方法可以通知您已截屏。您可以查看UIApplicationUserDidTakeScreenshotNotification,但会在在截屏后发布通知。
【讨论】:
在 MainActivity.java 上添加一行
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
【讨论】: