一、截取DecorView,但不能截取视频图片;
private Bitmap takeScreenShot(Activity activity) {
View view = activity.getWindow().getDecorView();
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bitmap = view.getDrawingCache();
Rect frame = new Rect();
view.getWindowVisibleDisplayFrame(frame);
int statusBarHeight = frame.top;
int width = activity.getWindowManager().getDefaultDisplay().getWidth();
int height = activity.getWindowManager().getDefaultDisplay()
.getHeight();
Bitmap b = Bitmap.createBitmap(bitmap, 0, statusBarHeight, width,
height - statusBarHeight);
view.destroyDrawingCache();
return b;
}
二、该命令读取系统的framebuffer,需要获得系统权限,否则只会生成0b的图:
(1). 在AndroidManifest.xml文件中添加< uses-permission android:name = "android.permission.READ_FRAME_BUFFER" />(2). 修改APK为系统权限,将APK放到源码中编译, 修改Android.mkLOCAL_CERTIFICATE := platform
String cmd = "screencap -p /sdcard/screenshot.png";
Runtime runtime = Runtime.getRuntime();
try {
runtime.exec(cmd);
} catch (IOException e) {
e.printStackTrace();
}
可在控制台直接使用 adb shell screencap -p /sdcard/screenshot.png