跳至主要内容

Android screenShot功能的实现

谷歌就是Android5.0版本时候发放了现在的这个接口android.media.projection.MediaProjection。使用该接口,第三方应用程序无需获取系统root权限也可以直接进行屏幕截图操作了。查询其官方api可知,该接口主要用来“屏幕截图”操作和“音频录制”操作。好吧,直接上干货吧。
一、使用方法。
首先用参数MEDIA_-PROJECTION_SERVICE调 用Context.getSystemService(),得到MediaProjectionManager类别实例;
其次,调用 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等格式来进行录屏,实在是简单又好用了

评论

此博客中的热门博文

android hide actionbar

public class MainActivity extends Activity { ActionBar actionBar; //声明ActionBar @Override protected void onCreate( Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView( R .layout.activity_main); actionBar = getSupportActionBar(); //得 到ActionBar actionBar.hide(); //隐藏ActionBar } }

go url encoding

func  QueryUnescape func QueryUnescape (s string ) ( string , error ) QueryUnescape does the inverse transformation of QueryEscape, converting %AB into the byte 0xAB and '+' into ' ' (space). It returns an error if any % is not followed by two hexadecimal digits. func  QueryUnescape func QueryUnescape (s string ) ( string , error ) QueryUnescape does the inverse transformation of QueryEscape, converting %AB into the byte 0xAB and '+' into ' ' (space). It returns an error if any % is not followed by two hexadecimal digits.