在android中面对手机的地方

时间:2012-02-14 04:18:13

标签: android android-sensors tilt-sensor

我正在尝试了解如何知道设备的屏幕是否面向用户,或者,例如,在屏幕抬头或面朝下的桌子上平放等等。

我没有使用方向传感器,因为它已被弃用我正在使用旋转矩阵,我知道音高和滚动值应该很好获取信息,但在我得到这些值之前我需要重新配置系统并知道哪个Axle是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/施瓦茨/ 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;
        }

任何人都有一个更好的?

1 个答案:

答案 0 :(得分:0)

您可以使用Accelerometer,因为它提供了设备的x-y轴,因此您可以获得设备所在的位置。