java - android 通过C获取屏幕尺寸

标签 java android android-ndk

我想通过c获取屏幕尺寸。我知道jni支持从c调用java。但有谁知道另一种方法吗?我的意思是从低级模块获取屏幕大小而不调用 java。

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity
{

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
    super.onCreate(savedInstanceState);
    Log.v("getWidth", Integer.toString(getWindowManager().getDefaultDisplay().getWidth()));
    Log.v("getHeight", Integer.toString(getWindowManager().getDefaultDisplay().getHeight()));
    }
}

我认为/dev/graphics 与我的问题有关

最佳答案

是的,您可以从/dev/graphics/fb0 获取屏幕分辨率,但是(至少在我的手机上),读取访问权限仅限于 root 和“graphics”组中的用户。无论如何,您可以执行以下操作(为了清楚起见,删除了错误检查):

// ... other standard includes ...
#include <sys/ioctl.h>
#include <linux/fb.h>

//...

struct fb_var_screeninfo fb_var;
int fd = open("/dev/graphics/fb0", O_RDONLY);
ioctl(fd, FBIOGET_VSCREENINFO, &fb_var);
close(fd);
// screen size will be in fb_var.xres and fb_var.yres

我不确定这些是否被视为“公共(public)”NDK 接口(interface),因为我不知道 Google 是否认为“Android 在 Linux 上运行并使用 Linux Framebuffer 接口(interface)”是公共(public) API 的一部分,但它看起来确实有效。

如果您确实想确保它是可移植的,您可能应该有一个调用 Java WindowManager API 的 JNI 后备。

关于java - android 通过C获取屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18690130/

相关文章:

java - 如何在 Java 中计算某人的年龄?

java - GWT 远程过程调用 : Use same DB connection across multiple requests

java - Android AlertDialog 如何在显示之前禁用按钮?

JavaScript visibilitchange 事件不会在移动 Chrome 上触发

android-ndk - 无法将库从 Windows 交叉编译到 Android

java - SSL 通信 Java

android - Android Studio Gradle项目同步已完成,但出现错误

android - 如何设置 MediaRouter 对话框标题的样式?

android - Android 上有类似 Linux free 命令的东西吗?

android-ndk - Android 的 LinPhone 构建过程