Сегодня мы поговорим о
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 в реально функционирующих приложениях.