5

我的 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

我只是想知道是否可以在不使用 JNI 接收它们(参数)的情况下访问 android 环境参数。可能就像,导入一些低级 NDK 头文件(.h),这将帮助我直接与 UI 系统通信或什么?

我的意思是:

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

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

4

1 回答 1

4

使用 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;
}

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

于 2015-01-10T21:33:12.837 回答