插件介绍

fluttertpc_screen_capture_event 是一个强大的 Flutter 插件,用于监听和处理屏幕截图和录制事件。该插件支持 Android、iOS 和 HarmonyOS(鸿蒙)平台,帮助开发者轻松实现屏幕捕获行为的检测与响应。

在鸿蒙平台上,该插件经过专门适配,允许开发者:

  • 监听用户的屏幕截图操作
  • 获取截图文件路径
  • 防止屏幕截图和录制
  • 检查当前是否正在进行屏幕录制

如何使用插件

1. 包的引入

由于这是一个自定义修改版本,需要通过 Git 形式引入。在项目的 pubspec.yaml 文件中添加以下依赖配置:

dependencies:
  screen_capture_event_ohos:
    git:
      url: "https://gitcode.com/openharmony-sig/fluttertpc_screen_capture_event.git"
      path: "ohos"

然后执行以下命令获取依赖:

flutter pub get

2. 权限配置

在鸿蒙平台上使用该插件需要配置相应的权限。

2.1 添加权限声明

打开 entry/src/main/module.json5 文件,添加以下权限配置:

...
"requestPermissions": [
  {
    "name": "ohos.permission.PRIVACY_WINDOW",
    "reason": "screen_capture_event_ohos_example",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "inuse"
    }
  },
  {
    "name": "ohos.permission.READ_IMAGEVIDEO",
    "reason": "screen_capture_event_ohos_example",
    "usedScene": {
      "abilities": [
        "EntryAbility"
      ],
      "when": "inuse"
    }
  }
]
...
2.2 添加权限说明

打开 entry/src/main/resources/base/element/string.json 文件,添加以下内容:

{
  "string": [
    {
      "name": "EntryAbility_label",
      "value": "screen_capture_event_ohos_example"
    }
  ]
}

3. API 调用示例

3.1 初始化屏幕捕获事件监听器
import 'package:screen_capture_event_ohos/screen_capture_event_ohos.dart';

final ScreenCaptureEventOhos screenListener = ScreenCaptureEventOhos();
3.2 请求存储权限
await screenListener.storagePermission();
3.3 添加屏幕截图监听器
screenListener.addScreenShotListener((filePath) {
  // filePath 为截图文件的路径
  setState(() {
    _message = "截图已保存到: $filePath";
  });
});
3.4 防止屏幕截图/录制
// 禁止屏幕截图和录制
screenListener.preventOhosScreenShot(true);

// 允许屏幕截图和录制
screenListener.preventOhosScreenShot(false);
3.5 检查当前是否正在录制
bool isRecording = await screenListener.isRecording();
setState(() {
  _recordingStatus = isRecording ? "正在录制" : "未录制";
});
3.6 开始监听和释放资源

void initState() {
  super.initState();
  // 开始监听屏幕捕获行为
  screenListener.watch();
}


void dispose() {
  // 释放所有原生监听器
  screenListener.dispose();
  super.dispose();
}

4. 完整使用示例

以下是一个完整的使用示例,展示了如何在 Flutter 应用中集成和使用该插件:

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

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

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

  
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final ScreenCaptureEventOhos _screenListener = ScreenCaptureEventOhos();
  String _message = '等待屏幕捕获事件...';
  String _recordingStatus = '未录制';
  bool _preventScreenShot = false;

  
  void initState() {
    super.initState();
    _initScreenCaptureEvent();
  }

  Future<void> _initScreenCaptureEvent() async {
    // 请求存储权限
    await _screenListener.storagePermission();

    // 添加屏幕截图监听器
    _screenListener.addScreenShotListener((filePath) {
      setState(() {
        _message = "截图已保存到: $filePath";
      });
    });

    // 开始监听
    _screenListener.watch();
  }

  Future<void> _checkRecordingStatus() async {
    bool isRecording = await _screenListener.isRecording();
    setState(() {
      _recordingStatus = isRecording ? "正在录制" : "未录制";
    });
  }

  
  void dispose() {
    // 释放资源
    _screenListener.dispose();
    super.dispose();
  }

  
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('屏幕捕获事件监听'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text(_message),
              const SizedBox(height: 20),
              Text('录制状态: $_recordingStatus'),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: _checkRecordingStatus,
                child: const Text('检查录制状态'),
              ),
              const SizedBox(height: 20),
              ElevatedButton(
                onPressed: () {
                  _preventScreenShot = !_preventScreenShot;
                  _screenListener.preventOhosScreenShot(_preventScreenShot);
                  setState(() {
                    _message = _preventScreenShot ? "已禁止屏幕截图和录制" : "已允许屏幕截图和录制";
                  });
                },
                child: Text(_preventScreenShot ? "允许屏幕截图和录制" : "禁止屏幕截图和录制"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

API 参考

方法名 描述 参数 返回值 鸿蒙支持情况
ScreenCaptureEventOhos 构造函数,初始化屏幕事件监听器 bool requestPermission / 支持
storagePermission 请求存储权限 / Future 支持
preventOhosScreenShot 防止屏幕截图/录制 bool value Future 支持
addScreenRecordListener 添加屏幕录制状态监听器 Function(bool recorded) callback void 不支持
addScreenShotListener 添加屏幕截图监听器 Function(String filePath) callback void 支持
watch 开始监听屏幕捕获行为 / void 支持
dispose 释放所有原生监听器 / void 支持
isRecording 检查当前是否正在录制 / Future 支持

约束与限制

  1. 兼容性

    • Flutter: 3.7.12-ohos-1.0.6 及以上
    • SDK: 5.0.0(12) 及以上
    • IDE: DevEco Studio: 5.0.13.200 及以上
  2. 功能限制

    • 目前鸿蒙平台暂不支持 addScreenRecordListener 方法来监听屏幕录制状态变化

总结

fluttertpc_screen_capture_event 是一个功能强大的屏幕捕获事件监听插件,通过简单的 API 调用,开发者可以轻松实现屏幕截图和录制的监听与控制。在鸿蒙平台上,该插件经过专门适配,提供了良好的用户体验。

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