Android 如何防止在我的Flitter应用程序的特定部分截图?

Android 如何防止在我的Flitter应用程序的特定部分截图?,android,flutter,kotlin,dart,Android,Flutter,Kotlin,Dart,有了它的帮助,我可以在我的应用程序中阻止截图,但我如何才能只在我的应用程序的特定部分使用它。它使我的整个应用程序无法共享 我有一个向我的高级会员展示说明的部分。我不想让用户截图 我的应用程序在kotlin中有MainActivity,所以当我从提到的线程复制java代码时,我的IDE将其转换为kotlin import android.os.Bundle import android.view.WindowManager.LayoutParams import androidx.annotati

有了它的帮助,我可以在我的应用程序中阻止截图,但我如何才能只在我的应用程序的特定部分使用它。它使我的整个应用程序无法共享

我有一个向我的高级会员展示说明的部分。我不想让用户截图

我的应用程序在kotlin中有MainActivity,所以当我从提到的线程复制java代码时,我的IDE将其转换为kotlin

import android.os.Bundle
import android.view.WindowManager.LayoutParams
import androidx.annotation.NonNull;
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant

class MainActivity: FlutterActivity() {
    override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
    }
}


您必须使用
MethodChannel
来执行此操作,并随意调用该方法启用/禁用屏幕截图

你可以检查一下怎么做。示例调用一个方法来获取电池电量,只需将其替换为Kotlin方法来启用/禁用屏幕截图

然后,您可以执行以下操作来传递参数,以决定它是启用还是禁用:

final platform = MethodChannel("your_channel_name");
platform.invokeMethod('setScreenshotEnableStatus',{'enabled': true})
并且,从
MethodCallHandler
接收的
MethodCall
对象,可以通过以下方式恢复该参数:

call.argument('enabled')
另一种方法是创建两个本机方法,一个用于enable,一个用于disable,并相应地调用它们


本机集成的另一个资源可能是,我快速浏览了这篇文章,它看起来还可以。

您可以使用专门为此目的而设计的Flutter包

虽然Android本机支持一系列窗口模式,但在运行的Flatter应用程序中动态设置这些模式并没有好办法,而是要求在Flatter应用程序本身的本机MainActivity中设置这些标志

在我们的应用程序中,我们只希望禁用特定屏幕的屏幕截图,而不是在整个应用程序生命周期中。现在只需调用以下命令即可完成此操作:

await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
用于相关屏幕

对于特定的屏幕,还可以使用RouteAware mixin,或者在有状态小部件的情况下,通过initState()和dispose()方法中的直接切换来进一步切换