Android之MediaProjection的简介

Android之MediaProjection的简介

转载链接:http://blog.csdn.net/qq_16628781/article/details/61953081

知识点:

1、MediaProjection简介;

2、MediaProjection方法简介;

3、新名词记录{

VirtualDisplay:详情请看这里 http://blog.csdn.net/qq_16628781/article/details/62038163

MediaProjectionManager:MediaProjection的管理类

}

MediaProjection是一个5.0之后给开发者提供的新的截屏或者录屏的新手段。MediaProjection可以用来捕捉屏幕,而MediaProjectionManager可以从命名上面来看到,它是是用来管理MediaProjection的。

MediaProjection是一个准许APP拥有截取屏幕或者是记录系统音频的能力。还有其他的能力依据MediaProjection的类型。通过MediaProjectionManager 类的 createScreenCaptureIntent()方法来开启,可以用来截取屏幕,但是不能够获取系统的音频。

下面是类下面的公共方法说明,这个类的公共方法并不多,也很容易理解;

公共方法1:

VirtualDisplay createVirtualDisplay (String name, 
                int width, 
                int height, 
                int dpi, 
                int flags, 
                Surface surface, 
                VirtualDisplay.Callback callback, 
                Handler handler)
创建一个屏幕的截图,保存在VirtualDisplay中,并返回。
参数1:实际的流媒体显示实体名字,不能为null;
参数2:实际的流媒体显示实体的宽度,单位为像素,必须大于0;
参数3:实际的流媒体显示实体的高度,单位为像素,必须大于0;
参数4:实际的流媒体显示实体的像素密度,单位为dp,必须大于0;
参数5:实际的流媒体显示实体标志的结合,更多请查看 DisplayManager里头的标志,取值是{VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR,VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY,VIRTUAL_DISPLAY_FLAG_PRESENTATION,
VIRTUAL_DISPLAY_FLAG_PUBLIC,
VIRTUAL_DISPLAY_FLAG_SECURE}中的一个
参数6:播放流媒体的surface实例,可为null,如果木有;
参数7:实际的流媒体显示实体状态改变时的回调方法,可能为null;
参数8:调用参数7回调方法的handler;
返回VirtualDisplay实例,具体请查看VirtualDisplay类;

公共方法2:

此方法是注册监听流媒体显示实体状态改变时的回调方法。参数请参照createVirtualDisplay()方法的参数7参数8;

void registerCallback (MediaProjection.Callback callback, 
                Handler handler)

公共方法3:

void unregisterCallback (MediaProjection.Callback callback)

顾名思义:这个方法是注销对流媒体状态改变的监听。

公共方法4:

void stop ()

此方法是停止截屏的方法;


翻译的不到位,敬请谅解;

我会持续的更新,以求达到最好的解释和理解;

具体使用方法,以后会出一个文章来讲解;



  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AndroidMediaProjection API 提供了一种截屏的方式,这个 API 可以让你截取当前屏幕上的任何内容,包括视频和游戏等动态内容。下面是一个使用 MediaProjection API 截图的示例: 首先,你需要在你的 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> ``` 接下来,创建一个名为 MediaProjectionManager 的类来获取 MediaProjection 对象: ```java MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE); Intent permissionIntent = mediaProjectionManager.createScreenCaptureIntent(); startActivityForResult(permissionIntent, REQUEST_CODE); ``` 然后,在 onActivityResult() 方法中获取 MediaProjection 对象: ```java @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) { if (resultCode == RESULT_OK) { MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data); startCapture(mediaProjection); } } } ``` 最后,使用 MediaProjection 对象来截屏: ```java private void startCapture(MediaProjection mediaProjection) { ImageReader imageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 2); VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay("ScreenCapture", width, height, density, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, imageReader.getSurface(), null, null); imageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() { @Override public void onImageAvailable(ImageReader reader) { Image image = null; Bitmap bitmap = null; try { image = imageReader.acquireLatestImage(); if (image != null) { final Image.Plane[] planes = image.getPlanes(); final ByteBuffer buffer = planes[0].getBuffer(); int pixelStride = planes[0].getPixelStride(); int rowStride = planes[0].getRowStride(); int rowPadding = rowStride - pixelStride * width; // Create bitmap bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height, Bitmap.Config.ARGB_8888); bitmap.copyPixelsFromBuffer(buffer); // Save bitmap saveBitmap(bitmap); } } catch (Exception e) { e.printStackTrace(); } finally { if (image != null) { image.close(); } if (bitmap != null) { bitmap.recycle(); } } } }, null); } ``` 在这个示例中,我们使用了 ImageReader 类来获取屏幕截图图像,并将其转换成 Bitmap 对象。然后,我们可以将 Bitmap 对象保存到文件系统中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值