1、先获取 MediaProjectionManager
projectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
2、创建Intent 启动Intent (startActivityForResult使用有回调的)
Intent captureIntent = projectionManager.createScreenCaptureIntent();
startActivityForResult(captureIntent, RECORD_REQUEST_CODE);
3、 获取 MediaProjection
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == RECORD_REQUEST_CODE && resultCode == RESULT_OK) { mediaProjection = projectionManager.getMediaProjection(resultCode, data); }}4、 MediaRecorder 的初始化工作 使用MediaRecorder进行视频录制存储
mediaRecorder = new MediaRecorder();mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); String rootDir = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "ScreenRecord" + "/";mediaRecorder.setOutputFile(rootDir + System.currentTimeMillis() + ".mp4");mediaRecorder.setVideoSize(width, height);mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);mediaRecorder.setVideoEncodingBitRate(5 * 1024 * 1024);mediaRecorder.setVideoFrameRate(30);try { mediaRecorder.prepare();} catch (IOException e) { e.printStackTrace();}
5、设置VirtualDisplay 将图像和展示的View关联起来。一般来说我们会将图像展示到SurfaceView,MediaRecorder 已经内置了SurfaceView。
virtualDisplay = mediaProjection.createVirtualDisplay("MainScreen", width, height, dpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mediaRecorder.getSurface(), null, null);6、结束录制,释放资源
mediaRecorder.stop();mediaRecorder.reset();virtualDisplay.release();mediaProjection.stop();参考 : GitHub - glt/ScreenRecorder: Android 5.0+ 屏幕录制