Android_Media:截屏

来源:互联网 发布:python求最大公约数包 编辑:程序博客网 时间:2024/05/18 13:30

MediaProjection + VirtualDisplay

这里写图片描述 这里写图片描述

有关的类
- MediaProjectionManager
- MediaProjection
- VirtualDisplay
- SurfaceView
- Sruface

MediaProjectionManager是个系统级服务,同TelephoneManager一样,通过getSystemService()方法获取;
MediaProjection 实现截屏和录屏的类
VirtualDisplay显示截屏

用SurfaceView来显示,

获取Surface

SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);Surface surface = surfaceView.getHolder().getSurface();

获取DPI

DisplayMetrics metrics = new DisplayMetrics();getWindowManager().getDefaultDisplay().getMetrics(metrics);int ensityDpi = metrics.densityDpi;

获取MediaProjectionManager

MediaProjectionManager mediaManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);

分“开始”+“结束”选项
开始的代码见下方,if else判断逻辑还没搞懂,先放着吧

if (surface == null) {    LogUtil.d(TAG, "surface == null");    return;}if (mediaProjection != null) {    createVirtualDisplay();} else if (mResultCode != 0 && mResultData != null) {    getMediaProjection();    createVirtualDisplay();} else {    startActivityForResult(mediaManager.createScreenCaptureIntent(), 1);//createScreenCaptureIntent() API>=21}

createVirtualDisplay()

VirtualDisplay mVirtualDisplay = mediaProjection.createVirtualDisplay("VirtualDisplay01", surfaceView.getWidth(),        surfaceView.getHeight(), densityDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);

getMediaProjection()

MediaProjection mediaProjection = mediaManager.getMediaProjection(mResultCode, mResultData);

关闭 stopScreenCapture();

关闭的是VirtualDisplay

if (mVirtualDisplay != null) {    mVirtualDisplay.release();//API>=19    mVirtualDisplay = null;}

onActivityResult()

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {    super.onActivityResult(requestCode, resultCode, data);    if (requestCode == 1) {        if (resultCode != RESULT_OK) {            LogUtil.d(TAG, "用户点击了取消");            return;        }        mResultCode = resultCode;        mResultData = data;        getMediaProjection();        createVirtualDisplay();    }}

销毁

@Overrideprotected void onPause() {    super.onPause();    if (mVirtualDisplay != null) {       mVirtualDisplay.release();//API>=19       mVirtualDisplay = null;    }}@Overrideprotected void onDestroy() {    super.onDestroy();    if (mediaProjection != null) {        mediaProjection.stop();        mediaProjection = null;    }}

其它

Demo: http://git.oschina.net/AndroidUI/ScreenCapture01
google sample:https://github.com/googlesamples/android-ScreenCapture
Android视频录制--MediaProjection

0 0