Получить, где стоит перед мобильным телефоном в Android - PullRequest
0 голосов
/ 14 февраля 2012

Я пытаюсь понять, как я могу узнать, находится ли экран устройства лицом к пользователю или, например, плоский на столе с экраном, смотрящим вверх или вниз, и т. Д.

I 'Я не использую датчик ориентации, поскольку он устарел. Я использую матрицу вращения, я знаю, что значения шага и крена должны быть хорошими, чтобы получить эту информацию, но прежде, чем я получу эти значения, мне нужно переназначить систему координат и узнать, какая ось является Xи какой из них мне нужен, чтобы знать, с какой стороны экрана.

Например: если экран обращен к пользователю, я могу использовать эту таблицу отображения

ROTATION_0 XY

ROTATION_90 -YX

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;
        }

У кого-нибудь есть лучше?

1 Ответ

0 голосов
/ 14 февраля 2012

Вы можете использовать акселерометр, потому что он дает ось X-Y устройства, так что вы можете получить, где устройство обращено.

...