安卓:我想获取设备的旋转角度

9
例如,我启动了应用程序,然后将设备侧面旋转90度。我想为设备上的每个平面检测此事件。
4个回答

19

你可以像这样在 onResume() 方法中获取屏幕方向:

private static final int ORIENTATION_0 = 0;
private static final int ORIENTATION_90 = 3;
private static final int ORIENTATION_270 = 1;





Display display = ((WindowManager)
          getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int screenOrientation = display.getRotation();

switch (screenOrientation)
{
default:
case ORIENTATION_0: // Portrait
   // do smth.
break;
case ORIENTATION_90: // Landscape right
   // do smth.
break;
case ORIENTATION_270: // Landscape left
   // do smth.
break;
}

1
谢谢,但我想获取手机的X、Y、Z平面。这是Z平面的解决方案,不包括其他平面。 - rookie.4ever
如果您想检查所有三个平面,则可以注册SensorEventListener并在其“onSensorChanged(SensorEvent event)”方法中检索值。有关更多详细信息,请参见此处:SensorEventListenerSensorEvent - Siggy

1

使用SensorManager和TYPE_GYROSCOPE/TYPE_ROTATION_VECTOR/TYPE_ORIENTATION获取这些值。

详见此页面


6
发布解决方案而不是链接,因为链接可能在将来失效,例如下面的答案:https://dev59.com/oWvXa4cB1Zd3GeqPNt4N#13817444 - Idemax
请添加一个像其他回答那样的适当解决方案。 - devDeejay
请查看此链接 https://developer.android.com/guide/topics/sensors/sensors_position#sensors-pos-orient - Siva

0

你可以使用OrientationEventListener来处理平面

OrientationEventListener mOrientationListener = new OrientationEventListener(
            getApplicationContext()) {
        @Override
        public void onOrientationChanged(int orientation) {

        }
    };

    if (mOrientationListener.canDetectOrientation()) {
        mOrientationListener.enable();
    }

0

我认为你需要使用传感器管理器来计算每个点的x、y、z,并使用方程式找到两个点之间的角度。考虑你的起始点(0,0,0);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接