Визначення положення в просторі
Датчик орієнтації - це комбінація датчика магнітного поля, виконуваних роль електронного компаса, і акселерометра, який вимірює нахил і обертання.
Якщо ви знайомі з тригонометрією, значить є навички, необхідні для обчислення положення пристрою відносно всіх трьох осей, осно- виваясь на свідченнях акселерометра і датчика магнітного поля. Однак якщо ви маєте до тригонометрії ті ж почуття, що і я, то зрадієте, дізнавшись, що Android зробить все обчислення сам.
По суті, Android пропонує два способи визначення положення пристрою. Ви можете зробити запит безпосередньо до датчика орієнтації або отримати необхідні дані за допомогою акселерометра і датчика магнітного поля. Другий варіант більш повільний, але має преімуще- ства - підвищену точність і можливість змінювати систему відліку при визначенні положення в просторі. У наступних розділах опи- Сива обидва підходи.
При використанні стандартної системи відліку положення пристрою обчислюється в трьох вимірах, як показано на рис. 14.2. Як і у випадку з акселерометром, пристрій розглядається в стані спокою, лежачи екраном вгору на плоскій поверхні.

• Ось X (напрямок). Напрямок пристрою при русі по-коло осі X; 0 ° / 360 ° - північ, 90 ° - схід, 180 ° - південь, 270 ° - захід.
• Ось Y (нахил). Кут нахилу пристрою при обертанні відносна але осі Y. Він дорівнює 0 °, якщо пристрій лежить на задній кришці,
-90 ° - якщо розташоване вертикально (верхня частина пристрою вказує вгору), 90 ° - якщо перевернуто, 180 ° / -180 ° - якщо екранування ном вниз.
• Вісь Z (поворот). Поворот виписує бічний нахил пристрої по осі
Z між -90 ° і 90 °. При 0 ° пристрій лежить на задній кришці, при
-90 ° екран повернений вліво, при 90 ° - вправо.
за допомогою датчика орієнтації
Найпростіший спосіб відслідковувати положення пристрою в просторових стве - застосування окремого датчика орієнтації. Створіть і зарегистри- руйте SensorEventListener за допомогою об'єкта SensorManager, використовуючи датчик орієнтації за замовчуванням, як показано в лістингу 14.3.
Лістинг 14.3. за допомогою датчика орієнтації
SensorManager sm = (SensorManager) getSystemService (Context.SENSOR_ SERVICE);
int sensorType = Sensor.TYPE_ORIENTATION;
sm.registerListener (myOrientationListener, sm.getDefaultSensor (sensorType), SensorManager.SENSOR_DELAY_NORMAL);
Коли положення пристрою змінюється, у вашій реалізації інтерфейсу SensorEventListener спрацьовує обробник onSensorChanged. Параметр SensorEvent включає в себе масив значень типу float, що описує стан пристрою по трьох осях. Перший елемент цього масиву - на- правління, другий - нахил, третій - поворот.
final SensorEventListener myOrientationListener = new
public void onSensorChanged (SensorEvent sensorEvent)
if (sensorEvent.sensor.getType () == Sensor.TYPE_ORIENTATION)
float headingAngle = sensorEvent.values [0]; float pitchAngle = sensorEvent.values [1]; float rollAngle = sensorEvent.values [2];
// TODO Використовувати зміна положення в своїй програмі.
public void onAccuracyChanged (Sensor sensor, int accuracy) <>