如何在我的Android应用程序中使用ScreenShotClient

时间:2012-09-24 07:56:36

标签: android android-ndk java-native-interface screenshot

我正在开发一个应用程序,帮助用户捕获Android屏幕截图(Android 4.x)。我知道在ICS上破坏了framebuffer。我听说我们可以使用ScreenShotClient执行此操作,如下所示。

ScreenshotClient screenshotClient = new ScreenshotClient();
screenshotClient->update();

但是,我必须导入哪些库来使用它?是否可以在jni代码下使用?

1 个答案:

答案 0 :(得分:7)

您需要的库名为 libsurfaceflinger_client.so 。您可以使用命令

从运行Gingerbread 或更高版本的Android的任何设备中取出它
adb pull /system/lib/libsurfaceflinger_client.so

在ICS或JB上,班级 ScreenshotClient libgui.so的一部分。 screencap的makefile是使用 ScreenshotClient 的示例,表明链接器可能需要其他库:

libcutils libutils libbinder libskia libui libgui

此外,screencap.cpp的代码如下:

ScreenshotClient screenshot;
if (screenshot.update() == NO_ERROR) {
    base = screenshot.getPixels();
    w = screenshot.getWidth();
    h = screenshot.getHeight();
    f = screenshot.getFormat();
    size = screenshot.getSize();
} else {
    const char* fbpath = "/dev/graphics/fb0";
    int fb = open(fbpath, O_RDONLY);
    if (fb >= 0) {
        struct fb_var_screeninfo vinfo;
        if (ioctl(fb, FBIOGET_VSCREENINFO, &vinfo) == 0) {
...

这意味着至少你必须检查update()是否成功。很遗憾,除非设备已植根,否则无法授予应用从/dev/graphics/fb0进行阅读的权限,并使用/system/bin/screencap/system/bin/screenshot的后备。