1

在android中是否可以在本机代码中获取显示尺寸?

我看到有EGL相关的功能:

EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);

surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);

eglQuerySurface(display, surface, EGL_WIDTH, &w);

eglQuerySurface(display, surface, EGL_HEIGHT, &h);

但我需要维度而不创建任何表面。

4

3 回答 3

4

APP_CMD_INIT_WINDOW您可以在本机活动中像这样处理“应用程序命令”时获取窗口大小:

static void engine_handle_cmd(struct android_app* app, int32_t cmd) {
    struct engine* engine = (struct engine*)app->userData;
    switch (cmd) {
    case APP_CMD_INIT_WINDOW:
        if (engine->app->window != NULL) {
            int width = ANativeWindow_getWidth(engine->app->window);
            int height = ANativeWindow_getHeight(engine->app->window);
        }

如果您想知道如何设置结构和回调main.c,请查看示例 NDK 项目。native-activityengineengine_handle_cmd

于 2014-06-05T17:56:07.760 回答
0

下面是从谷歌来源截屏的相关代码http://code.google.com/p/androidscreenshot/source/browse/trunk/Binary/screenshot.c?r=3

vinfo 结构包含字段 xres 和 yres。

int framebufferHandle = -1;

struct fb_var_screeninfo vinfo;
framebufferHandle = open("/dev/graphics/fb0", O_RDONLY);
if(framebufferHandle < 0) 
{
    printf("failed to open /dev/graphics/fb0\n");
    // handle error
}

if(ioctl(framebufferHandle, FBIOGET_VSCREENINFO, &vinfo) < 0) 
{
    printf("failed to open ioctl\n");
    // handle error
}
fcntl(framebufferHandle, F_SETFD, FD_CLOEXEC);
于 2013-10-31T05:48:44.460 回答
-1

如果您正在寻找像素值 height_pixels 和 width_pixels 是您正在寻找的问题。有关更多信息,请参阅开发者文档:

http://developer.android.com/reference/android/util/DisplayMetrics.html

于 2013-01-17T10:59:50.910 回答