谷歌就是Android5.0版本时候发放了现在的这个接口android.media.projection.MediaProjection。使用该接口,第三方应用程序无需获取系统root权限也可以直接进行屏幕截图操作了。查询其官方api可知,该接口主要用来“屏幕截图”操作和“音频录制”操作。好吧,直接上干货吧。
一、使用方法。
首先用参数MEDIA_-PROJECTION_SERVICE调 用Context.getSystemService(),得到MediaProjectionManager类别实例;
其次,调用 createScreenCaptureIntent ()得到一个Intent;再次,使用startActivityForResult()启动屏幕捕捉;
最后,将结果返回到 getMediaProjection()上,获取捕捉数据。
其次,调用 createScreenCaptureIntent ()得到一个Intent;再次,使用startActivityForResult()启动屏幕捕捉;
最后,将结果返回到 getMediaProjection()上,获取捕捉数据。
二、Demo案例。
1.导入接口
import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionManager;2.实例化MediaProjectionManager
mMediaProjectionManager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);3.利用MediaProjectionManager类实例的功能函数createScreenCaptureIntent()生成intent,为接下来的的抓取屏幕做准备
Intent captureIntent = mMediaProjectionManager.createScreenCaptureIntent(); startActivityForResult(captureIntent, REQUEST_CODE);4.在onActivityResult()中获取返回值
protected void onActivityResult(int requestCode, int resultCode, Intent data) { MediaProjection mediaProjection = mMediaProjectionManager.getMediaProjection(resultCode, data); if (mediaProjection == null) { Log.e("@@", "media projection is null"); return; }5.实例化VirtualDisplay,这个类的主要作用是用来获取屏幕信息并保存在里。
private VirtualDisplay mVirtualDisplay;
mVirtualDisplay = mMediaProjection.createVirtualDisplay(TAG + "-display", mWidth, mHeight, mDpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC, mSurface, null, null);6.保存图片。目前的图片信息保留在mSurface里,建立一个Image获取信息保存在BufferByte里再保存在一个bitmap里即可。
如此一来,整个截屏就变得简单多了。而且还可以使用Mediacodec编码,MediaMuxer封装转为MP4等格式来进行录屏,实在是简单又好用了
评论
发表评论