flutter如何禁止截屏

在Flutter应用中如何禁止用户截屏或录屏?我尝试了一些方法但效果不理想,希望有经验的朋友能分享一下在Android和iOS平台上实现禁止截屏的最佳实践,包括是否需要使用原生代码以及具体如何实现。

2 回复

在Flutter中,可以通过flutter_windowmanager插件禁止截屏。调用addFlags方法,传入WindowManager.LayoutParams.FLAG_SECURE即可。适用于Android和iOS。

更多关于flutter如何禁止截屏的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,可以通过原生代码(Android 和 iOS)实现禁止截屏功能。以下是具体方法:

Android 端配置

  1. 修改 android/app/src/main/AndroidManifest.xml,在 Activity 标签中添加:
android:flags="FLAG_SECURE"

示例:

<activity  
  android:name=".MainActivity"  
  android:launchMode="singleTop"  
  android:theme="@style/LaunchTheme"  
  android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"  
  android:hardwareAccelerated="true"  
  android:windowSoftInputMode="adjustResize"  
  android:flags="FLAG_SECURE">

iOS 端配置
ios/Runner/AppDelegate.swiftapplication 方法中添加:

window.makeSecure()

并扩展 UIWindow

extension UIWindow {
    open override func makeSecure() -> UIWindow {
        let field = UITextField()
        field.isSecureTextEntry = true
        self.addSubview(field)
        field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
        field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
        self.layer.superlayer?.addSublayer(field.layer)
        field.layer.sublayers?.first?.addSublayer(self.layer)
        return self
    }
}

注意事项

  1. Android 的配置会阻止截屏和录屏,iOS 的方法主要防止截屏时预览内容泄露。
  2. 此功能需分别配置原生代码,Flutter 层无直接封装方法。

完成后重新编译应用即可生效。

回到顶部