Dart 颤振:禁用应用程序的屏幕截图捕获

Dart 颤振:禁用应用程序的屏幕截图捕获,dart,flutter,Dart,Flutter,我正在制作一个颤振应用程序,我需要确保用户无法捕获应用程序的屏幕截图(任何屏幕)。有没有办法在Flutter中实现这一点,或者我需要为Android和IOS编写本机代码 在Flatter项目的嵌入式android项目目录中找到MainActivity类 将以下导入添加到主活动类:import android.view.WindowManager.LayoutParams 将以下行添加到MainActivity的onCreate方法:getWindow().addFlags(LayoutParam

我正在制作一个颤振应用程序,我需要确保用户无法捕获应用程序的屏幕截图(任何屏幕)。有没有办法在Flutter中实现这一点,或者我需要为Android和IOS编写本机代码

  • 在Flatter项目的嵌入式android项目目录中找到MainActivity类
  • 将以下导入添加到主活动类:
    import android.view.WindowManager.LayoutParams
  • 将以下行添加到MainActivity的onCreate方法:
    getWindow().addFlags(LayoutParams.FLAG_SECURE)
  • 在Flatter项目的嵌入式android项目目录中找到MainActivity类
  • 将以下导入添加到主活动类:
    import android.view.WindowManager.LayoutParams
  • 将以下行添加到MainActivity的onCreate方法:
    getWindow().addFlags(LayoutParams.FLAG_SECURE)

  • 你可以在iOS上听屏幕截图键,当按下组合键时屏幕变黑。

    你可以在iOS上听屏幕截图键,当按下组合键时屏幕变黑。

    对我有效的是在MainActivity.java文件中编写以下代码。

    @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
      }
    
    并导入这些包

    import android.view.WindowManager; 
    import android.view.WindowManager.LayoutParams;
    import android.os.Bundle; // required for onCreate parameter
    

    对我有用的是在MainActivity.java文件中编写以下代码。

    @Override
      protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
      }
    
    并导入这些包

    import android.view.WindowManager; 
    import android.view.WindowManager.LayoutParams;
    import android.os.Bundle; // required for onCreate parameter
    

    这适用于iOS。在您的
    Runner>AppDelegate.m
    中:

    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      [GeneratedPluginRegistrant registerWithRegistry:self];
      // Override point for customization after application launch.
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    
    - (void)applicationWillResignActive:(UIApplication *)application{
        self.window.hidden = YES;
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application{
        self.window.hidden = NO;
    }
    
    @end
    

    这适用于iOS。在您的
    Runner>AppDelegate.m
    中:

    @implementation AppDelegate
    
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
      [GeneratedPluginRegistrant registerWithRegistry:self];
      // Override point for customization after application launch.
      return [super application:application didFinishLaunchingWithOptions:launchOptions];
    }
    
    - (void)applicationWillResignActive:(UIApplication *)application{
        self.window.hidden = YES;
    }
    
    - (void)applicationDidBecomeActive:(UIApplication *)application{
        self.window.hidden = NO;
    }
    
    @end
    

    通过以下两个步骤可以很容易地防止屏幕截图

    我正在使用VS代码

    步骤1使用路径
    android\app\src\main\kotlin\com\example\auth\u email\mainActivity.kt打开文件“mainActivity.kt”

    步骤2添加两行

    (a) import android.view.WindowManager.LayoutParams; 
    
    (b) getWindow().addFlags(LayoutParams.FLAG_SECURE); in MainActivity: FlutterActivity() section
    
    重新启动应用程序


    通过以下两个步骤可以很容易地防止屏幕截图

    我正在使用VS代码

    步骤1使用路径
    android\app\src\main\kotlin\com\example\auth\u email\mainActivity.kt打开文件“mainActivity.kt”

    步骤2添加两行

    (a) import android.view.WindowManager.LayoutParams; 
    
    (b) getWindow().addFlags(LayoutParams.FLAG_SECURE); in MainActivity: FlutterActivity() section
    
    重新启动应用程序


    如果您正在使用kotlin

    打开MainActivity.kt

    在导入末尾添加以下代码

    import android.view.WindowManager.LayoutParams
    
    在super.onCreate(savedInstanceState)的末尾添加以下代码


    完成。

    如果您正在使用kotlin

    打开MainActivity.kt

    在导入末尾添加以下代码

    import android.view.WindowManager.LayoutParams
    
    在super.onCreate(savedInstanceState)的末尾添加以下代码


    完成了。

    最简单的方法是使用名为

    首先在您的flatter项目的pubspec.yaml文件中导入它的最新版本,然后运行pub-get。然后将下面的代码添加到小部件的initState()方法中,您要为其禁用屏幕截图和屏幕录制

     Future<void> secureScreen() async {
        await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE); 
     }
    
     @override
     void initState() {
        secureScreen();
        super.initState();
     }
    
    Future secureScreen()异步{
    等待FlatterWindowManager.addFlags(FlatterWindowManager.FLAG\u安全);
    }
    @凌驾
    void initState(){
    secureScreen();
    super.initState();
    }
    

    如果要禁用整个应用程序截图,只需在main.dart文件的main()函数中调用securescreen()方法(定义见上文)。

    最简单的方法是使用名为

    首先在您的flatter项目的pubspec.yaml文件中导入它的最新版本,然后运行pub-get。然后将下面的代码添加到小部件的initState()方法中,您要为其禁用屏幕截图和屏幕录制

     Future<void> secureScreen() async {
        await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE); 
     }
    
     @override
     void initState() {
        secureScreen();
        super.initState();
     }
    
    Future secureScreen()异步{
    等待FlatterWindowManager.addFlags(FlatterWindowManager.FLAG\u安全);
    }
    @凌驾
    void initState(){
    secureScreen();
    super.initState();
    }
    
    如果要禁用整个应用程序截图,只需在main.dart文件的main()函数中调用securescreen()方法(定义见上文)。

    尝试使用

    对于android编辑MainActivity.kt

    package com.package.app_name
    
    import android.view.WindowManager.LayoutParams
    import io.flutter.embedding.android.FlutterActivity
    import io.flutter.embedding.engine.FlutterEngine
    
    class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        window.addFlags(LayoutParams.FLAG_SECURE)
        super.configureFlutterEngine(flutterEngine)
      }
    }
    
    尝试使用

    对于android编辑MainActivity.kt

    package com.package.app_name
    
    import android.view.WindowManager.LayoutParams
    import io.flutter.embedding.android.FlutterActivity
    import io.flutter.embedding.engine.FlutterEngine
    
    class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        window.addFlags(LayoutParams.FLAG_SECURE)
        super.configureFlutterEngine(flutterEngine)
      }
    }
    
    第二期工程

    方法1:使用软件包

    方法2:

    使用kotlin的Android系统

    步骤1:使用路径打开文件“mainActivity.kt”

    android\app\src\main\kotlin\com\example\auth\u email\MainActivity.kt

    步骤2导入库

    导入android.view.WindowManager.LayoutParams

    import io.flatter.embedding.android.flatterActivity

    导入io.flatter.embedded.engine.flatterengine

    在主活动课中的第3步

    class MainActivity: FlutterActivity() {
      override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
        window.addFlags(LayoutParams.FLAG_SECURE)
        super.configureFlutterEngine(flutterEngine)
      }
    }
    
    在iOS Swift中:AppDelefate.Swift文件

    import UIKit
    import Flutter
    
    @UIApplicationMain
    @objc class AppDelegate: FlutterAppDelegate {
    
      override func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
      ) -> Bool {
        GeneratedPluginRegistrant.register(with: self)
        return super.application(application, didFinishLaunchingWithOptions: launchOptions)
      }
      
      // <Add>
      override func applicationWillResignActive(
        _ application: UIApplication
      ) {
        self.window.isHidden = true;
      }
      override func applicationDidBecomeActive(
        _ application: UIApplication
      ) {
        self.window.isHidden = false;
      }
      // </Add> 
    
    }
    
    导入UIKit
    进口颤振
    @UIApplicationMain
    @objc类AppDelegate:AppDelegate{
    重写func应用程序(
    _应用程序:UIApplication,
    didFinishLaunchingWithOptions launchOptions:[UIApplication.launchOptions键:任意]?
    )->布尔{
    GeneratedPluginRegistrant.register(带:self)
    return super.application(application,didfishlaunchingwithoptions:launchOptions)
    }
    // 
    重写函数应用程序WillResignActive(
    _应用程序:UIApplication
    ) {
    self.window.ishiden=true;
    }
    覆盖函数applicationIDBecomeActive(
    _应用程序:UIApplication
    ) {
    self.window.ishiden=false;
    }
    //  
    }
    
    用于第二个项目

    方法1:使用软件包

    方法2:

    使用kotlin的Android系统

    步骤1:使用路径打开文件“mainActivity.kt”

    android\app\src\main\kotlin\com\example\auth\u email\MainActivity.kt

    步骤2导入库

    导入android.view.WindowManager.LayoutParams

    import io.flatter.embedded.android.Flutt