Android截屏工具类的使用
此截屏工具采用MediaProjectionManager类实现帧截图,截屏的结果会包含状态栏和底部虚拟按键,涉及到以下三个工具
CaptureUtil:主要负责截屏
ImageUtil:主要负责对截屏后的Bitmap的处理
ScreenUtil:主要负责截图前屏幕参数的初始化
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.PixelFormat;
import android.hardware.display.DisplayManager;
import android.media.Image;
import android.media.ImageReader;
import android.media.projection.MediaProjection;
import android.media.projection.MediaProjectionManager;
import android.widget.ImageView;
import com.alrey.robot.R;
import static com.alrey.robot.utils.ImageUtil.covetBitmap;
public class CaptureUtil {
private static CaptureUtil instance;
private static MediaProjection sMediaProjection;
private static Bitmap bitmapVertical;
private static ImageReader imageReaderVertical;
private static Bitmap bitmapHorizontal;
private static ImageReader imageReaderHorizontal;
public static CaptureUtil getInstance() {
if (instance == null){
synchronized (CaptureUtil.class){
if (instance == null){
instance = new CaptureUtil();
}
}
}
return instance;
}
@SuppressLint("WrongConstant")
public void init(MediaProjectionManager manager,int resultCode, Intent data){
sMediaProjection = manager.getMediaProjection(resultCode, data);
if (ScreenUtil.getInstance().isVertical()){
//竖屏模式下的截屏初始化
imageReaderVertical = ImageReader.newInstance(ScreenUtil.getInstance().getScreenWidth(), ScreenUtil.getInstance().getScreenHeight(), PixelFormat.RGBA_8888, 2);
sMediaProjection.createVirtualDisplay("VerticalScreenShot",
ScreenUtil.getInstance().getScreenWidth(),
ScreenUtil.getInstance().getScreenHeight(),
ScreenUtil.getInstance().getDpi(),
DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY | DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC,
imageReaderVertical.getSurface(), null, null);
}else {
//横屏模式下的截屏初始化
imageReaderHorizontal = ImageReader.newInstance(ScreenUtil.getInstance().getScreenWidth()