ITPub博客

首页 > 移动开发 > ANDROID > android通过MediaProjection获取屏幕内容

android通过MediaProjection获取屏幕内容

原创 ANDROID 作者:山有木xi 时间:2020-12-06 18:21:27 0 删除 编辑

在android5.0之后,android官方提供了截取屏幕的新手段,那就是MediaProjection,它是一个准许应用拥有截取屏幕内容以及记录系统音频的功能

其使用方法大致可以分为:

  • 获取MediaProjection的实例

private val mediaProjectionManager by lazy { fa.activity?.getSystemService(Context.MEDIA_PROJECTION_SERVICE) as? MediaProjectionManager }

(by lazy可以让我们在需要使用到的时候再初始化)

  • 通过MediaProjection的管理类 MediaProjectionManager的createVirtualDisplay创建 VirtualDisplay

virtualDisplay = mediaProjection?.createVirtualDisplay(
    "Name", width, height, displayMetrics.densityDpi,
    DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null
)
  • 将VirtualDisplay当做一个 虚拟的呈现器

  • 用 VirtualDisplay捕获屏幕的内容

  • 将捕捉到的内容渲染到surface上面

  • 通过MediaRecord封装成MP4文件

mediaRecorder?.start()

(mediarecord开始记录)

在最后结束并保存完文件后,要记得将mediarecord关闭

需要注意的是,mediarecord的关闭需要先stop再reset,否则在运行的时候就会报异常

而如果想要录制环境音,在setaudiosource中可以设置

setAudioSource(MediaRecorder.AudioSource.MIC)

这个时候,其实想到一个需求,就是用户可能回想着在录制视频的时候直接添加背景音乐,而直接添加音乐会使环境音和背景音乐重叠,那么,一个较好的解决方案就是,剥离环境音再将背景音乐和没有音频的视频文件合并处理

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917874/viewspace-2739831/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: Android中的悬浮框
请登录后发表评论 登录
全部评论
Oracle OCA(Java),IBM高级工程师认证,中国软件行业人才(高级c语言),高级Android工程师,对数据库并发与性能调优也有一定了解

注册时间:2019-04-25

  • 博文量
    147
  • 访问量
    390787