我的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?
注意:这是一个好奇的问题,我知道这样的机制可能不是一个好习惯。
答案 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。