当前位置: 首页 > news >正文

Android 录屏操作

Android 录屏操作

本文主要介绍android中如何通过MediaRecorder实现录屏操作的.

1: 申请权限

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

以上是录音以及存储的权限,另外需要动态申请录屏的权限.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {service = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);Intent screenCaptureIntent = service.createScreenCaptureIntent();startActivityForResult(screenCaptureIntent, 1001);
}

如上操作,点击后会弹出提示:

在这里插入图片描述

点击立即开始即可.

2: 获取MediaProjection

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == 1001 && resultCode == RESULT_OK) {if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {mediaProjection = service.getMediaProjection(resultCode, data);}Toast.makeText(this, "申请权限成功", Toast.LENGTH_SHORT).show();}
}

3: 创建MediaRecorder

创建mediarRecorder实例,设置相关参数.

mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setOutputFile("sdcard/test.mp4");
mediaRecorder.setVideoSize(1920, 2560);
mediaRecorder.setVideoFrameRate(90);

4: 创建VirtualDisplay并开始录制

VirtualDisplay 通过mediaProjection关联创建.

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {try {mediaRecorder.prepare();isRecording = true;} catch (IOException e) {e.printStackTrace();}Surface surface = mediaRecorder.getSurface();virtualDisplay = mediaProjection.createVirtualDisplay("ScreenRecording", 1920, 2560, 60,DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);mediaRecorder.start();}

5: 结束录制

private void stopRecord() {if (mediaRecorder != null) {mediaRecorder.stop();mediaRecorder.release();}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {if (virtualDisplay!=null) virtualDisplay.release();}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {if (mediaProjection != null) mediaProjection.stop();}
}

最后将相关资源释放即可.

http://www.lryc.cn/news/318168.html

相关文章:

  • 基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的血细胞智能检测与计数(深度学习模型+UI界面代码+训练数据集)
  • Selenium 学习(0.20)——软件测试之单元测试
  • 章六、集合(1)—— 概念、API、List 接口及实现类、集合迭代
  • 原生js html5 canvas制作flappy bird压扁小鸟游戏
  • 服务器集群 -- nginx配置tcp负载均衡
  • 现代DevOps如何改变软件开发格局
  • 如何在WordPress网站上设置多语言展示
  • Pinia和Vuex有什么区别?
  • 普林斯顿算法讲义(二)
  • JVM 面试——G1和ZGC的区别
  • 当“新质生产力”遇上“CAE仿真”,将激起什么样的火花?
  • 使用 ChatGPT 写高考作文
  • mac输入su命令报错如何重置密码
  • KY211 特殊排序
  • 设计模式八:观察者模式
  • 黑马程序员java部分笔记(持续更新)十点二:封装
  • ChatGPT-Next-Web SSRF漏洞+XSS漏洞复现(CVE-2023-49785)
  • 【小黑嵌入式系统第十九课】结课总结(三)——操作系统部分(RTOSμC/OS-Ⅲ程序设计基础(任务函数时间临界区通信))
  • C# Onnx C2PNet 图像去雾 室内场景
  • 工作中Git如何切换远程仓库地址
  • 香港理工大学主办!2024年第八届电力能源系统与应用国际会议(ICoPESA 2024)即将召开!
  • 【微服务-Nacos】Nacos集群的工作原理及集群间数据同步过程
  • LeetCode202.快乐数
  • c++面试整理(二)
  • Python中的区块链技术与应用
  • opencv-python 霍夫变换圆形检测:HoughCircles
  • 行为型-观察者模式
  • 《ElementPlus 与 ElementUI 差异集合》el-input 和 el-button 属性 size 有变化
  • pxe安装mini centos系统
  • Android studio 性能调试