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