2012-02-14 5 views
0

デバイスの画面がユーザに向いているかどうか、たとえば画面が上を向いているか、下を向いているかなど、どうすればわかるか分かります。Androidの携帯電話がどこに向いているのかを確認する

私はローテーションマトリックスを使用していますので、私はピッチとロールの値がその情報を得るのは良いはずですが、それらの値を取得する前に、私はremapcoordinatesystemとAxleがXであり、どちらがYIであるかを知る必要があります。例えば

:画面は、ユーザーが直面している場合、私は

このマッピング・テーブルを使用することができROTATION_0         X   Y

ROTATION_90     -Y     X

ROTATION_180   -X   -Y

ROTATION_270   Y   -X

画面が空に直面している場合は、多分私は、Z軸とY軸を交換する必要がありますが、私は、画面のどこに直面して見つけることができますかわかりません。

アイデア?

私はウェブで見つけたこの方法も使用しています(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

誰かが画面を逆さまに読んでいるとしたらどうでしょうか?ベッドに横たわっているとき?その後、このソリューションはまったく機能しません。 あなたはまた顔認識をすることができますが、私はそれがちょっと残念だと思っています。 –

答えて

0

Accelerometerはデバイスのx-y軸を与えるため、デバイスが向いている場所を取得できるため、Accelerometerを使用できます。

+0

画面が空に面している場合は、画面がユーザーに面している場合は、正しいです。画面の座標系は変更されませんが、センサの座標系は変わりません。そのため、remapCoordinateSystemを使用する必要があります。 – polonskyg

関連する問題