一、截取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.mk
LOCAL_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