Санкт-Петербургский государственный университет
Опубликован: 14.07.2013 | Доступ: свободный | Студентов: 509 / 178 | Длительность: 06:03:00
Специальности: Программист
Лекция 5:

Разработка приложений для планшетных компьютеров

9.5. Датчик ориентации

Устройство с предустановленной ОС Android включает датчик ориентации, который используется для распознавания положения телефона в пространстве. Как трактуются координатные оси в Android продемонстрировано на рис. 9.1.

Ориентация в Android определяется тремя величинами:

  • Азимут в градусах - угол между осью X и северным направлением

    0 <= azimuth <= 360.

  • Высота в градусах - угол между осью У и горизонтальным положением устройства.

    -180<= pitch <= 180.

  • Вращение в градусах - угол между осью X и горизонтальным положением устройства.

    -90 <= roll <= 90.

Направление координатных осей в датчике ориентации

Рис. 9.1. Направление координатных осей в датчике ориентации

Используйте метод getSystemService(Context.SENSOR_ SERVICE) чтобы инициализировать SensorManager. Далее используйте метод getDefaultSensor(Sensor.TYPE_ORIENTATION) чтобы создать объект класса Sensor и инициализировать его как датчик ориентации.

Для работы с датчиком ориентации необходимо реализовывать два метода, объявленные в интерфейсе: первый проверяет изменение точности, второй вызывается всякий раз, когда происходит изменение показаний датчика.

9.6. Датчик акселерации

Android поддерживает большое число датчиков, которые могут быть использованы для получения информации о среде, окружающей мобильное устройство. Сейчас мы познакомимся, как в приложении использовать датчик ускорения.

Для того, чтобы использовать датчик ускорения, в программах необходимо реализовывать тот же интерфейс, что был описан выше. Параметр rate метода registerlistener() позволяет задавать точность показаний датчика ускорения устройства. Используйте метод getSystemService(Context.SENSOR_SERVICE) чтобы инициализировать SensorManager. Далее используйте метод getDefaultSensor(Sensor.TYPE_ACCELEROMETER) чтобы создать объект класса Sensor и инициализировать его как датчик акселерации. Рассмотрим поля объекта события метода onSensorChanged(SensorEvent):

  • int accuracy - определяет точность измерений.
  • long timestamp - время в наносекундах, идентифицирующее начало события.
  • float[] values - значения в системе СИ.
  • values[0] - текущее ускорение по X минус ускорение свободного падения по оси X.
  • values[1] - текущее ускорение по Y минус ускорение свободного падения по оси Y.
  • values[2] - текущее ускорение по Z минус ускорение свободного падения по оси Z.

9.7. Датчик GPS

Android позволяет использовать показания GPS-датчика в тех случаях, когда логика приложения напрямую зависит от расположения устройства в пространстве, относительно Земли. GPS-датчик не является стандартным датчиком в Android, поэтому для его использования применяется немного другой подход.

LocationManager - менеджер управления службой GPS, основной класс, которой представляет GPS-датчик в Android. Класс предоставляет доступ к системной службе локации, позволяющей приложению получать периодические обновления в течении некоторого промежутка времени.

Для инициализации объекта класса LocationManager используйте метод getSystemService() с параметром Location_Service.

Чтобы запустить службу GPS используйте метод requestLocationUpdate(String provider, long minTime, float minDistance, LocationListener listener).

Параметр provider задается в виде статической константы, которая определяет поставщика услуги GPS. Например, если указать LocationManager.GPS_PROVIDER, в качестве параметра, то поставщиком услуги будет спутник GPS, а если указать LocationManager.NETWORK_PROVIDER - то, поставщиком услуги будет сетевой протокол UDP или HTTP.

Второй параметр задает периодичность получения данных от GPS службы.

Третий параметр определяет минимальный размер области пространства, в котором мы не хотим получать уведомления от GPS службы. Этот параметр определяется логикой приложения.

Четвертый параметр - слушатель, который реагирует на изменения локации.

Для того, чтобы сбросить слушатель используйте метод removeUpdates(LocationListener listener).

Рассмотрим подробно интерфейс ocationListener. Он включает в себя следующие методы:

  1. onLocationChanged(Location location) - метод вызывается всякий раз, когда происходит изменение показаний GPS датчика. Количество вызовов данного метода напрямую зависит от того, как вы на него подписались (параметры minDistance, minTime). Экземпляр класса Location содержит показания датчика. Его основные поля: londitude (долгота), latitude (широта), altitude (высота над уровнем моря), accuracy (точность), timestamp (время идентификации события).
  2. onStatusChanged (String provider, int status, Bundle extras) - метод вызывается всякий раз, когда GPS программно терпит изменения(плохой сигнал, устройство не отвечает и т.д.). Например данный метод вызывается, когда GPS служба не в состоянии установить местоположение или недавно стала доступной после периода блокировки.
  3. onProviderEnabled(String provider) - метод вызовется, если приложению доступна служба GPS, или вызовется после того, как пользователь включит GPS.
  4. onProviderDisabled(String provider) - метод вызывается, если приложению недоступен GPS, вообще говоря, если устройство никогда не использовало службу GPS, то этот метод после автоматического вызова должен предоставить пользователю возможность включить GPS.