0

アプリケーションで加速度計を使用していますが、いくつかのデバイスではセンサー軸が異なります (デフォルトのデバイスの向きは縦か横かによって異なります)。AndroidMaifest.xml で:

<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="10" />
...
android:screenOrientation="portrait"

ネイティブ コードからデフォルトのデバイスの向きを取得するにはどうすればよいですか?

4

2 に答える 2

0

初期/デフォルトの画面の向きを取得するための純粋なネイティブ ソリューションに関心がある場合は、以下のコードを使用してください。

関連する JAVA メソッドの詳細については、次を参照してください。

https://developer.android.com/reference/android/view/Display.html#getRotation()

int get_inital_screen_orientation(struct android_app * app){


    JavaVM *lJavaVM = app->activity->vm;
    JNIEnv *lJNIEnv = app->activity->env;
    jobject n_instance = app->activity->clazz;

    lJavaVM->AttachCurrentThread(&lJNIEnv, 0);

    int rotation = -1;

    if (lJNIEnv) {
        jclass c_clazz = lJNIEnv->GetObjectClass(n_instance);
        jclass c_windowManager = lJNIEnv->FindClass("android/view/WindowManager");
        jclass c_display = lJNIEnv->FindClass("android/view/Display");
        jmethodID getWindowManager = lJNIEnv->GetMethodID(c_clazz, "getWindowManager", "()Landroid/view/WindowManager;");
        jmethodID getDefaultDisplay = lJNIEnv->GetMethodID(c_windowManager,"getDefaultDisplay","()Landroid/view/Display;");
        jmethodID getRotation = lJNIEnv->GetMethodID(c_display, "getRotation", "()I");
        jobject windowManager = lJNIEnv->CallObjectMethod(n_instance, getWindowManager);
        jobject display = lJNIEnv->CallObjectMethod(windowManager, getDefaultDisplay);
        rotation = lJNIEnv->CallIntMethod(display, getRotation);
        lJavaVM->DetachCurrentThread();
    }
    return rotation;

}
于 2019-04-12T16:28:27.217 に答える