中獲取手機的位置正在嘗試瞭解如何知道該設備的屏幕是面向用戶的,或者,例如,平板上的屏幕擡頭或面朝下等。在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;
}
任何人都有一個更好?
如果某人正在翻閱屏幕 - 例如當躺在牀上?那麼這個解決方案根本不起作用,對吧? 你也可以做臉部識別,雖然它有點矯枉過正我猜... – 2013-12-13 14:57:10