自己实现了Android的屏幕录制App。

用了MediaProjection类来作为源,MediaRecoder来捕捉,编码转换为本地视频。

效果图:

主要是这段代码开始录像:

startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);//开始录像

录像结束后在回调函数中处理:

protected void onActivityResult(int requestCode, intresultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);if (requestCode !=REQUEST_CODE) {

Log.e(TAG,"Unknown request code:" +requestCode);return;

}if (resultCode !=RESULT_OK) {

Toast.makeText(this,"Screen Cast Permission Denied", Toast.LENGTH_SHORT).show();

mToggleButton.setChecked(false);return;

}//应用最小化 后台运行

Intent intent = newIntent(Intent.ACTION_MAIN);

intent.addCategory(Intent.CATEGORY_HOME);

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

mMediaProjectionCallback= new MediaProjectionCallback();//回调类

mMediaProjection =mProjectionManager.getMediaProjection(resultCode, data);

mMediaProjection.registerCallback(mMediaProjectionCallback,null);//注册回调类

mVirtualDisplay =createVirtualDisplay();

mMediaRecorder.start();

}

回调处理的事情其实就是将录像的类全都关闭释放:

private classMediaProjectionCallback extends MediaProjection.Callback {

@Overridepublic voidonStop() {if(mToggleButton.isChecked()) {

mToggleButton.setChecked(false);

mMediaRecorder.stop();

mMediaRecorder.reset();

Log.v(TAG,"Recording Stopped");

}

mMediaProjection= null;

stopScreenSharing();

}

}

createVirtualDisplay()是我们自己定义的

/*参数说明:

* 第一个参数:虚拟画面名称

* 第二个参数:虚拟画面的宽度

* 第三个参数:虚拟画面的高度

* 第四个参数:虚拟画面的标志

* 第五个参数:虚拟画面输出的Surface

* 第六个参数:虚拟画面回调接口

其中最重要的就是第五个参数,录制画面输出的地方,他这里介绍的是一个Surface类型,那么我们如果想操作录制之后的视频数据,就需要创建一个Surface类型即可。

1、如果想截屏,那么可以使用ImageReader类的getSurface方法获取

2、如果想录制视频进行编码,可以使用MediaRecorder类的getSurface方法获取*/

privateVirtualDisplay createVirtualDisplay() {return mMediaProjection.createVirtualDisplay("MainActivity",

DISPLAY_WIDTH, DISPLAY_HEIGHT, mScreenDensity,

DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,/*surface是mediaRecorder的,以mediaprojection为源输出到surface,捕获*/mMediaRecorder.getSurface(),null /*Callbacks*/, null

/*Handler*/);

}

弄完之后我们跳到另一个Activity,显示录制完的视频的缩略图,并添加分享播放和重新录制功能。

显示视频缩略图:

publicBitmap getVideoThumbnail(String filePath) {

Bitmap bitmap= null;

MediaMetadataRetriever retriever= newMediaMetadataRetriever();try{

retriever.setDataSource(filePath);

bitmap=retriever.getFrameAtTime();

}catch(IllegalArgumentException e) {

e.printStackTrace();

}catch(RuntimeException e) {

e.printStackTrace();

}finally{try{

retriever.release();

}catch(RuntimeException e) {

e.printStackTrace();

}

}returnbitmap;

}

播放:

Intent intent = newIntent();

intent.setAction(Intent.ACTION_VIEW);//主要是这里指定了ACTION

File vedioFile= newFile(Environment

.getExternalStoragePublicDirectory(Environment

.DIRECTORY_DOWNLOADS),"/video.mp4");

Uri uri=Uri.parse(vedioFile.getAbsolutePath());

intent.setDataAndType(uri,"video/*");

startActivity(intent);

分享:

Intent shareIntent = newIntent();

shareIntent.setAction(Intent.ACTION_SEND);

shareIntent.setType("audio/*");

File vedioFile= newFile(Environment

.getExternalStoragePublicDirectory(Environment

.DIRECTORY_DOWNLOADS),"/video.mp4");

shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(vedioFile));//设置分享列表的标题,并且每次都显示分享列表

startActivity(Intent.createChooser(shareIntent, "分享到"));

