Во все устройства, работающие на платформе Windows Phone 7, встроен Assisted GPS (aGPS), который используется картами, камерами и поиском (чтобы показывать результаты, ориентированные на местность, в которой вы находитесь). Доступ разработчиков к информации о местоположении осуществляется с помощью пространства имён System.Device.Location, поддерживаемого .NET 4 и более поздними версиями. Класс GeoCoordinateWatcher выдаёт информацию о местоположении на основе координат широты и долготы.


Работать с GeoCoordinateWatcher сравнительно просто. Принципы работы с этим классом и тестирования приложения на Windows Phone 7 будут разъяснены детально чуть позже. Однако иногда приложению требуется больше чем просто местоположение, ему требуется отслеживание движения или тестирование поведение приложения в различных местах.

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

Не беспокойтесь, решение есть. Windows Phone GPS Emulator (небольшое WPF-приложение) и одна dll-библиотека WP7 позволят вам производить отладку приложения в эмуляторе платформы или на настоящем телефоне не покидая свой дом или офис. После завершения тестирования и отладки вам нужно всего лишь поменять одну строчку кода, после чего приложение переключается в режим использования настоящего GPS.

C помощью GPS Emulator вы можете установить на карте местоположение в любой точке земного шара. Кроме того, вы можете планировать движение по нескольким точкам или использовать сервисы Bing для расчёта направлений движения между точками. Вы можете запланировать маршрут, а приложение симулирует передвижение через заданные точки.

Пакет Windows Phone GPS Emulator:

  • Приложение Windows Phone GPS Emulator
  • Клиент-эмулятор DLL Windows Phone GPS
  • Простой клиент-тестировщик для Windows Phone
  • Полное приложение для Windows Phone, использующее карты Bing (более сложный пример)

GPS Emulator позволяет создавать и воспроизводить сложный путь передвижения, будто вы на самом деле перемещаетесь по этому пути. Вы выбираете приложение для Windows Phone и получаете информацию о местоположении из GPS Emulator в таком виде, в каком поступает информация с настоящего GPS.

Windows Phone GPS Emulator
Windows Phone GPS Emulator

Использование GPS Emulator в вашем приложении для Windows Phone

Для начала, давайте выясним, как GPS Emulator помогает отлаживать приложение для Windows Phone?

После того, как вы скачаете пакет Windows Phone GPS Emulator, вы увидите файл GPS Emulator Client. В этом dll-файле имеется класс GeoCoordinateWatcher, его наименование точно такое же, как у класса System.Device.Location. GeoCoordinateWatcher, но в другом пространстве имён. Этот самодельный, «ненастоящий» класс GeoCoordinateWatcher реализует интерфейс IGeoPositionWatcher, это тот же интерфейс, что и «настоящий» класс System.Device.Location.GeoPositionWatcher. Поэтому, можно сказать, что GPSEmulatorClient.GeoCoordinateWatcher реализует тот же API, что и настоящий System.Device.Location.GeoCoordinateWatcher. Это означает, что оба класса прозрачны для разработчика при использовании API определения местоположения. В программу добавлены все функции, которые не были определены в интерфейсе IGeoPositionWatcher, но имеются в классе System.Device.Location.GeoCoordinateWatcher. В результате вы можете написать приложение с использованием GeoCoordinateWatcher и всего лишь изменить процесс запуска на основе своего оборудования. Вам потребуется добавить указание на использование GPSEmulatorClient с помощью строки «using GPSEmulatorClient«.

В приложении GPSEmulatorPhoneTestClient необходимо определить символ, используя ключевое слово #define. Далее, в конструкторе MainPage нужно использовать строку #if GPS_EMULATOR, что позволяет разделить тестирование приложения и использование его в реальной жизни; пример кода:

// This line has to be the first line in the file
#define GPS_EMULATOR // defining a compiler GPS symbol.

// Init
IGeoPositionWatcher _Watcher;
#if GPS_EMULATOR
_Watcher = new GpsEmulatorClient.GeoCoordinateWatcher();
#else
_Watcher = new System.Device.Location.GeoCoordinateWatcher();
#endif

