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.mzph.cn/news/744320.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计讯物联水库泄洪监测预警系统,保障水库安全度汛

近日&#xff0c;受台风外围环流影响&#xff0c;多地受到特大暴雨侵袭。因此水库泄洪是势在必行。泄洪作为水库防洪的重要方法之一&#xff0c;水库可通过其库容拦蓄洪水&#xff0c;在水库容量超出或下游需求的时候则开始实行泄洪&#xff0c;达到减免洪水灾害的目的&#xf…

画图实战-Python实现某产品全年销量数据多种样式可视化

画图实战-Python实现某产品全年销量数据多种样式可视化 学习心得Matplotlib说明什么是Matplotlib&#xff1f;Matplotlib特性Matplotlib安装 产品订单量-折线图某产品全年订单量数据数据提取和分析绘制折线图 产品订单&销售额-条形图某产品全年订单&销售额数据绘制条形…

TypeScript(六)条件类型,函数,装饰器

条件类型 TypeScript 中的条件类型是一种高级类型&#xff0c;它使我们根据不同的条件创建更复杂的类型。 TS中的条件类型就是在类型中添加条件分支&#xff0c;以支持更加灵活的泛型 条件类型允许我们根据某个类型的属性是否满足某个条件&#xff0c;来确定最终的类型。 type…

【智能算法】蜻蜓算法(DA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.代码实现4.参考文献 1.背景 2016年&#xff0c;Mirjalili受到蜻蜓静态和动态集群行为启发&#xff0c;提出了蜻蜓算法(Dragonfly algorithm, DA)。 2.算法原理 2.1算法思想 蜻蜓集群有两种行为目的&#xff1a;狩猎&#xf…

高端新颖知识竞赛活动方案

设计一场高端新颖知识竞赛活动&#xff0c;需要组织者用心策划&#xff0c;精心准备。下面这场竞赛设计新颖&#xff0c;可供大家组织竞赛活动时参考 。本竞赛分为“万箭齐发”、“城旗易主”、“群雄逐鹿”、“追风逐电”&#xff0c;四个环节&#xff0c;所有环节必须在主持人…

【CesiumJS-5】绘制动态路线实现飞行航线、汽车轨迹、路径漫游等

实现效果 前言 Cesium中&#xff0c;动态路线绘制的核心是借助CZML格式&#xff0c;CZML是一种用来描述动态场景的JSON数组,可以用来描述点、线、多边形、体、模型及其他图元,同时定义它们是怎样随时间变化的&#xff1b; CZML主要做三件事&#xff1a; 1.添加模型信息 2.添加…

如何在Linux系统部署APITable容器并实现无公网IP远程管理本地数据

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

1 蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板,找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上,玩家可以完全控制掷骰子的结果,并希望找出到达最后一个单元格所需的最小掷骰次数。 如果玩家到达的牢房是梯子的底部,玩家…

金融防线升级:构筑数据安全的不可逾越之墙

近日&#xff0c;中国人民银行专栏《金融科技支持高质量发展》指出&#xff0c;应不断增强金融行业的网络安全和数据安全保障能力&#xff0c;坚持总体国家安全观&#xff0c;持续完善金融网络安全、数据安全制度体系&#xff0c;依法开展金融业关键信息基础设施安全保护工作&a…

mac删除带锁标识的app

一 、我们这里要删除FortiClient.app 带锁 常规方式删除不掉带锁的 app【如下图】 二、删除命令&#xff0c;依次执行即可。 /bin/ls -dleO /Applications/FortiClient.app sudo /usr/bin/chflags -R noschg /Applications/FortiClient.app /bin/ls -dleO /Applications/Forti…

Wireshark4.2.3 x64 Setup20240313

参考&#xff1a;【抓包工具】win 10 / win 11&#xff1a;WireShark 下载、安装、使用&#xff08;https://blog.csdn.net/qq_39720249/article/details/128157223&#xff09; 文章目录 下载安装12 license 许可证3 donations&#xff1a;捐款4 Choose Components&#xff1…

算法-图的存储,图的转置,拓扑排序

1.图的存储 图用来对关系建模&#xff0e;图是节点和边构成的集合&#xff0e;节点反映图的元素集合&#xff0c;边反映图的元素集合中元素间的关系&#xff0e; 上述是由五个节点&#xff0c;三条边构成的结构&#xff0e;我们可以用图对其建模&#xff0e; 对由节点&#x…

【Python】Leetcode 240. 搜索二维矩阵 II - 削减矩阵+递归,击败88%

描述 搜索二维矩阵 II 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。 该矩阵具有以下特性&#xff1a; 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 思路 确定左右及上下限&#xff0c;削减矩阵&#xff0c;递归。 注意判断四个端…

API数据能力开放架构 数据api接口

一.API数据接口可以从几个不同的角度来看待&#xff1a; 1. 技术角度&#xff1a;API数据接口是一种技术实现&#xff0c;通常是以HTTP协议或其他网络协议为基础&#xff0c;并采用特定的数据格式&#xff08;如JSON或XML&#xff09;来传递数据。 2. 业务角度&#xff1a;API…

前端input上传文件 使用new FormData()同时上传文件类型和JSON数据

失败案例 async uploadFileHandler(e) {if (e.target.files.length) {const files e.target.files[0];let formData new FormData();formData.append("file", files);formData.append("module", "knowledge");fileupload(formData).then(res …

JVM探究

JVM探究 请你谈谈你对JVM的理解&#xff1f;java -> class -> jvm java 8虚拟机和之前的变化更新OOM 内存溢出。栈溢出 StackOverFlowError > 怎么分析JVM的常用调优参数 &#xff1f; 扩大内存内存快照如何抓取&#xff0c;怎么分析Dump文件&#xff1f;知道吗&…

SAP 生产订单中计划成本问题简介

最近财务在月结的时候,发现有生产订单结算的时候有物料不存在计划成本,并且财务顾问反馈这个问题已经存在有一段时间了。通过对生产订单的成本分析按钮查看生产订单的成本 发现确实存在有物料不存在计划成本,但是生产订单存在实际成本。 1、首先想到的是无计划成本的原材料…

C语言易错知识点:scanf函数

scanf在C语言学习中比较常用&#xff0c;但因为其涉及屏幕缓冲区导致有的时候会调入陷阱&#xff0c;下面分享一下常见的需要注意的事项&#xff1a; 1.输入末尾带有回车\n 当我们输入数据后&#xff0c;最后按下回车时&#xff0c;屏幕缓冲区的末尾都会含有这个字符 scanf的…

leetcode110.平衡二叉树

之前没有通过的样例 return语句只写了一个 return abs(l-r)<1缺少了 isBalanced(root->left)&&isBalanced(root->right);补上就好了 class Solution { public:bool isBalanced(TreeNode* root) {if(!root){return true;}int lgetHeight(root->left);i…

(学习日记)2024.03.11:UCOSIII第十三节:使用优先级的流程 (持续更新)

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…