Flutter如何阻止安卓录屏与截图

在Flutter开发中,如何实现禁止安卓设备录屏和截图的功能?目前项目有安全需求,需要防止用户通过系统截图或录屏获取敏感信息。尝试过使用SecureFlag,但在某些机型上不生效,是否有更可靠的跨机型方案?最好能兼顾不同安卓版本兼容性,求具体实现思路或插件推荐。

2 回复

Flutter中可通过android:windowSecure属性阻止安卓录屏与截图。在android/app/src/main/AndroidManifest.xml的Activity标签内添加:

android:windowSecure="true"

此设置会阻止系统截图和录屏功能。

更多关于Flutter如何阻止安卓录屏与截图的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,可以通过以下方法阻止Android设备上的录屏和截图功能:

方法一:设置FLAG_SECURE标志

这是最常用的方法,可以同时阻止截图和录屏:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SecureScreen(),
    );
  }
}

class SecureScreen extends StatefulWidget {
  @override
  _SecureScreenState createState() => _SecureScreenState();
}

class _SecureScreenState extends State<SecureScreen> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    _enableSecureMode();
  }

  @override
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      _enableSecureMode();
    }
  }

  void _enableSecureMode() {
    // 设置FLAG_SECURE标志
    // 注意:这需要在Android平台上运行
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('安全屏幕'),
      ),
      body: Center(
        child: Text('此屏幕内容受到保护'),
      ),
    );
  }
}

方法二:使用原生代码实现

在Android原生代码中设置FLAG_SECURE:

MainActivity.kt

import android.os.Bundle
import android.view.WindowManager
import io.flutter.embedding.android.FlutterActivity

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

方法三:使用插件

可以使用第三方插件如flutter_window_manager

dependencies:
  flutter_window_manager: ^0.2.0
import 'package:flutter_window_manager/flutter_window_manager.dart';

void setSecureMode() async {
  await FlutterWindowManager.addFlags(FlutterWindowManager.FLAG_SECURE);
}

注意事项

  1. FLAG_SECURE效果

    • 阻止截图(显示黑屏)
    • 阻止录屏(录屏内容为黑屏)
    • 阻止在某些应用中显示预览
  2. 局限性

    • 无法阻止物理设备的拍照
    • 在部分定制ROM上可能失效
    • 无法阻止root设备的录屏
  3. 用户体验:应在确实需要保护敏感信息时使用,避免过度使用影响用户体验。

这些方法可以有效保护应用内容不被非法录制或截图,特别适用于金融、企业应用等安全要求较高的场景。

回到顶部