SensorManager используется для определения ориентации устройства на основе показаний датчиков ускорения и геомагнитного поля. 2
Процесс включает несколько шагов: 1
- В методе onCreate получают сенсоры ускорения (TYPEACCELEROMETER) и магнитного поля (TYPEMAGNETIC_FIELD). 1
- В методе onResume вешают слушателя и запускают таймер, который каждые 400 мсек будет определять ориентацию девайса в пространстве и выводить эту информацию на экран. 1
- Определяют текущую ориентацию девайса в пространстве без учёта поворота экрана с помощью метода getDeviceOrientation. 1 Для этого вызывают метод getRotationMatrix, который берёт данные ускорения и магнитного поля и формирует из них матрицу данных. 1 Далее метод getOrientation из этой матрицы позволяет получить массив значений (в радианах) поворота трёх осей. 1 Затем радианы переводят в градусы методом toDegrees, и получается готовый массив с углами наклона девайса. 1
- Аналогично методу getDeviceOrientation используют метод getActualDeviceOrientation, но он позволяет учесть ориентацию экрана. 1 Для этого дополнительно вызывают метод remapCoordinateSystem, который пересчитывает матрицу. 1 С помощью переменных xaxis и yaxis в этот метод передают данные о том, как оси поменялись местами при повороте экрана. 1
Также для получения данных по ориентации можно использовать сенсор TYPE_ORIENTATION, но он объявлен устаревшим с API Level 8. 1