Вам понадобится

Для разработки под Windows вам понадобиться следующее ПО:

Пробная версия Windows 10

Попробуйте новейшую версию ОС.

Visual Studio

Visual Studio — это интегрированная среда разработки с широкими возможностями для создания потрясающих приложений для Windows, Android и iOS, а также современных веб-приложений и облачных служб.

Microsoft .NET Framework 4.6

Пакет многоплатформенного нацеливания .NET Framework 4.6 позволяет разработчикам создавать приложения для .NET Framework 4.6, используя Visual Studio или сторонние IDE.

Lumia SensorCore SDK: новые возможности для разработки мобильных приложений. Часть 1: Обзор



Давайте поговорим о  Lumia SensorCore SDKкоторый предоставляет разработчикам коллекцию инструментов для сбора и обработки информации датчиков движения и местоположения. Эти данные полезны в первую очередь при разработке фитнес-приложений и приложений, где необходимо обрабатывать информацию о местоположении пользователя. 

Основным преимуществом этого SDK является возможность работы в фоновом режиме, что оптимизирует процесс энергопотребления.

Введение

Использование  Lumia SensorCore SDK значительно снижает нагрузку на процессор, благодаря чему увеличивается время автономной работы устройства. Достигается это тем, что SDK самостоятельно фиксирует данные с датчиков, пока приложения висят в фоновом режиме.

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



Для функционирования любого из SensorCore API обе настройки Данные о движении (Motion data) и Местоположение (Location data) должны обязательно быть включены на устройстве. Поэтому при разработке приложений, использующих данный SDK, необходимо предусмотреть сценарии, когда эти настройки могут быть отключены или устройство не поддерживает возможности SensorCore на аппаратном уровне.

Важно отметить, что SensorCore SDK доступен только для устройств нового поколения с операционной системой Windows Phone 8.1, таких как Nokia Lumia: 630, 635, 930, 730, 830 и Nokia Lumia 1520. 

Основные возможности

Lumia SensorCore SDK содержит в себе API для работы со следующими датчиками:

  • шагомер;
  • монитор активности;
  • датчик местоположения;
  • трекер маршрутов.

Lumia SensorCore SDK для всех API поддерживает следующие операции:

// инциализацию
StepCounter stepCounter = await StepCounter.GetDefaultAsync();

// проверку
if (await StepCounter.IsSupportedAsync()) …

// обработку ошибок
switch (SenseHelper.GetSenseError(failure.HResult))

// методы активации и деактивации для обработки жизненного цикла приложения
stepCounter.ActivateAsync();
stepCounter.DeactivateAsync();

Рассмотрим подробнее новые API, доступные для этих сценариев. 

Step Counter API

Набор инструментов для подсчета шагов предоставляет информацию о том, сколько шагов совершил пользователь, как долго и каким образом: шагал или бегал.

Различие определяется не только скоростью, но и интенсивностью движения, так что тип движения идентифицируется, даже если пользователь бегал и ходил с одинаковой скоростью. 

Основные методы:

// чтение
StepCounterReading currentSteps = await stepCounter.GetCurrentReadingAsync();

// получение событий за последний час
IList<StepCounterReading> steps = await
stepCounter.GetStepCountHistoryAsync ( DateTime.Now.AddHours( -1 ), TimeSpan.FromHours( 1 ) );

Пример работы Step Counter API, используемого в приложении «Здоровье и фитнес Bing»:

Activity Monitor API

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

Для того чтобы исключить не точные данные предусмотрена небольшая задержка при определении смены типа активности пользователя — в 5-10 секунд.

API позволяет различать следующие типы активностей:

  • Устройство в режиме ожидания (без пользователя);
  • Устройство с пользователем, но пользователь не двигается;
  • Пользователь ходит;
  • Пользователь бегает;
  • Пользователь перемещается, но Active Monitor не может идентифицировать тип движения, в этом случае тип активности классифицируется как Перемещение.

Основные методы:

// чтение текущей активности
ActivityMonitorReading reading = await activityMonitor.GetCurrentReadingAsync();

// регистрация обработчика события <i>ReadingChanged</I> 
activityMonitor.ReadingChanged += activityMonitor_ReadingChanged;

// получение активностей
IList<ActivityMonitorReading> activities = await 
activityMonitor.GetActivityHistoryAsync( DateTime.Now.AddDays( -1 ), TimeSpan.FromDays( 1 ) );

Place Monitor API

С помощью этого API можно получить список координат тех мест, в которых пользователь проводил некоторое время: совершал покупки, ужинал или стоял в пробке на дороге. Основная функция этого инструмента - идентифицировать места, которые пользователь посещает часто и определять их как известные.

Пример работы Place Monitor API, используемого в приложении «Places»:



Устройство должно оставаться в одном месте как минимум в течение 10 минут, для того чтобы место было классифицировано, как известное, и было добавлено в список. Одно место, как правило, означает круговую область с радиусом менее 200 метров. Радиус может расти в течение того времени, как пользователь перемещался по этому месту.

Расстояние между любыми двумя известными местами, должно быть более 500 метров. Это означает, что даже если два или более различных мест находятся в радиусе 500 метров друг от друга, Place Monitor API попытается объединить их в одно известное место. 

