Как использовать событие датчика Android, чтобы определить, обращено ли устройство вверх или вниз

У меня довольно простое требование. Предполагая, что устройство стоит на своем конце, перпендикулярно земле, и оно наклонено, все, что мне нужно, это определить, наклонен ли телефон вперед или назад (экран больше к земле или ближе к потолку).

Я знаю, как читать значения от различных датчиков, и я полагаю, что использование датчика TYPE_ROTATION_VECTOR – это путь вперед. Все, что мне не хватает, – это ноу-хау по математике для определения вперед или назад от трех возвращаемых значений.

Я прочитал все связанные темы на SO без просветления, любая помощь очень ценится.

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 } 

Ось X горизонтальна и направлена ​​вправо, ось Y вертикальна и указывает вверх, а ось Z направлена ​​к внешней стороне передней поверхности экрана. В этой системе координаты за экраном имеют отрицательные значения Z.

Эталонная система координат определяется как прямой ортонормированный базис, где:

 X is defined as the vector product YZ (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===="); } 

Датчик акселерометра

Для этого вы можете использовать акселерометр и датчик магнитного поля.

Я нашел это полезное сообщение в блоге, в котором есть необходимый код, чтобы показать вам, как это сделать.

http://www.ahotbrew.com/how-to-detect-forward-and-backward-tilt/