Flutter屏幕录制回调插件screen_recorder_callback的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter屏幕录制回调插件screen_recorder_callback的使用

screen_recorder_callback

一个用于在Android和iOS上检测和响应屏幕录制事件的Flutter插件。此插件提供了实时回调功能,允许您的应用在用户开始或停止录制其屏幕时做出反应。

屏幕录制回调插件演示

特性

  • 实时屏幕录制检测:当屏幕录制开始或结束时通知您的应用。
  • 跨平台支持:支持Android和iOS。
  • 易于集成:简单的API来管理录制状态并接收通知。

安装

  1. pubspec.yaml文件中添加以下依赖项:

    dependencies:
      screen_recorder_callback: ^0.0.1
    
  2. 在Dart代码中导入该包:

    import 'package:screen_recorder_callback/screen_recorder_callback.dart';
    

使用方法

  1. 初始化ScreenRecorderCallback并开始监听:

    final ScreenRecorderCallback screenRecorderCallback = ScreenRecorderCallback();
    
    screenRecorderCallback.onScreenRecordingChangeStream.listen((isRecording) {
      if (isRecording) {
        // 屏幕录制已开始
      } else {
        // 屏幕录制已停止
      }
    });
    
    // 开始监听
    screenRecorderCallback.startListening();
    
  2. 当不再需要时释放监听器:

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

平台需求

Android

  • 最低SDK版本:35

  • 权限:在使用此插件的应用的AndroidManifest.xml文件中添加以下权限:

    <uses-permission android:name="android.permission.DETECT_SCREEN_RECORDING" />
    

    注意:此权限对于在支持的Android版本(Android 15及以上)上进行屏幕录制检测是必要的。如果实现了其他功能,还需确保设置了其他所需的权限。

iOS

  • 最低iOS版本:iOS 11
  • 权限:无需额外权限。该插件使用UIScreen.capturedDidChangeNotification来检测屏幕录制的变化,支持iOS 11及更高版本。

示例应用

要快速入门,请查看example文件夹中的示例应用,该示例展示了如何在Flutter项目中集成和使用该插件。

其他注意事项

  • 错误处理:插件提供了Flutter异常捕获。为了捕获任何错误,请在启动和停止监听调用时包裹在try-catch块中。
  • 释放资源:记得正确释放资源以避免内存泄漏。

故障排除

如果您在安装或集成过程中遇到问题,请确保以下几点:

  • CocoaPods:如果您正在开发iOS,请确保CocoaPods已安装并更新。
  • Flutter版本:确保您使用的是与最新插件更新兼容的Flutter版本。

如需进一步帮助,请参阅Flutter文档


示例代码

import 'dart:async';

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

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isRecording = false;
  final ScreenRecorderCallback _screenRecorderApi = ScreenRecorderCallback();
  StreamSubscription<bool>? _recordingSubscription;

  [@override](/user/override)
  void initState() {
    super.initState();
    initScreenRecordingCallback();
  }

  // 初始化屏幕录制回调
  Future<void> initScreenRecordingCallback() async {
    try {
      _recordingSubscription =
          _screenRecorderApi.onScreenRecordingChangeStream.listen((recording) {
        setState(() {
          isRecording = recording;
        });
      });

      await _screenRecorderApi.startListening();
    } catch (e) {
      setState(() {
        isRecording = false; // 显示"未录制"在出错时
      });
    }
  }

  [@override](/user/override)
  void dispose() {
    _screenRecorderApi.stopListening();
    _recordingSubscription?.cancel();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        backgroundColor: isRecording ? Colors.red : Colors.white,
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Icon(
                isRecording ? Icons.videocam : Icons.videocam_off,
                size: 80,
                color: isRecording ? Colors.white : Colors.black54,
              ),
              const SizedBox(height: 20),
              Text(
                isRecording ? '录制中...' : '未录制',
                style: TextStyle(
                  color: isRecording ? Colors.white : Colors.black54,
                  fontSize: 24,
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter屏幕录制回调插件screen_recorder_callback的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕录制回调插件screen_recorder_callback的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成并使用screen_recorder_callback插件的一个代码示例。这个插件允许你进行屏幕录制,并在录制过程中获取回调(如开始录制、结束录制等)。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  screen_recorder_callback: ^最新版本号 # 请替换为实际最新版本号

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

步骤 2: 配置权限(Android 和 iOS)

Android

android/app/src/main/AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

iOS

ios/Runner/Info.plist中添加以下权限描述:

<key>NSMicrophoneUsageDescription</key>
<string>App needs access to microphone to record screen with audio</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>App needs access to photo library to save recordings</string>

步骤 3: 实现屏幕录制功能

在你的Flutter代码中,你可以如下使用screen_recorder_callback插件:

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

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

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

class ScreenRecorderPage extends StatefulWidget {
  @override
  _ScreenRecorderPageState createState() => _ScreenRecorderPageState();
}

class _ScreenRecorderPageState extends State<ScreenRecorderPage> {
  late ScreenRecorderController _screenRecorderController;

  @override
  void initState() {
    super.initState();
    _screenRecorderController = ScreenRecorderController();

    // 设置录制开始回调
    _screenRecorderController.onStart = () {
      print("Screen recording started");
    };

    // 设置录制结束回调
    _screenRecorderController.onStop = (String filePath) {
      print("Screen recording stopped. Video saved at: $filePath");
    };

    // 设置录制错误回调
    _screenRecorderController.onError = (String errorMessage) {
      print("Screen recording error: $errorMessage");
    };
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Recorder Callback Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: () async {
                // 检查并请求权限
                bool hasPermissions = await _screenRecorderController.checkPermissions();
                if (!hasPermissions) {
                  bool requestPermissionsResult = await _screenRecorderController.requestPermissions();
                  if (!requestPermissionsResult) {
                    print("Permissions denied by user");
                    return;
                  }
                }

                // 开始录制
                await _screenRecorderController.startRecording();
              },
              child: Text('Start Recording'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                // 停止录制
                await _screenRecorderController.stopRecording();
              },
              child: Text('Stop Recording'),
            ),
          ],
        ),
      ),
    );
  }

  @override
  void dispose() {
    // 释放资源
    _screenRecorderController.dispose();
    super.dispose();
  }
}

说明

  1. 权限检查和请求:在开始录制之前,我们需要检查和请求必要的权限(如录音和存储权限)。
  2. 录制回调:我们设置了三个回调:onStartonStoponError,用于处理录制开始、结束和错误的情况。
  3. UI按钮:我们创建了两个按钮,一个用于开始录制,另一个用于停止录制。

确保在实际应用中处理所有可能的错误和边缘情况,并根据需要调整UI和逻辑。

回到顶部