2012-07-23 1 views
4

내 안드로이드 게임은 OpenGL과 Android NDK를 사용합니다. 현재 Activity/GLSurfaceView에서 JNI 네이티브 호출을 만들어 필요한 dpi 값을 매개 변수로 전달하고 있습니다.JNI를 사용하지 않고 안드로이드 DPI에 네이티브 액세스하는 방법이 있습니까?

현재 내가 사용하고 하나는 그들 (매개 변수)를받을 수 JNI를 사용하지 않고 안드로이드 환경 변수에 액세스 할 수 있는지 난 그냥 궁금 해서요

// 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 

. 아마도 UI 시스템이나 다른 것과 직접 통신하는 데 도움이되는 저수준 NDK 헤더 파일 (.h)을 가져 오는 것과 같을 수 있습니까?

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

참고 :이 호기심 질문, 그리고 나는 이러한 메커니즘은 좋은 연습을하지 않을 수 있음을 알고

내가 좋아하는 것을 의미한다.

+0

답장을 보내주십시오. http://stackoverflow.com/q/7594527/517561 – Sparky

+0

@ 스패키 : 나는 두려워하지 않습니다. 적절한 값에 액세스하기 위해 DisplayMatrics 클래스를 알고 있습니다. 같은 것을 액세스하는 고유 한 방법이 있는지 알고 싶었습니다. 감사! –

+0

나는 약간의 질문을 개선했다. –

답변

3

자바 액티비티/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가 없다.