0

NDK を使用して NativeActivity アプリでAndroid 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);

ただし、OSに調整して正しく入力させるために、参照によってメトリクスjobjectをdisplay.getmetrics()関数に渡す方法がわからないため、その中のフィールドを読み取ることができます

4

1 に答える 1

1
jmethodID getMetrics = jni->GetMethodID(displayClass, "getMetrics", "(Landroid/util/DisplayMetrics;)V");
jni->CallVoidMethod(display, getMetrics, metrics);
于 2013-01-19T21:40:36.753 に答える