You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter安卓Kotlin端防截图代码报错,求解决方案及替代方法

解决Flutter安卓端Kotlin防截图的代码错误及其他实现方式

首先,你遇到的Unresolved reference: WindowManager错误是因为导入语句和代码调用不匹配导致的。下面是两种修正后的代码方案,帮你快速解决这个问题:

方案1:补充导入WindowManager类

package com.example.schoolbells
import io.flutter.embedding.android.FlutterActivity
import android.os.Bundle
import androidx.annotation.NonNull
import io.flutter.embedding.engine.FlutterEngine
import android.view.WindowManager // 新增这个导入
import android.view.WindowManager.LayoutParams

class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 现在可以正常使用WindowManager.LayoutParams了
        window.setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE)
    }
}

方案2:直接使用已导入的LayoutParams

因为你已经导入了android.view.WindowManager.LayoutParams,所以可以直接省略WindowManager.前缀,简化代码:

package com.example.schoolbells
import io.flutter.embedding.android.FlutterActivity
import android.os.Bundle
import androidx.annotation.NonNull
import io.flutter.embedding.engine.FlutterEngine
import android.view.WindowManager.LayoutParams

class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        window.setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
    }
}

除原生代码外的其他Flutter实现方式

1. 使用第三方Flutter插件

你可以用封装好的Flutter插件,在Dart层直接控制防截图功能,无需手动编写原生代码。比如flutter_windowmanager插件:

  • 先在pubspec.yaml中添加依赖:
dependencies:
  flutter_windowmanager: ^0.2.0
  • 然后在Dart代码中调用:
import 'package:flutter_windowmanager/flutter_windowmanager.dart';

// 开启防截图
void enableSecureScreen() async {
  await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
}

// 关闭防截图
void disableSecureScreen() async {
  await FlutterWindowManager.clearFlags(FlutterWindowManager.FLAG_SECURE);
}

这个插件底层还是调用安卓的FLAG_SECURE标记,但能让你在Flutter层更灵活地控制,比如针对特定页面开启/关闭。

2. 针对特定页面动态控制

如果不需要全局开启防截图,只在敏感页面生效,可以在页面的生命周期方法中动态切换:

import 'package:flutter/material.dart';
import 'package:flutter_windowmanager/flutter_windowmanager.dart';

class SecurePage extends StatefulWidget {
  const SecurePage({super.key});

  @override
  State<SecurePage> createState() => _SecurePageState();
}

class _SecurePageState extends State<SecurePage> {
  @override
  void initState() {
    super.initState();
    // 进入页面时开启防截图
    FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
  }

  @override
  void dispose() {
    // 离开页面时关闭防截图
    FlutterWindowManager.clearFlags(FlutterWindowManager.FLAG_SECURE);
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("敏感页面")),
      body: const Center(child: Text("此页面无法被截图/录屏")),
    );
  }
}

内容的提问来源于stack exchange,提问作者ashish Arora

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 15:32:36