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

How to use ScreenShotClient in my android application(如何在我的 android 应用程序中使用 ScreenShotClient)
本文介绍了如何在我的 android 应用程序中使用 ScreenShotClient的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

I am developing an application which helps user to capture android screen shot (Android 4.x) . I know that framebuffer is broken on android ICS. I hear that we can use ScreenShotClient to do this as below.

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

But, what library I have to import to use it? Is it available to use under jni code?

解决方案

The library you need is called libsurfaceflinger_client.so. You can pull it from any device running Gingerbread or higher version of Android, with command

adb pull /system/lib/libsurfaceflinger_client.so

On ICS or JB, class ScreenshotClient is part of libgui.so. The makefile for screencap which is the example of using ScreenshotClient, suggests that linker may need other libraries:

libcutils libutils libbinder libskia libui libgui

Also, the code of screencap.cpp goes as follows:

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) {
...

This means that at least you must check that update() succeed. Unfortunately, unless teh device is rooted, the apps cannot be granted permission to read from /dev/graphics/fb0 and use the fallback of /system/bin/screencap or /system/bin/screenshot.

这篇关于如何在我的 android 应用程序中使用 ScreenShotClient的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)