0

我试图了解如何知道设备的屏幕是面向用户,还是平放在桌子上,屏幕朝上或朝下等。

我没有使用方向传感器,因为它已被弃用我正在使用旋转矩阵,我知道俯仰和滚动值应该很好地获取该信息,但在我获得这些值之前,我需要重新映射坐标系统并知道哪个轴是X 和 YI 需要知道屏幕朝向。

例如:如果屏幕面向用户我可以使用这个映射表

ROTATION_0 X Y

ROTATION_90 -Y X

ROTATION_180 -X -Y

ROTATION_270 Y -X

如果屏幕朝向天空,我可能需要将 Y 轴与 Z 轴互换,但我不知道如何才能找到屏幕朝向的位置。

有任何想法吗?

我也在使用我在网上找到的这种方法(http://code.google.com/p/the-schwartz-unsheathed/source/browse/trunk/src/com/android/app/schwarz/PhoneOrientation .java?r=12)

 public static int getOrientation(float roll, float pitch) {
                int orientation = ORIENTATION_INVALID;

                if (Math.abs(roll) == 0.0 && Math.abs(pitch) == 0.0){
                    return ORIENTATION_INVALID;
                }

                if(roll >= -90 && roll <= -(90-mTolerance)){
                        orientation = ORIENTATION_FACE_LEFT;
                }
                else if(roll <= 90 && roll >= (90-mTolerance)){
                        orientation = ORIENTATION_FACE_RIGHT;
                    }

                if(pitch >= (90-mTolerance) && pitch <= (90+mTolerance)) {
                        if(orientation != ORIENTATION_INVALID){
                                orientation = ORIENTATION_INVALID;
                        }
                        else {
                                orientation = ORIENTATION_FACE_FORWARD;
                        }
                } else if(pitch <= -(90-mTolerance) && pitch >= -(90+mTolerance)) {
                        if(orientation != ORIENTATION_INVALID) {
                                orientation = ORIENTATION_INVALID;
                        }
                        else {
                                orientation = ORIENTATION_FACE_BACKWARD;
                        }
                }

                if((roll >= -mTolerance && roll <= mTolerance)) {
                        if((pitch >= -mTolerance && pitch <= mTolerance)) {
                                if(orientation != ORIENTATION_INVALID) {
                                        orientation = ORIENTATION_INVALID;
                                }
                                else {
                                        orientation = ORIENTATION_FACE_UP;
                                }
                        } else if((pitch <= -(180-mTolerance) && pitch >= -180) || (pitch >= (180-mTolerance) && pitch <= 180)) {
                                if(orientation != ORIENTATION_INVALID) {
                                        orientation = ORIENTATION_INVALID;
                                }
                                else {
                                        orientation = ORIENTATION_FACE_DOWN;
                                }
                        }
                }

                return orientation;
        }

谁有更好的?

4

1 回答 1

0

您可以使用 Accelerometer,因为它给出了设备的 xy 轴,因此您可以获得设备所面对的位置。

于 2012-02-14T05:46:54.753 回答