我正在尝试了解如何知道设备的屏幕是否面向用户,或者,例如,在屏幕抬头或面朝下的桌子上平放等等。
我没有使用方向传感器,因为它已被弃用我正在使用旋转矩阵,我知道音高和滚动值应该很好获取信息,但在我得到这些值之前我需要重新配置系统并知道哪个Axle是X,哪一个是YI需要知道屏幕面对的是什么。
例如:如果屏幕面向用户,我可以使用此映射表
ROTATION_0 X Y
ROTATION_90 -Y X
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/施瓦茨/ 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轴,因此您可以获得设备所在的位置。