4

植根设备上的屏幕截图我想捕获使用 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 帧的速度捕获屏幕

请提出加快此过程的解决方案。分辨率不是问题,它可能质量很差。

4

2 回答 2

1

既然你的设备已经root了,看看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方法进行截图。

于 2014-12-20T16:06:28.593 回答