Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Интерфейс традиционных датчиков в Android API




Сенсорные возможности Android

Один из приятных аспектов работы с платформой Android заключается в возможности получить доступ к некоторым полезным компонентам самого устройства. До сих пор разработчиков мобильных устройств разочаровывала невозможность доступа к их внутреннему оборудованию. Хотя между вами и металлом все же остается прослойка Java -среды Android, команда разработчиков Android вывела многие возможности аппаратуры на поверхность. А так как Android - платформа с открытым исходным кодом, то можно засучить рукава и написать собственный код для решения своих задач. В Android существует много различных датчиков, используя которые, разработчики могут создавать интересные и полезные программные решения.

Рассмотрим более подробно работу с датчиками в Android. Пакет android. hardware представляет разработчику API, который может быть использован при необходимости в приложениях, опирающихся на аппаратные возможности устройства. К примеру, пакет представляет интерфейс управления камерой и другими датчиками устройства. Операционная система Android по умолчанию представляет программную абстракцию любого физического элемента устройства, будь то камера или датчик движения, но программируя приложения для работы с датчиками устройства, необходимо первоначально убедится, что требуемый датчик присутствует в мобильном устройстве. Чтобы обезопасить себя от таких ошибок нужно в манифест-файле программы использовать директиву <uses-feature>.

В табл. 9.1 приведено описание аппаратно-ориентированных интерфейсов Android.

Таблица 9.1.
Camera.AutoFocusCallback Интерфейс, осведомляющий об окончании автофокусировки камеры. Регистрирует событие на программном уровне ОС.
Camera.ErrorCallback Интерфейс, осведомляющий об ошибках. Регистрирует событие на программном уровне ОС.
Camera.FaceDetectionListener Интерфейс, распознающий лицо в предварительном просмотре. Регистрирует событие на программном уровне ОС.
Camera.OnZoomChangeListener Интерфейс, осведомляющий об изменениях зума камеры. Регистрирует событие на программном уровне ОС.
Camera.PictureCallback Интерфейс обратного вызова, используется для подачи данных после съемки.
Camera.PreviewCallback Интерфейс обратного вызова используются, чтобы предоставить копии предварительного просмотра кадров как они отображаются на устройстве.
Camera.ShutterCallback Интерфейс обратного вызова используется для обозначения момента фактического захвата изображения.
SensorEventListener Интерфейс используется для получения уведомлений от менеджера датчиков (SensorManager), в тот момент, когда значение датчика изменилось.
SensorListener Интерфейс реализован с помощью класса, который используется для вывода значений датчиков по мере их изменения в режиме реального времени. Приложение реализует этот интерфейс для мониторинга одного или нескольких имеющихся аппаратных датчиков.
Camera Камера класс используется для установки настройки захвата изображения, старт/стоп предварительного просмотра, фотографии и извлечения кадров для кодирования видео.
Sensor Класс представляет датчик.
SensorEvent Класс представляет события датчика, а также содержит полезную информацию такую, как тип сенсора, временная метка, точность и данные сенсора.
SensorManager Класс, обеспечивающий доступ к внутренним датчикам платформы Android.
Пакет android.os.* Пакет, содержащий несколько полезных классов для взаимодействия с операционной средой, включая управление питанием, поиск файлов, обработчик и классы для обмена сообщениями. Как и многие другие портативные устройства, телефоны на базе Android могут потреблять достаточно много электроэнергии. Обеспечение "бодрствования" устройства в нужный момент, чтобы проконтролировать нужное событие, - важный аспект проектирования, заслуживающий особого внимания.

Рассмотрим более подробно несколько классов и интерфейсов.

SensorEventLstener. Используется для получения уведомлений от SensorManager, в тот момент, когда показания датчика меняются. Содержит описание двух основных методов, которые необходимо описать в реализующем классе.

· 1) public abstract void onAccuracyChanged (Sensor sensor, int accuracy);

Вызывается тогда, когда точность показаний датчика изменяется. Параметр sensor определяет датчик - объект класса Sensor. Параметр accuracy определяет точность измерений датчика. Точность может быть: высокая, низкая, средняя, ненадежные данные.

· 2) public abstract void onSensorChanged (SensorEvent event, float values[]);

Метод вызывается всякий раз, когда изменяется значение датчика. Этот метод вызывается только для датчиков контролируемых самим приложением. В число аргументов метода входит целое, которое указывает, что значение датчика изменилось, и массив значений с плавающей запятой, отражающих собственно значение датчика. Некоторые датчики выдают только одно значение данных, тогда как другие предоставляют три значения с плавающей запятой. Датчики ориентации и акселерометр дают по три значения данных каждый.

SensorManager. Предоставляет доступ к различным датчикам устройства. Используя метод getSystemService с параметром SENSOR_SERVICE, можно получить экземпляр класса. Программируя приложения использующие датчики всегда необходимо убедиться в том, что датчики не функционирует, когда приложение приостановлено.

Пример демонстрирует основы работы с классом SensorManager и Sensor. Объект интересующего датчика может быть получен при помощи вызова метода, объекта класса SensorManager, getDefaultSensor(Sensor.<тип>). Все типы датчиков Android описаны в виде констант в классе Sensor. Методы onResume() и onPause() необходимы для экономичного использования энергоресурсов устройства. Всякий раз, когда приложение приостанавливает свою работу, сбрасывайте слушатель датчика. Для взаимодействия с датчиком приложение должно зарегистрироваться на прием действий, связанных с одним или несколькими датчиками. Регистрация осуществляется с помощью метода SensorManager.registerListener().

SensorEvent. Класс описывает различные типы событий датчиков, которые вычисляются устройством по -разному в зависимости от разновидности датчика. Будучи шаблоном, описывающим процесс функционирования различных датчиков (ускорения, ориентации…), класс представляет очень гибкое средство получения показаний от этих компонентов устройства. Рассмотрим более подробно структуру класса.

Класс имеет четыре основных поля, раскрывающих процесс взаимодействия датчика устройства с окружающим миром.

1. Accuracy - поле определяет точность показаний сенсора, обычно значение этой величины - константа, которая задается при регистрации слушателя на объект класса Sensor.

2. Sensor - объект сгенерировавший событие.

3. Timestamp - величина типа long, сообщающая время (в наносекундах) возникновения события.

4. Float values[] - значения с датчика, которые отображают процесс взаимодействия устройства с окружающим миром. Этот параметр зависит от типа датчика.

public class SensorActivity extends Activity, implements SensorEventListener { private final SensorManager mSensorManager; private final Sensor mAccelerometer; public SensorActivity() { mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); mAccelerometer = mSensorManager.getDefaultSensor (Sensor.TYPE_ACCELEROMETER); } protected void onResume() { super.onResume(); mSensorManager.registerListener(this,mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL); } protected void onPause() { super.onPause(); mSensorManager.unregisterListener(this); } public void onAccuracyChanged(Sensor sensor, int accuracy) { } public void onSensorChanged(SensorEvent event) { }}



Поделиться с друзьями:


Дата добавления: 2014-11-26; Просмотров: 487; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.