Все известные места определяются классом Place, который имеет следующие атрибуты: 

  • ID — уникальный идентификатор места;
  • Kindизвестное, дом, работа;
  • Position — географическое положение места;
  • Radius – круговая зона вокруг предполагаемого места.

Основные методы:

// получение текущего места
Place place = await placeMonitor.GetCurrentPlaceAsync();

// регистрация обработчика события PlaceChanged 
placeMonitor.PlaceChanged += placeMonitor_PlaceChanged; 

// получение зафиксированных мест
IList<Place> places = await 
placeMonitor.GetPlaceHistoryAsync (DateTime.Now.AddHours( -1 ), TimeSpan.FromHours( 1 )

В дополнение к формированию простого списка известных мест, Place Monitor API самостоятельно идентифицирует такие места как «Дом» и «Работа»:



«Дом» и «Работа» определяются по следующим критериям: 

  • как часто устройство перемещалось и какой тип активности демонстрировал пользователь;
  • насколько активно использовалось устройство;
  • подключался ли телефон к зарядному устройству.

Классификация занимает обычно 2-3 дня. Необходимо отметить, что «Дом» и «Работа» представляют собой только логические ярлыки для этих двух мест. Например, Place Monitor обнаружит школу как «Работа», если школа посещается в соответствии с критериями, по которым определяется место «Работа».

Если владелец устройства переезжает на новый адрес или меняет работу, Place Monitor обнаружит это в течение 10 дней.

Существуют различные сценарии использования предложенных в API классификаций мест как «Дом» и «Работа», например: 

  • Создание в приложениях более значимых UX. Например, приложение навигации может использовать значения этих ярлыков «Дом» для автоматического создания маршрута из дома на работу;
  • Можно так же использовать классификацию «Дом», чтобы создать геозону вокруг этого места, а затем использовать эту геозону, чтобы рассчитать, как долго устройство находилось Дома или сколько раз устройство выходило из Дома.
  • Приложение может использовать «Дом», чтобы создать геозону вокруг дома и использовать ее, чтобы вызвать некоторую функциональность в устройстве. Или приложение может отправить сообщение родителям о том, что их ребенок приехал домой.

Если приложение хочет отслеживать момент входа и выхода устройства из мест «Дом» или «Работа», в приложении необходимо использовать геофенсинг. Используя PlaceMonitor, приложение может получить список известных мест Places и с помощью описанных атрибутов класса Place (геокоординат и радиуса) построить гео-зону вокруг этого места. 

API спроектирован так, чтобы собирать данные, используя минимальное количество энергии и работая в фоновом режиме. Таким образом, для определения местонахождения устройства логика API использует башни сотовых операторов и точки доступа Wi-Fi

Track Point Monitor API

Track Point Monitor API собирает информацию о перемещениях пользователя. Он похож на инструмент Place Monitor API, однако вместо конкретных часто посещаемых мест фиксирует точки маршрута. Для выяснения местоположения устройства Track Point Monitor API так же использует вышки сотовой связи и точки доступа Wi-Fi.

Пример работы Track Monitor API, используемого в приложении «Tracks»:



Точки в треке регистрируются с 5-минутными интервалами (API будет ждать 5 минут от последней точки трека, и только потом запишет новую) и только тогда, когда минимальное расстояние между текущей и последней точками трека будет не менее 500 метров. Например, если пользователь остается в течение длительного периода времени в пределах 500 метров, Track Point Monitor запишет только одну точку трека для этой области. 

Track Point Monitor API предоставляет следующие параметры класса Place

  • LengthOfStay — рассказывает, как долго устройство находилось в одном месте.
  • Position — географическое положение точки трека.
  • Radius — расчетный радиус круговой области вокруг места. Точность этого значения зависит от различных факторов, например, как устройство используется и факторов окружения таких, как наличие вышек сотовой связи и точек доступа Wi-Fi.
  • Timestap — время фиксирования точки трека (обеспечивается с точностью в 5 минут).

Основные методы:

// получение позиции пользователя в определенное время
RoutePoint routePoint = await routeTracker.GetPointAtAsync( DateTime.Now.AddHours( -1 ) );

// получение маршрута пользователя за определенный интервал
IList<RoutePoint> routePoints = await 
  routeTracker.GetRouteAsync(DateTime.Now.AddHours( -1 ), TimeSpan.FromHours( 1 ) );

Особенности работы с SensorCore SDK

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

Зависимости проиллюстрированы в следующей таблице: 



Как видно из таблицы, акселерометр имеет решающее значение для функционирования Step Counter API и Activity Monitor API. 

Точность определения мест зависит так же от факторов окружающей среды, таких как количество вышек сотовых операторов и точек доступа Wi-Fi, т.е точность является максимальной в густонаселенных районах с большим количеством вышек сотовой связи и пунктами Wi-Fi. Центр определенного места может быть несколько смещен относительно реального местоположения в пределах 500 метров, так как известные места привязываются к вышкам сотовой связи, которые были использованы для определения местоположения.

В тех случаях когда API используется для навигационных приложений, точность можно повысить при помощи данных с GPS-датчиков.

Заключение

В этой статье о  Lumia SensorCore SDK мы перечислили основные возможности и примеры работы API в реально функционирующих приложениях. 

Полезные ссылки

Lumia SensorCore SDK:

Обучающие курсы виртуальной академии Microsoft (MVA)
Центр разработки Windows
Загрузить бесплатную или пробную Visual Studio 2013