Я пытаюсь понять, как я могу узнать, смотрит ли экран устройства на пользователя или, например, на стол с экраном, смотрящим вверх или вниз, и т. Д.Получите, где обращается к мобильному телефону в android
Я не использую датчик ориентации, так как он устарел. Я использую матрицу вращения, я знаю, что значения высоты тона и валика должны быть хорошими, чтобы получить эту информацию, но прежде чем я получу эти значения, мне нужно выполнить команду remapcoordinatesystem и знаете, какой Axle является X, и какой из них YI должен знать, с чем сталкивается экран.
Например: Если экран обращен к пользователю можно использовать эту таблицу сопоставления
ROTATION_0 Х Y
ROTATION_90 -Y Х
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 /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;
}
У кого-нибудь есть лучше?
Что делать, если кто-то читает экран вверх дном - например. когда лежит в постели? Тогда это решение не работает вообще, не так ли? Вы также можете сделать распознавание лиц, хотя это немного перебор, я думаю ... –