Flutter屏幕捕获事件插件ness_screen_capture_event的使用

Flutter屏幕捕获事件插件ness_screen_capture_event的使用

捕捉屏幕捕获(截图和屏幕录制)事件,适用于Android和iOS。是的,屏幕录制在Android上也是可用的!🙌

配方

你可以通过编写以下代码来捕捉屏幕捕获事件:

final ScreenCaptureEvent screenListener = ScreenCaptureEvent();

[@override](/user/override)
void initState() {
    // 添加屏幕录制监听器
    screenListener.addScreenRecordListener((recorded) {
        /// 录制状态(布尔值)
        setState(() {
            text = recorded ? "开始录制" : "停止录制";
        });
    });

    // 添加截图监听器
    screenListener.addScreenShotListener((filePath) {
        /// filePath 仅适用于Android
        setState(() {
            text = "截图已保存到 : $filePath";
        });
    });

    // 可以添加多个监听器 ^-^
    screenListener.addScreenRecordListener((recorded) {
        print("我是第二个屏幕录制监听器");
    });
    screenListener.addScreenShotListener((filePath) {
        print("哇哦,我是第二个截图监听器");
    });

    // 开始监控
    screenListener.watch();
    super.initState();
}

[@override](/user/override)
void dispose() {
    // 不要忘记释放资源以解除所有观察者 :)
    screenListener.dispose();
    super.dispose();
}

你还可以通过以下代码来保护Android屏幕,防止用户进行截图或屏幕录制:

screenListener.preventAndroidScreenShot(true);

完整示例Demo

以下是完整的示例代码,展示了如何在Flutter应用中使用ness_screen_capture_event插件。

import 'package:flutter/material.dart';

import 'package:ness_screen_capture_event/ness_screen_capture_event.dart';

void main() {
  runApp(const MaterialApp(
    home: ExampleScreenListener(),
  ));
}

class ExampleScreenListener extends StatefulWidget {
  const ExampleScreenListener({Key? key}) : super(key: key);

  [@override](/user/override)
  _ExampleScreenListenerState createState() => _ExampleScreenListenerState();
}

class _ExampleScreenListenerState extends State<ExampleScreenListener> {
  final ScreenCaptureEvent screenListener = ScreenCaptureEvent();
  String text = "进行截图或屏幕录制";
  bool preventScreenshot = false;

  [@override](/user/override)
  void initState() {
    screenListener.addScreenRecordListener((recorded) {
      setState(() {
        text = recorded ? "开始录制" : "停止录制";
      });
    });
    screenListener.addScreenShotListener((filePath) {
      setState(() {
        text = "截图已保存到 : $filePath";
      });
    });
    screenListener.watch();
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    screenListener.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("示例屏幕捕获事件")),
      body: ListView(
        padding: const EdgeInsets.all(30),
        children: [
          Text(text, textAlign: TextAlign.center),
          const SizedBox(height: 10),

          // 防止截图按钮
          TextButton(
            style: TextButton.styleFrom(
                backgroundColor: Theme.of(context).primaryColor),
            onPressed: () {
              setState(() {
                preventScreenshot = !preventScreenshot;
              });
              screenListener.preventAndroidScreenShot(preventScreenshot);
            },
            child: Text(
              preventScreenshot
                  ? "允许截图(ANDROID)"
                  : "禁止截图(ANDROID)",
              style: const TextStyle(color: Colors.white),
            ),
          ),

          // 检查录制状态按钮
          TextButton(
            style: TextButton.styleFrom(
                backgroundColor: Theme.of(context).primaryColor),
            onPressed: () {
              screenListener.isRecording().then((value) {
                setState(() {
                  if (value) {
                    text = "你仍在录制";
                  } else {
                    text = "你未在录制";
                  }
                });
              });
            },
            child: const Text(
              "检查录制状态",
              style: TextStyle(color: Colors.white),
            ),
          ),
        ],
      ),
    );
  }
}

更多关于Flutter屏幕捕获事件插件ness_screen_capture_event的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕捕获事件插件ness_screen_capture_event的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


ness_screen_capture_event 是一个用于监听屏幕捕获事件的 Flutter 插件。通过这个插件,你可以检测到用户是否正在截屏或录制屏幕,从而在应用中做出相应的处理。

以下是使用 ness_screen_capture_event 插件的步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 ness_screen_capture_event 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  ness_screen_capture_event: ^latest_version

然后运行 flutter pub get 来安装依赖。

2. 导入插件

在你的 Dart 文件中导入 ness_screen_capture_event 插件:

import 'package:ness_screen_capture_event/ness_screen_capture_event.dart';

3. 初始化插件

在使用插件之前,你需要初始化它:

final _screenCaptureEvent = NessScreenCaptureEvent();

4. 监听屏幕捕获事件

你可以通过监听 onScreenCaptured 流来检测屏幕捕获事件:

void initScreenCaptureListener() {
  _screenCaptureEvent.onScreenCaptured.listen((event) {
    if (event == ScreenCaptureEvent.screenshot) {
      print('用户截屏了!');
    } else if (event == ScreenCaptureEvent.screenRecording) {
      print('用户开始录屏了!');
    }
  });
}

5. 启动和停止监听

你可以在应用的适当位置启动和停止监听屏幕捕获事件:

[@override](/user/override)
void initState() {
  super.initState();
  initScreenCaptureListener();
  _screenCaptureEvent.startListening();
}

[@override](/user/override)
void dispose() {
  _screenCaptureEvent.stopListening();
  super.dispose();
}

6. 处理权限

在某些平台上(如 Android),监听屏幕捕获事件可能需要特定的权限。请确保你的应用已经获取了必要的权限。

7. 处理不同平台的行为

请注意,ness_screen_capture_event 插件在不同平台上的行为可能有所不同。例如,在 iOS 上,由于系统限制,可能无法检测到屏幕录制事件。

示例代码

以下是一个完整的示例代码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenCaptureDemo(),
    );
  }
}

class ScreenCaptureDemo extends StatefulWidget {
  [@override](/user/override)
  _ScreenCaptureDemoState createState() => _ScreenCaptureDemoState();
}

class _ScreenCaptureDemoState extends State<ScreenCaptureDemo> {
  final _screenCaptureEvent = NessScreenCaptureEvent();

  [@override](/user/override)
  void initState() {
    super.initState();
    initScreenCaptureListener();
    _screenCaptureEvent.startListening();
  }

  void initScreenCaptureListener() {
    _screenCaptureEvent.onScreenCaptured.listen((event) {
      if (event == ScreenCaptureEvent.screenshot) {
        print('用户截屏了!');
      } else if (event == ScreenCaptureEvent.screenRecording) {
        print('用户开始录屏了!');
      }
    });
  }

  [@override](/user/override)
  void dispose() {
    _screenCaptureEvent.stopListening();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Capture Demo'),
      ),
      body: Center(
        child: Text('截屏或录屏试试看!'),
      ),
    );
  }
}
回到顶部