package com.example.tyxiong.myapplication;
import android.app.Activity;
import android.content.Intent;
import android.hardware.display.DisplayManager;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.Toast;
/*
*Android5.0新增了MediaProjectManager管理器,可方便的实现屏幕捕捉.
* 使用步骤分为4步:
* 1 获取MediaProjectManager对象. getSystemService()
* 2 实例方法createSreenCaptureIntent()创建Intent(屏幕捕捉意图)
* 3 以startActivityForResult()方法启动Intent
* 4 重写onActivityForResult()方法获取组件的执行结果,方法中通过MediaProjectManager对象获取返回的MediaProjection对象(从该对象中取出捕获的图像createVirtual())
* */
public class MainActivity extends Activity {
private static final int REQUEST_CODE = 0X11;
private Surface surface;
MediaProjection project;
MediaProjectionManager manager;
private int width;
private int height;
private int dpi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
height = getWindowManager().getDefaultDisplay().getHeight();
width = getWindowManager().getDefaultDisplay().getWidth();
DisplayMetrics metrics = new DisplayMetrics();//描述显示器的一般信息..
getWindowManager().getDefaultDisplay().getMetrics(metrics);
dpi = metrics.densityDpi;//英寸点数
manager = (MediaProjectionManager) getSystemService(MEDIA_PROJECTION_SERVICE);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
surface = holder.getSurface();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
}
public void click(View view) {
Intent intent = manager.createScreenCaptureIntent();
startActivityForResult(intent, REQUEST_CODE);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CODE) {
if (resultCode != RESULT_OK) {
Toast.makeText(MainActivity.this, "refused>>>", Toast.LENGTH_SHORT).show();
} else {
project = manager.getMediaProjection(resultCode, data);
project.createVirtualDisplay("capture", width, height, dpi, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, surface, null, null);
}
}
}
}
Android5.0新增MediaProjectManager屏幕捕捉
最新推荐文章于 2024-07-21 20:34:57 发布