在root设备上的Android屏幕截图

时间:2013-07-18 06:58:12

标签: android screenshot rooted-device

有根设备上的屏幕截图 我想捕获使用APK生成的Android设备的屏幕。 我试过了

process = Runtime.getRuntime().exec("/system/bin/screencap -p " + path + ”/file.png ”);

这个命令运行正常,但速度太慢了。 然后我尝试使用第二个选项

View content = findViewById(android.R.id.content).getRootView();
content.setDrawingCacheEnabled(true);
Bitmap bitmap = Bitmap.createBitmap(content.getDrawingCache());
OutputStream fout = null;
File imageFile = new File(_path,"ScreenImage.png");
try {
    fout = new FileOutputStream(imageFile);
    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
    fout.flush();
    fout.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

但是在这里,我正在查看我的应用程序而非当前屏幕。 我是捕捉屏幕截图制作视频,我使用FB0制作视频,但问题是以每秒8帧的速度捕捉屏幕

请建议加速此过程的解决方案。分辨率不是问题,可能质量很差。

2 个答案:

答案 0 :(得分:1)

由于您的设备已植根,请查看framework hide api SurfaceControl的截屏方法。没有测试它是否足够快。

public static Bitmap screenshot(int width, int height) {
    // TODO: should take the display as a parameter
    IBinder displayToken = SurfaceControl.getBuiltInDisplay(
            SurfaceControl.BUILT_IN_DISPLAY_ID_MAIN);
    return nativeScreenshot(displayToken, width, height, 0, 0, true);
}

截屏的正常步骤是拦截PhoneWindowManager中的屏幕截图组合键,然后连接到systemui中的截屏服务,此服务将调用SurfaceControl.screenshot方法截取屏幕截图。

答案 1 :(得分:-1)