android p 录制屏幕,Android 屏幕录制相关推荐

  1. android 屏幕录制方案,Android录制屏幕的实现方法

    原文:Paul Kinlan 翻译:Agora.io 长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我们已 ...

  2. android屏幕录制功能,Android利用ADB进行屏幕录制

    前言 在写博客时,为了方便大家理解,我们经常需要把一些操作或动画录制成Gif,一般需要下载一个屏幕录制App将手机屏幕录制成视频(可能需要Root权限),然后导出到电脑,再转为Gif.今天就来教大家一 ...

  3. android屏幕 录制检测,Android 录制屏幕的实现方法

    Android 录制屏幕的实现方法,长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我们已经接近这个目标.C ...

  4. android 实现屏幕录制功能,Android实现屏幕录制功能

    本文实例为大家分享了Android实现屏幕录制功能的具体代码,供大家参考,具体内容如下 1.效果图: 2.添加依赖 dependencies { implementation fileTree(dir ...

  5. android 屏幕录制代码,Android 录制屏幕的实现方法

    长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我们已经接近这个目标.Chrome团队正在添加一种功能,可以 ...

  6. android 屏幕录制方案,Android录屏的三种解决方案

    本文总结三种用于安卓录屏的解决方案: adb shell命令screenrecord MediaRecorder, MediaProjection MediaProjection , MediaCod ...

  7. android 屏幕录制方案,Android录屏的三种方案

    本文总结三种用于安卓录屏的解决方案: adb shell命令screenrecord MediaRecorder, MediaProjection MediaProjection , MediaCod ...

  8. android Q屏幕录制,设备音频录制无声

    Android q 之后google添加了音频录制的api 在状态栏中可以开启录制功能. 使用中发现,选择音源为设备内部音频的时候,录制的视频无声. 内部音乐录制时android Q版本之后googl ...

  9. android最新屏幕视频教程,安卓怎么录制手机屏幕视频_怎么录制自己手机屏幕教程_好特教程...

    怎样能够用自己的手机录制自己手机屏幕的视频呢?安卓手机在没有其他录制设备的情况下如何录制手机屏幕上的视频呢? 1.首先我们下载安装好 录屏精灵 这软件 . 很多小伙伴可能会问,为什么我要选择这软件呢? ...

  10. android自动化测试录制,(二)屏幕录制在android自动化测试中应用2015.06.29

    在android4.4(api 19)以上增加了screenrecord,命令为adb shell screenrecord /sdcard/runCase.mp4 限制: 1)分辨率太高,可能无法直 ...

最新文章

  1. * 图形例子,函数实现体会地址传递
  2. javascript 练习(2)——js数组去重
  3. Jerry Wang 2014年在SAP社区CRM板块的积分曾经一直占据第一
  4. kernel笔记——进程调度
  5. C# 类(14) 事件
  6. Python爬虫入门一综述
  7. Cookie、token、session的区别是什么?
  8. 云服务器配置(jdk、tomcat、mysql)
  9. vivo X30新细节曝光:搭载潜望式超远摄支持双模5G
  10. sklearn学习笔记之preprocessing
  11. 物联网标准组织OCF成立 有望解决碎片化问题
  12. 2021年百度智能云服务器最新租用价格表
  13. 跑握手包需要什么显卡?|跑包显卡配置
  14. 海尔电商峰值系统架构设计最佳实践
  15. php-Study1
  16. 2021-金三银四跳槽-还愿
  17. 2021年如何选购华强北AirPods(一次翻车到下车的经历总结的经验)
  18. 浅谈a++ 与a--
  19. Sublime Text(轻量级的文本编辑类软件)
  20. 苹果app不能上架怎么办?

热门文章

  1. 寻找两个有序数组的中位数
  2. hge养成类游戏《见习小恶魔威力加强版》源代码
  3. 接口测试平台代码实现10:菜单页面升级
  4. 软件设计师备考经验分享
  5. 知乎好物推荐怎么做?普通人在家单日收入500的副业
  6. 【10月英语】——一分耕耘一分收获
  7. 如何使用计算机办公软件,如何正确使用电脑办公软件?你肯定不知道这些?
  8. 【IVI】车载设备硬件抽象层VHAL
  9. SmartMesh开发者社区招募正式启动啦
  10. 2023微信红包封面怎么自己制作(入口+步骤)