借助此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)
}
}
答案 0 :(得分:1)
您必须使用MethodChannel
来执行此操作,然后随意调用启用/禁用屏幕截图的方法。
您可以检查here的操作方法。这些示例调用了一种获取电池电量的方法,只需将其替换为您的Kotlin方法即可启用/禁用屏幕截图。
然后,您可以执行以下操作来传递参数,以决定该参数是启用还是禁用:
final platform = MethodChannel("your_channel_name");
platform.invokeMethod('setScreenshotEnableStatus',{'enabled': true})
,然后从MethodCall
收到的MethodCallHandler
对象中,您可以通过以下方式恢复该参数:
call.argument('enabled')
另一种实现方法是创建两个本机方法,一个用于启用,一个用于禁用,然后相应地调用它们。
另一个用于本机集成的资源可能是this,我已经快速浏览了这篇文章,看起来还可以。
答案 1 :(得分:0)
您可以使用为此目的制作的Flutter软件包flutter_windowmanager。
虽然Android本机支持多种窗口模式,但没有很好的方法在正在运行的Flutter应用程序中动态设置它们-而是要求在Flutter应用程序本身的本机MainActivity中设置这些标志。
在我们的应用程序中,我们只希望禁用特定屏幕的屏幕截图,而不是在整个应用程序生命周期中禁用屏幕截图。现在,只需调用以下命令即可完成此操作:
await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
相关屏幕。
通过使用RouteAware混合,或在有状态小部件的情况下,通过直接切换initState()和dispose()方法,可以进一步将其切换到特定屏幕。