Статьи / Программирование / Windows 7 Libraries и API / Библиотека Windows 7 Sensor and Location .NET Interop Sample Library
Библиотека Windows 7 Sensor and Location .NET Interop Sample LibraryПросмотров: 2154
21.04.2009 12:10
 
Платформа Windows 7 Sensor and Location дает вашему компьютеру и приложениям возможность приспосабливаться к текущей окружению и в зависимости от этого менять свой облик или поведение. Например, представьте приложение, которое использует датчик освещения и может менять яркость и контрастность отображаемого контента на базе окружающих условий освещения. Или приложение, которое использует датчики местоположения и может определять местоположение. Это делает реальностью доселе невиданные сценарии, среди которых автоматическая локализация просматриваемого контента и поиск в Интернете на базе текущего местоположения.

Платформа "Sensor and Location" представляет собой стандартный способ интеграции сенсоров и устройств в Windows 7, обеспечивая стандартную программную модель для приложений с целью реализовать преимущества этих устройств. Производители аппаратного обеспечения могут узнать, как создавать драйверы для сенсоров и датчиков местоположения с помощью Windows 7 WDK. Разработчикам, желающим узнать, как создавать приложения, которые умеют определять местоположение и поддерживают сенсоры, следует установить бета-версию Windows 7 SDK.

Кто-то спросит, а зачем вообще использовать платформу "Windows 7 Sensor and Location"? Чтобы ответить на тот вопрос, мы должны понять, что большинство приложений, которые мы используем ежедневно, были разработаны для нормальных условий окружающей среды, например, для обычных условий внутреннего освещения. Однако, сегодняшние ноутбуки обладают более высокой мобильностью, чем когда-либо, позволяя использовать их в различных местах и в различных условиях освещения. Было бы здорово, если бы приложения умели менять свой интерфейс, стиль и поведение в зависимости от текущих условий окружающей среды? Так, к примеру, датчики освещения позволят вашему компьютеру автоматически подстраивать яркость экрана ноутбука на базе условий окружающего освещения. А разработчики, со своей стороны, могут заставить приложения оптимизировать свой контент таким образом, чтобы упростить использование приложения в разных условиях освещения.

На следующем скриншоте вы увидите обновленную версию MSDN Reader. Эта версия умеет менять свой внешний вид в зависимости от условий освещения, определяемых датчиком освещения. С левой стороны можно видеть, как приложение выглядит при нормальном комнатном освещении, а с правой стороны - при наружном освещении. При ярком освещении приложение уменьшает количество используемых цветов, чтобы увеличить контраст, и увеличивает размер шрифта, делая отображаемый контент (текст) более удобочитаемым при ярком дневном освещении. Я использовал приложение Virtual Light Simulator, которое входит в состав бета-версии Windows 7 SDK: найти его можно в папке Program Files\Microsoft SDKs\Windows\v7.0\Bin\VirtualLightSensor.exe. В принципе можно загрузить пример кода, установить SDK и оценить его в действии на вашем собственном компьютере. Обратите внимание, что при запуске приложения Virtual Light Sensor необходимо открыть Device Manager и запустить поиск драйверов (в той же папке), чтобы установить неподписанный драйвер Virtual Light. После этого приложение заработает.


Бета-версия Windows 7 SDK содержит инструменты, документацию и примеры кода для создания драйверов для сенсорных устройств, а также по использованию платформы Sensor and Location в разработке приложений для Windows 7. Как и большинство других API, Sensor and Location является собственным интерфейсом Windows 7. В SDK есть еще несколько примеров, иллюстрирующих, как приложения с управляемым кодом используют очень тонкий слой взаимодействия. Однако, библиотека Sensor and Location .NET Interop Sample Library предлагает более широкую и более .NET-подобную модель программирования со строго типизированными объектами и простой моделью расширяемости для отчетов Sensor Data Report.

Давайте рассмотрим архитектуру библиотеки Sensor and Location .NET Interop Sample Library Windows 7 и выделим важные классы.

Чтобы начать работать с сенсорами, для начала их следует получить. Это можно сделать, обратившись к SensorManager, чья главная задача состоит в том, чтобы представить классы сенсоров (например, классы датчиков освещения и акселерометров) разработчику. С помощью SensorManager разработчики могут:


Get an array of sensors by CategoryID. CategoryID - глобальный уникальный идентификатор (GUID), который определяет известный класс сенсоров - датчиков освещения, акселерометров, датчиков движения или местоположения. Полный список сенсоров расмещен в классе SensorCategories и в SDK.
Get an array of sensors by TypeID. TypeID - определенный тип сенсора, который связан с определенным классом. Например, тип LocationGPS - часть класса сенсоров Location Sensors, а Accelerometer3d и Accelerometer2d связаны с классом Accelerometer Sensors. С полным списком типов сенсоров можно ознакомиться в классе SensorCategories.
Get a specific Sensor получает сенсор по GUID сенсора
GetAllSensors получает все зарегистрированные сенсоры. Вы можете использовать любые сенсоры из этого списка, пока у вас есть на это разрешение. Чтобы использовать сенсор, пользователь будет должен активировать его в приложении.
Show the permission dialog box позволяет пользователям активировать тот или иной сенсор.
Notify уведомляет приложение о доступности с помощью события SensorAttached.


