Android 5.0 屏幕录制/截屏

Android 5.0之后的新API,平时很少用到这里记录下

1. 获取系统服务

        mMediaProjectionManager = (MediaProjectionManager) getSystemService(
                Context.MEDIA_PROJECTION_SERVICE);
        if (mMediaProjectionManager != null) {
            startActivityForResult(mMediaProjectionManager.createScreenCaptureIntent(),
                    200);
        }
复制代码

2. onActivityResult中获取MediaProjection

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 200) {
            mMediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data);
        }
    }
复制代码

3.开始录制

    private void startCapture() {
        mMediaProjection.createVirtualDisplay(
                "screen-mirror",
                mSurfaceView.getWidth(),
                mSurfaceView.getHeight(),
                Resources.getSystem().getDisplayMetrics().densityDpi,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mSurfaceView.getHolder().getSurface(),
                null,
                null);
    }
复制代码

4.截屏

  1. 如果取余截屏的话我们要使用到ImageReader这个类,调用createVirtualDisplay:
    private void startCapture() {
        mImageReader = ImageReader.newInstance(mWindowWidth, mWindowHeight,
                PixelFormat.RGBA_8888, 2);
        mMediaProjection.createVirtualDisplay(
                "screen-mirror",
                mWindowWidth,
                mWindowHeight,
                mScreenDensity,
                DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,
                mImageReader.getSurface(),
                null,
                null);
    }
复制代码
  1. 截取Bitmap
    private Bitmap screenshot() {
        Image image = mImageReader.acquireLatestImage();
        int width = image.getWidth();
        int height = image.getHeight();
        Image.Plane[] planes = image.getPlanes();
        ByteBuffer buffer = planes[0].getBuffer();
        int pixelStride = planes[0].getPixelStride();
        int rowStride = planes[0].getRowStride();
        int rowPadding = rowStride - pixelStride * width
        Bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride,
                height, Bitmap.Config.ARGB_8888);
        bitmap.copyPixelsFromBuffer(buffer);
        bitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height);
        image.close();
        return bitmap;
    }
复制代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值