2012-02-14 82 views
0

中獲取手機的位置正在嘗試瞭解如何知道該設備的屏幕是面向用戶的,或者,例如,平板上的屏幕擡頭或面朝下等。在android

我沒有使用方向傳感器,因爲它已過時我使用旋轉矩陣,我知道音調和滾動值應該是很好的信息,但在獲得這些值之前,我需要重新協調系統,並且知道哪個Axle是X,哪個是YI需要知道屏幕正在面對什麼。

例如:如果屏幕朝向用戶I可以使用此映射表

  ROTATION_0       X  ý

  ROTATION_90 -Y       X

  ROTATION_180 -X   -Y

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

任何人都有一個更好?

+0

如果某人正在翻閱屏幕 - 例如當躺在牀上?那麼這個解決方案根本不起作用,對吧? 你也可以做臉部識別,雖然它有點矯枉過正我猜... – 2013-12-13 14:57:10

回答

0

您可以使用加速度計,因爲它給出設備的x-y軸,因此您可以獲取設備所面對的位置。

+0

這是不正確的,它只是正確的,如果屏幕面對用戶,如果屏幕面對天空是不同的。屏幕座標系不變,但傳感器座標系確實如此。這就是我們應該使用remapCoordinateSystem的原因。 – polonskyg 2012-02-14 12:13:26