Как только вы получили нужный сенсор из SensorManager, приложение может получить данные, используя класс SensorDataReport, который является абстрактным базовым классом для всех отчетов DataReports. Чтобы датчик был поистине полезным, он должен выдавать понятные данные. Количество, частота и тип образования данных отличаются в разных датчиках. Например, датчик открытия дверей создает мало Булевых данных, а датчик движения может непрерывно производить массу данных. Чтобы стандартизировать путь, по которому приложение получает данные, собственный Sensor API использует объект Sensor Data Report.

Вы можете получить доступ к данным из отчета сенсора через собственный API с интерфейсом ISensorDataReport. Этот интерфейс позволяет отыскать временной штамп отчета, а вы, в свою очередь, можете определить, насколько полезна информация в этом отчете. Получить данные можно двумя способами: в качестве отдельного значения или набора значений. Чтобы получить данные в виде отдельного значения, используйте метод GetSensorValue. Чтобы получить набор значений, обратитесь к методу GetSensorValues. Получить тип данных или поля данных, которые требуется извлечь из отчета, можно с использованием структуры PROPERTYKEY. Эта модель программирования должна быть знакома разработчикам. Однако, в связи с определенными сложностями при обращении к управляемому коду, присутствует нехватка основных функций вроде строгого контроля типов, так как у каждого сенсора есть разные поля данных. Поэтому одна из наших целей состоит в том, чтобы создать строго типизированный .NET-класс для каждого сенсора и для каждого отчета, обеспечивая простой доступ к системе свойств .NET.

Управляемый код SensorDataReport - это основной класс для отчетов о типо-специфичных данных сенсора (например, Accelerometer3DReport). Когда разработчики обеспечивают поддержку стандартного сенсора, они обычно создают набор из двух классов: Sensor и SensorDataReport. SensorDataReport предоставляет основные методы, среди которых запрос свойств из PropertyKey и которые должны быть замещены типобезопасными свойствами в полученных классах (например, AxisY_G из Accelerometer3DReport).

Следующая диаграмма иллюстрирует три полученных класса сообщений о данных, которые мы внедрили в библиотеку Windows 7 Sensor and Location .NET Interop Sample Library - Accelerometer3DDataReport, AmbientLightSensorDataReport и BooleanSwitchArrayDataReport:


Мы также осуществили поддержку LatLongLocationReport и CivicAddressLocationReport, которые можно найти в разделе Location Providers в Windows 7 Sensor and Location .NET Interop Sample Library.

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

1. Получить класс AmbientLightSensor из SensorManager
2. Получить отчет о данных из класса AmbientLightSensor. Обратите внимание, что GetDataReport возвращает собственный SensorDataReport

Следующий фрагмент кода показывает, как получить сенсор освещения из SensorManager и использовать его, чтобы получить AmbientLightSensorDataReport:


Код:
//получаем сенсор
AmbientLightSensor [] lightSensors =
     SensorManager.GetSensorsByType<AmbientLightSensor>();
if (lightSensors.Length > 0)
{
     _lightSensor = lightSensors[0];
     _lightSensor.ReportInterval = _lightSensor.MinReportInterval;
}

// получаем с сенсора AmbientLightSensorDataReport
AmbientLightSensorDataReport lightReport =    
     (AmbientLightSensorDataReport)_lightSensor.GetDataReport();
// получаем значение яркости из отчета
_illuminanceLux = lightReport.IlluminanceLux;


Помимо получения отчетов разработчики могут провести с сенсором намного больше операций. Абстрактный класс сенсоров содержит исчерпывающий набор свойств, которые предоставляют такую информацию, как FriendlyName, SensorDescription, SensorID, SensorSerialNumber и SensorState. Есть также такие свойства, как ReportInterval для установки интервала между созданием отчетов и MinReportInterval для установки минимального времени между отчетами. В дополнение к этому класс сенсора поддерживает ряд событий, включая события DataUpdated, сообщающее о готовности отчета, и OnStateChanged, которое сообщает об изменении состояния сенсора. Класс сенсора предоставляет к вашим услугам массу дополнительных свойств. Диаграмма ISensorEventsInternal показывает класс сенсора и три получаемых класса, созданных специально для библиотеки Sensors and Location Managed Library Sample.


Активация сенсоров
Для использования каждого установленного датчика конечный пользователь должен будет активировать его. Пользователи могут сделать это через апплет Location и Other Sensors, расположенный в панели управления. Приложение может инициировать то же самое диалоговое окно при вызове надлежащего API. На нижеприведенном скриншоте показаны сенсоры, установленные на моем рабочем компьютере:


В состав библиотеки Sensor and Location Managed Library Sample входят два примера: MSDN Reader и Marble Sample. Последний представляет собой XNA-приложение, для работы которого необходимо загрузить XNA Game Studio 3.0. Это демонстрационное приложение покажет, как использовать датчики Accelerometer3D. MSDN Reader использует AmbientLightSensor для смены размера и цвета шрифтов.

В следующей статье мы продолжим исследовать архитектуру, используемую в библиотеке Windows 7 Sensor and Location .NET Interop Sample Library, а это позволит лучше понять, как создавать собственные наборы сенсоров.
Источник: www.thevista.ru