2013-01-19 36 views
0

我试图让Android DisplayMetrics类中使用NDK一个NativeActivity的应用程序。我想调用的函数是在这些线路的:通过JNI(安卓NDK)传递由C到Java对象(DisplayMetrics)

DisplayMetrics metrics = new DisplayMetrics(); 
WindowManager wm = this.getWindowManager(); 
Display display = wm.getDefaultDisplay(); 
display.getMetrics(metrics); 

到目前为止,我已经得到了目标设置和方法调用准备如下

JNIEnv *jni; 
state->activity->vm->AttachCurrentThread(&jni, NULL); 
jclass activityClass = jni->FindClass("android/app/NativeActivity"); 
jclass windowManagerClass = jni->FindClass("android/view/WindowManager"); 
jclass displayClass = jni->FindClass("android/view/Display"); 
jclass displayMetricsClass = jni->FindClass("android/util/DisplayMetrics"); 

jmethodID getWindowManager = jni->GetMethodID(activityClass, "getWindowManager", "()Landroid/view/WindowManager;"); 
jmethodID getDefaultDisplay = jni->GetMethodID(windowManagerClass, "getDefaultDisplay", "()Landroid/view/Display;"); 
jmethodID getMetrics = jni->GetMethodID(displayClass, "getMetrics", "(android/util/DisplayMetrics)L;"); 
jmethodID newDisplayMetrics = jni->GetMethodID(displayMetricsClass, "DisplayMetrics", "()Landroid/util/DisplayMetrics;"); 

jobject metrics = jni->CallObjectMethod(displayMetricsClass, newDisplayMetrics); 
jobject windowManager = jni->CallObjectMethod(state->activity->clazz, getWindowManager); 
jobject display = jni->CallObjectMethod(windowManager, getDefaultDisplay); 

不过,现在我不知道知道如何通过引用将度量jobject传递给display.getmetrics()函数以便操作系统调整它并正确填充它,以便我可以读取其中的字段

回答

1
jmethodID getMetrics = jni->GetMethodID(displayClass, "getMetrics", "(Landroid/util/DisplayMetrics;)V"); 
jni->CallVoidMethod(display, getMetrics, metrics);