【问题标题】:How to prevent screenshots in particular sections of my flutter app?如何防止在我的颤振应用程序的特定部分截屏?
【发布时间】:2020-08-28 01:14:15
【问题描述】:

thread 的帮助下,我可以防止在我的应用程序中截屏,但我如何才能仅在我的应用程序的特定部分使用它。它使我的整个应用程序无法共享。

我有一个部分向我的高级会员显示注释。我不希望用户对其进行截图。

我的应用在 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)
    }
}

【问题讨论】:

    标签: android flutter kotlin dart


    【解决方案1】:

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

    您可以查看here 了解如何操作。示例调用一个方法来获取电池电量,只需将其替换为您的 Kotlin 方法即可启用/禁用屏幕截图。

    然后你可以这样做来传递参数来决定它是启用还是禁用:

    final platform = MethodChannel("your_channel_name");
    platform.invokeMethod('setScreenshotEnableStatus',{'enabled': true})
    

    并且,从MethodCallHandler 接收的MethodCall 对象,您可以通过这种方式恢复该参数:

    call.argument('enabled')
    

    另一种方法是创建两个本地方法,一个用于启用,一个用于禁用,并相应地调用它们。

    另一个原生集成资源可能是this,我快速浏览了这篇文章,似乎还可以。

    【讨论】:

      【解决方案2】:

      您可以使用为此目的制作的 Flutter Package flutter_windowmanager

      虽然 Android 本身支持一系列窗口模式,但没有好的方法可以在运行的 Flutter 应用程序中动态设置这些模式 - 而是需要在 Flutter 应用程序本身的本机 MainActivity 中设置这些标志。

      在我们的应用程序中,我们只希望禁用特定屏幕的屏幕截图,而不是在整个应用程序生命周期中禁用。现在可以通过简单地调用来完成:

      await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
      

      用于相关屏幕。

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

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 1970-01-01
        • 2019-12-17
        • 2020-07-24
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        相关资源
        最近更新 更多