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

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

通过 screen_capture_event_ohos 插件可以捕获屏幕截图(截屏)和屏幕录制事件。是的,屏幕录制功能在Ohos上也是可用的!🙌

配方

您可以使用以下代码来捕获屏幕捕获事件:

final ScreenCaptureEventOhos screenListener = ScreenCaptureEventOhos();

[@override](/user/override)
void initState() {
    screenListener.addScreenRecordListener((recorded) {
        /// recorded 是您的记录状态 (布尔值)
        setState(() {
            text = recorded ? "开始录制" : "停止录制";
        });
    });

    screenListener.addScreenShotListener((filePath) {
        /// filePath 仅适用于ohos
        setState(() {
            text = "截图已保存至 : $filePath";
        });
    });

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

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

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

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

screenListener.preventOhosScreenShot(true);

查看文档和示例代码以获取更多信息,欢迎提交PR 🙌

注意事项

旧版问题

第二个视频录制的状态无法更新。

示例代码

以下是完整的示例代码:

import 'package:flutter/material.dart';

import 'package:screen_capture_event_ohos/screen_capture_event_ohos.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 ScreenCaptureEventOhos screenListener = ScreenCaptureEventOhos();
  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.preventOhosScreenShot(preventScreenshot);
            },
            child: Text(
              preventScreenshot
                  ? "允许截图 (OHOS)"
                  : "禁止截图 (OHOS)",
              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屏幕捕获事件插件screen_capture_event_ohos的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


screen_capture_event_ohos 是一个用于在 HarmonyOS 上监听屏幕捕获事件的 Flutter 插件。它允许开发者在应用内部监听屏幕截图或录屏事件,并执行相应的操作。

以下是如何使用 screen_capture_event_ohos 插件的详细步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  screen_capture_event_ohos: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

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

import 'package:screen_capture_event_ohos/screen_capture_event_ohos.dart';

3. 初始化插件

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  ScreenCaptureEventOhos().initialize();
  runApp(MyApp());
}

4. 监听屏幕捕获事件

你可以使用 ScreenCaptureEventOhos 来监听屏幕截图或录屏事件。

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

class _MyAppState extends State<MyApp> {
  final ScreenCaptureEventOhos _screenCaptureEvent = ScreenCaptureEventOhos();
  bool _isScreenCaptureEnabled = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    _screenCaptureEvent.onScreenCaptureChanged.listen((bool isScreenCaptureEnabled) {
      setState(() {
        _isScreenCaptureEnabled = isScreenCaptureEnabled;
      });
      if (isScreenCaptureEnabled) {
        // 屏幕截图或录屏事件发生时的处理逻辑
        print("Screen capture event detected!");
      }
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Screen Capture Event Example'),
        ),
        body: Center(
          child: Text(
            _isScreenCaptureEnabled ? "Screen Capture Enabled" : "Screen Capture Disabled",
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}

5. 处理屏幕捕获事件

onScreenCaptureChanged 回调中,你可以处理屏幕截图或录屏事件。例如,你可以显示一个通知、记录日志或执行其他操作。

6. 清理资源

在应用退出或不再需要监听屏幕捕获事件时,记得清理资源:

[@override](/user/override)
void dispose() {
  _screenCaptureEvent.dispose();
  super.dispose();
}
回到顶部