有没有办法本机访问Android DPI,而不使用JNI?

时间:2012-07-23 11:05:49

标签: android opengl-es android-ndk dpi

我的Android游戏使用OpenGL和Android NDK。我目前通过从我的Activity / GLSurfaceView进行JNI本机调用,将必要的dpi值作为参数传递。

目前我正在使用:

    // request an instance of DisplayMetrics, say 'dm' from android.
    float densityFactor = dm.density;

    // pass this as a parameter using JNI call
    myCustomNativeMethod(densityFactor); # implementation in a 'game.c' file

我只是想知道是否可以访问android环境参数而不使用JNI来接收它们(参数)。可能是这样,导入一些低级NDK头文件(.h),这将帮助我直接与UI系统进行通信等等?

我的意思是:

    #import <android_displayparams.h>
    ...        
    float densityfactor = getDisplayParamDensity(); // <- Is this possible?

注意:这是一个好奇的问题,我知道这样的机制可能不是一个好习惯。

1 个答案:

答案 0 :(得分:3)

使用Java Activity / GLSurfaceView进行设置,将DPI作为参数传递为最佳解决方案。

如果您使用NativeActivity,可以使用以下内容获取DisplayMetrics.densityDpi

#include <android/configuration.h>
#include <android_native_app_glue.h>
#include <android/native_activity.h>

int32_t getDensityDpi(android_app* app) {
    AConfiguration* config = AConfiguration_new();
    AConfiguration_fromAssetManager(config, app->activity->assetManager);
    int32_t density = AConfiguration_getDensity(config);
    AConfiguration_delete(config);
    return density;
}

不幸的是,没有API可以获取DisplayMetrics.xdpi和DisplayMetrics.ydpi。