Поскольку _Watcher содержится в обоих реализациях IGeoPositionWatcher — настоящей и ненастоящей — она может быть приведена к переменной. Начиная с этой точки с помощью метода и свойств GeoCoordinateWatcher можно наблюдать за изменениями местоположения и статуса.

Использование GeoCoordinateWatcher

Как было сказано, класс GeoCoordinateWatcher является частью пространства имён System.Device.Location.GeoCoordinateWatcher обладает следующими свойствами:

  • DesiredAccuracy содержится в типе GpsCoordinateAccuracy, и может быть Default или High. Значение High означает, что поступают данные GPS высокой точности, они предоставляют более точное определение местоположения (до нескольких метров). В этом случае батарея устройства используется более интенсивно.
    Примечание. В одном из конструкторов GeoCoordinateWatcher имеется ввод GpsPositionAccuracy. По умолчанию установлено значение Default, обозначающее невысокую точность определения местоположения.
  • Permission содержится в типе GeoPositionPermission, эта функция определяет уровень доступа приложения к устройству. Windows Phone требует, чтобы вы указали в манифесте приложения, что хотите использовать GPS.
  • Position содержится в типе GeoCoordinate, она фиксирует текущее местоположение, если статус GPS активен.
  • Status содержится в типе GpsPositionStatus и указывает, на то, что в GPS поступают данные.

Существует ещё одна функция, MovementThreshold, она определяет минимальный уровень интервала движения, и по умолчанию это ноль. Необходимо учитывать, что GPS передаёт информацию о событиях с частотой примерно раз в секунду. Это кажется не очень большим объёмом, но если вы двигаетесь не быстро или если вашему приложению не нужно отслеживать передвижение с высокой точностью, установите MovementThreshold в значение, отличное от нуля. Подробнее об этом написано у Джейма Родригеза.

Далее, вам необходимо зарегистрировать следующие события:

  • PositionChanged. Случается, когда сервис определяет изменение местоположения м усётом ограничений, установленных, например, в MovementThreshold
  • StatusChanged. Случается, когда статус сервиса меняется с Initializing, напрмер, в Ready.

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

void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs e)
{
tbTimeAcquired.Text = e.Position.Timestamp.ToString();
tbLatitude.Text = e.Position.Location.Latitude.ToString();
tbLongtitude.Text = e.Position.Location.Longitude.ToString();
}

Как видно, GeoPositionChangedEventArgs удерживает значение, зафиксированное событием PositionChanged. В Position из типа класса GeoCoordinates, помимо прочих свойств, включены значения широты, долготы и времени. В нём могут содержаться данные VerticalAccuracy, высота, скорость и пр.

Вывод данных в приложение выглядит примерно так:

Вывод данных
Вывод данных

Синий кружок показывает текущее местоположение, переданное с помощью Windows Phone GPS Emulator. На картинке вы видите 24-е строение Microsoft — его широта 47,6416, долгота -122,1306.

Несколько правил:

  • Запускайте GPS Emulator с администраторскими правами; программа откроет канал WCF, через который приложение для Windows Phone сможет прочесть эмуляцию местоположения.
  • Удостоверьтесь, что GPS Emulator запущен перед тем, как вызывать метод GPSEmulatorClient.GeoCoordinateWatcherStart. Ни одна из демонстраций по-настоящему не работает с этим сценарием.
  • Для полного доступа ко всем возможностям GPS Emulator вам будет необходимо создать аккаунт на Bing Maps. Это можно сделать на странице bingmapsportal.com.
  • Не забудьте удалить символ #define GPS_EMULATOR перед тем, как производить тестирование на настоящем устройстве.

Windows Phone GPS Emulator – отличное устройство для комфортного домашнего или офисного тестирования приложений для Windows Phone, использующих в свой работе GPS. Но не забывайте тестировать свои приложения и на настоящих устройствах, поскольку информация о местоположении или её отсутствие могут вызывать непредсказуемые результаты.

Пакет Windows Phone GPS Emulator содержит обширную документацию с примерами и объяснением принципа работы программы.

Следите за новостями Windows Phone в твиттере.

Вступайте в команду разработчиков.

Источник: windowsteamblog

Система Orphus