如何从本机代码获得自然(默认)Android设备方向?

时间:2013-04-07 08:06:36

标签: android native-activity

我在我的应用程序中使用加速计,但在几个设备上,传感器轴是不同的(取决于默认的设备方向是纵向或横向)。 在AndroidMaifest.xml中:

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

如何从本机代码获取默认设备方向?

2 个答案:

答案 0 :(得分:1)

检查OnCreate()(或进行初始化的功能)中设备的当前方向,然后根据设置传感器轴的方向检查。

按照以下链接查看如何获取Android设备的当前方向:

Check orientation on Android phone

how to detect orientation of android device?

希望这有帮助。如果没有,请发表评论以分享您的问题的更多详细信息。

答案 1 :(得分: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;

}