2013-01-23 59 views
4

我有一個相當簡單的要求。假設設備垂直於地面,垂直於地面並傾斜,則需要確定手機是向前還是向後傾斜(屏幕朝向地面或更靠近天花板)。如何使用Android傳感器事件來確定設備是朝上還是朝下

我知道如何從各種傳感器讀取數值,我認爲使用傳感器TYPE_ROTATION_VECTOR是前進的方向。我所缺少的是數學知識來確定它返回的三個值的前進或後退。

我讀過所有相關的線索,因此沒有啓蒙,非常感謝任何幫助。

回答

1

X軸水平指向右側,Y軸垂直指向上方,Z軸指向屏幕正面的外側。在這個系統中,屏幕後面的座標具有負Z值。

參考座標系統被定義爲直接正交基,其中:

X is defined as the vector product Y.Z (It is tangential to the ground at the device's current location and roughly points East). 
Y is tangential to the ground at the device's current location and points towards magnetic north. 
Z points towards the sky and is perpendicular to the ground. 

在你的情況試試這個,

if(Round(y,4) < 8.0){ 
      Log.d("sensor", "=====UP===="); 


     } 

     else if(Round(y,4) < -8.0){ 
      Log.d("sensor", "=====DOWN===="); 

     } 

accelerometer sensor

+0

感謝您的快速響應。在聽起來甚至比我更笨的風險下,你的Round()函數是指什麼? – PaulJNewell

3
float[] rotationMatrix = new float[9]; 
float[] inclinationMatrix = new float[9]; 
float[] accelerometer; // values from sensor 
float[] magnetic; // values from sensor 
SensorManager.getRotationMatrix(rotationMatrix, inclinationMatrix, accelerometer, magnetic) 
int inclination = (int) Math.round(Math.toDegrees(Math.acos(rotationMatrix[8]))); 

if (inclination < 90) 
{ 
     // face up 
} 

if (inclination > 90) 
{ 
     // face down 
} 
相關問題