Как начать разработку мобильных приложений, используя Visual Studio и Windows Mobile 6 SDK

Оригинал: https://msdn.microsoft.com/en-us/library/dd721907.aspx

Автор оригинальной статьи: Андрей Радингер (Andrej Radinger), соучредитель компании APPAMundi Limited.

Оригинальная статья опубликована 30 июля 2009 года.

Summary

В этой статье рассказывается, как начать разработку приложений для устройств, работающих под управлением Windows Mobile®, используя для этого привычные инструменты – Microsoft® Visual Studio® 2008 и Microsoft .NET Compact Framework 3.5, специально созданный для Windows Mobile. Также в статье объясняется, как расширить возможности приложений с помощью инструментов, включенных в Windows Mobile SDK.

Инструменты для работы и примеры

Продукты и технологии

  • Microsoft Visual Studio 2005 и Visual Studio 2008
  • Windows Mobile 6
  • Инструменты Windows Mobile 6 SDK
  • Microsoft .NET Compact Framework 3.5

Содержание

Эта статья посвящена разработке клиентских приложений для Window Mobile, работающих в автономном режиме и использующих .NET Compact Framework. .NET Compact Framework (.NET CF) включает некоторые библиотеки из полной версии Microsoft .NET Framework и содержит все необходимое для создания полноценного Windows Mobile приложения. Visual Studio 2008 поддерживает работу с .NET Compact Framework версий 2.0 и 3.5.

Visual Studio и .NET Compact Framework

Если вы используете Visual Studio для разработки настольных приложений, то создать мобильное приложение для вас не проблема – у вас уже есть все необходимые для этого знания и инструменты. Конечно, между платформой для настольных компьютеров и платформой для мобильных устройств есть некоторые различия, и подходы к разработке несколько отличаются, однако общие принципы остаются те же.

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

  • Какие инструменты разработки у вас есть, и с какими вам нравится работать?
  • На какой мобильной платформе должно работать ваше приложение – на Windows Mobile для смартфонов или на Windows Mobile для карманных компьютеров и коммуникаторов?
  • Какую версию .NET Compact Framework вы хотите использовать?

От ответов на эти вопросы зависит как общее направление будущего проекта, так и то, как к нему приступить. Вот еще несколько важных вопросов, над которыми следует поразмыслить:

  • Ваше приложение будет работать автономно, или ему потребуется подключение к Интернет?
  • Сколько стоит Интернет-трафик у вашего провайдера сотовой связи?
  • Хотите ли вы использовать возможности сенсорного экрана?
  • Должно ли будущее приложение работать на нескольких типах устройств, или только на одном?
  • Каковы ваши требования к безопасности?

Проанализируйте свои ответы, это поможет вам выбрать верное направление. В этой статье рассказано, как с помощью .NET Compact Framework создать мобильное приложение, работающее автономно.

Visual Studio

Возможность разрабатывать мобильные приложения появилась еще Visual Studio 5.0. В Visual Studio 2005 средства разработки приложений для Windows Mobile стали важной частью среды, и теперь разработчики настольных приложений могут легко перейти к разработке приложений для мобильных устройств.

Visual Studio 2005 позволяет создавать приложения, использующие .NET CF 2.0 и 1.0. Вместе с Visual Studio 2005 идут инструменты и SDK, позволяющие создавать приложения для смартфонов (Smartphone 2003), для карманных компьютеров (Pocket PC 2003 SE) и Windows CE. Если в Visual Studio 2005 нужна поддержка Windows Mobile 5.0 (редакции для смартфонов, карманных компьютеров и коммуникаторов) или Windows Mobile 6 (редакции Standard, Classic и Professional), необходимо дополнительно установить соответствующие SDK. Для Windows Mobile 5.0 существует два SDK – один для смартфонов, другой для карманных компьютеров и коммуникаторов. Для Windows Mobile 6 тоже есть два SDK – один для редакции Standard, второй для редакции Classic и Professional. В SDK входит набор инструментов, которые помогут ускорить процесс разработки и сделают его более приятным – это эмуляторы устройств, средства для работы с GPS, эмулятор оператора сотовой связи и многое другое.

В Visual Studio 2008 расширены возможности среды разработки и введена дополнительная функциональность. По умолчанию Visual Studio 2008 поддерживает Windows Mobile 5.0, для разработки приложений для Windows Mobile 6 требуется дополнительно установить нужную редакцию SDK. Visual Studio 2008 позволяет создавать приложения, использующие .NET Compact Framework версий 2.0 и 3.5. Некоторые новые возможности Visual Studio 2008 перечислены ниже:

  • Поддержка разработки unit-тестов для мобильных устройств (доступна в редакциях Visual Studio Developer Edition и Visual Studio Team Suite).
  • Удаленный монитор производительности.
  • Диспетчер безопасности устройств (компонент Visual Studio 2008 IDE).
  • Новые эмуляторы устройств и диспетчер эмуляторов устройств (Device Emulator Manager) версии 3.0.
  • Усовершенствованный мастер новых проектов для Windows Mobile приложений.

Поддержка ранних версий .NET CF в Visual Studio 2005 и Visual Studio 2008 дает возможность начать использовать последнюю версию средств разработки, и при этом сохранить совместимость с уже существующими проектами, которые были написаны на более ранних платформах.

Выбор среды разработки и платформы может зависеть от ответа на вопрос – как обеспечить совместимость с текущими проектами, над которыми вы сейчас работаете?

.NET Compact Framework

.NET Compact Framework унаследовал архитектуру полной версии .NET Framework, но, как несложно догадаться из названия, .NET CF меньше – он содержит только подмножество библиотек классов полной версии. Кроме всего прочего это означает, что большая часть приложений, написанных для .NET CF, будет без каких-либо модификаций работать на настольном компьютере. Функциональность .NET CF была сокращена по двум причинам – во-первых, для компактных устройств не нужно поддерживать некоторые возможности настольных приложений, а во-вторых, объемы памяти в смартфонах и карманных компьютерах ограничены. В документации к Visual Studio подробно описано, чем .NET Compact Framework отличается от .NET Framework. Наиболее важные отличия .NET CF 2.0 от .NET Framework перечислены ниже:

  • • .NET CF не поддерживает чтение файлов конфигурации. Для этого используются внешние инструменты, например, Mobile Client Software Factory (MCSF) или «фреймворк интеллектуального устройства» (“smart device framework ”), который является частью OpenNetCF (OpenNETCF SDF).
  • .NET CF не поддерживает ClickOnce.
  • .NET CF не поддерживает Remoting.
  • .NET CF не поддерживает двоичную сериализацию.
  • .NET CF не поддерживает печать.
  • По сравнению с версией 1.0 в .NET CF 2.0 внесены некоторые усовершенствования – улучшена производительность и совместимость с .NET Framework и с элементами управления Windows Forms. Некоторые новые и усовершенствованные элементы управления перечислены ниже:
    • MonthCalendar. Добавлен в .NET CF 2.0.
    • DataGrid. Существенно улучшен.
    • DateTimePicker. Добавлен в .NET CF 2.0.
    • LinkLabel. Добавлен в .NET CF 2.0.
    • Splitter. Добавлен в .NET CF 2.0.
    • WebBrowser. Добавлен в .NET CF 2.0.

Поскольку Visual Studio 2005 и 2008 позволяют разрабатывать приложения для разных разрешений и ориентаций экрана, в .NET CF 2.0 усовершенствованы средства для управления экраном и расположением элементов интерфейса. При изменении ориентации с книжной на альбомную и наоборот все элементы формы должны уместиться на экран, а само приложение не должно потерять часть функциональности. Для этого в .NET CF 2.0 были добавлены:

  • Механизмы для докирования и привязки элементов.
  • Автоматические полосы прокрутки. Если при изменении ориентации экрана какие-то элементы формы окажутся вне видимой области, автоматически будут созданы вертикальные и/или горизонтальные полосы прокрутки, благодаря чему никакие элементы интерфейса не потеряются.
  • Возможность переключения между элементами управления с помощью клавиши TAB.

Работа с данными в .NET CF 2.0 происходит почти так же, как в полной версии .NET Framework – ADO.NET поддерживается практически в полном объеме, поддерживается взаимодействие с различными версиями Microsoft SQL Server Compact Edition, работа с XML, веб-службами и файлами. .NET CF поддерживает наборы данных (datasets), привязку данных (data binding) и коллекции (collections). В .NET CF появился класс SqlCeResultSet, предоставляющий новый механизм доступа к данным и управления ими прямо из приложения, использующий в качестве хранилища данных SQL Server CE. Класс SqlCeResultSet – это своеобразная комбинация набора данных (dataset) и курсора (data reader). SqlCeResultSet может быть определен как обновляемый и прокручиваемый курсор, и, по сравнению с dataset, работает с базами данных SQL Server CE более оптимально.

.NET Compact Framework 3.5 работает на тех же платформах, что и .NET CF 2.0, но его функциональность несколько расширена, что дает разработчикам и пользователям больше возможностей. В .NET CF 3.5 добавлены:

  • Поддержка Windows Communication Foundation (WCF).
  • Поддержка компактной версии LINQ – синтаксиса интегрированных в язык запросов.
  • Поддержка сертификатов клиентов для аутентификации вызовов веб-служб.
  • Различные новые API.
  • Улучшена поддержка отладки.

Инструменты Windows Mobile 6 SDK

Инструменты Windows Mobile 6 SDK дополняют имеющиеся в Visual Studio и .NET CF средства разработки. Этот пакет включает примеры кода, документацию, заголовочные файлы и библиотеки для создания приложений, работающих на платформе Windows Mobile 6. Кроме этого, в SDK 6 добавлены полезные утилиты для разработки и тестирования приложения без реальных устройств и инфраструктуры. Загрузить Windows Mobile 6 SDK можно бесплатно. Для установки пакета на компьютере должны быть уже установлены Visual Studio 2005 или 2008 и .NET CF. Существует две редакции SDK: Windows Mobile 6 Standard SDK (ранее эта редакция называлась Windows Mobile SDK для смартфонов) и Windows Mobile 6 Professional SDK, предназначенная для редакций Windows Mobile Classic и Professional (ранее эти редакции назывались Windows Mobile SDK для карманных компьютеров и Windows Mobile SDK для коммуникаторов, соответственно).

Диспетчер эмуляторов устройств

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

  • Запустить эмулятор.
  • Перезапустить эмулятор.
  • Завершить работу эмулятора.
  • «Поместить устройство в крэдл». Чтобы воспользоваться этой функцией на компьютере с Windows XP должен быть установлен Microsoft ActiveSync® 4.5, а на компьютере с Windows Vista – Windows Mobile Device Center (WMDC). Так как многие приложения могут менять свое поведение при наличии соединения с ActiveSync, это замечательная функция,которая позволяет тестировать ваши приложения на эмуляторе устройств!
  • «Вынуть устройство крэдла».
  • Сохранять различные состояния эмулятора. По умолчанию для каждого эмулятора сохраняется только одно состояние, но функция «Save As» позволяет сохранить в папке My Device Emulators несколько состояний, и при необходимости возвращаться к ним.

Запустить диспетчер эмуляторов устройств можно из Visual Studio, из проводника Windows или из командной строки.

Эмуляторы устройств, работающих под управлением Windows Mobile

В Visual Studio включены эмуляторы устройств, работающих под управлением мобильных операционных систем, которые поддерживает сама Visual Studio. В SDK включены эмуляторы для других платформ, которые поддерживает тот или иной SDK. Эмуляторы очень удобны при программировании, отладке и тестировании приложения, поскольку они позволяют провести весь цикл разработки на рабочей станции и не использовать реальные мобильные устройства. Это особенно актуально, когда работу над проектом ведет команда – отпадает необходимость приобретать реальные устройства для каждого разработчика, достаточно настроить один эмулятор и раздать его всем разработчикам.

Эмуляторы имитируют поведение и внешний вид реальных устройств на базе процессора ARM. Однако, несмотря на все прелести работы с эмуляторами, мы настоятельно рекомендуем перед выпуском готового приложения, протестировать его на реальном устройстве.

Эмулятор устройства можно запустить либо в среде Visual Studio (сделать это можно вручную или автоматически при развертывании приложения), либо, как уже упоминалось, из диспетчера устройств. После запуска эмулятора, его можно настроить под свои задачи. Чтобы открыть окно настроек, в главном меню нужно выбрать пункт File -> Configure.

Доступ к файловой системе рабочей станции

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

Теперь из эмулятора устройства можно получить доступ к разделяемой папке, в проводнике эмулятора эта папка называется Storage Card.

Подключение эмулятора устройства к сети

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

После этого необходимо настроить адаптер в самом эмуляторе (Start/Settings/Connections/Network Cards/NE2000 Compatible Ethernet Driver).

Если все сделано правильно, эмулятор получит доступ к сетевым ресурсам рабочей станции и к Интернету.

Подключиться к рабочей станции можно также через ActiveSync или через Windows Mobile Device Center. Как это сделать, описано чуть ниже.

Cellular Emulator

Cellular Emulator – это утилита, входящая в Windows Mobile 6 SDK. Она имитирует подключение к сети сотовой связи и может использоваться для тестирования на эмуляторе устройства приложений, использующих возможности телефона. Чтобы подключить Cellular Emulator к эмулятору устройства, необходимо ассоциировать COM-порт утилиты с физическим портом эмулятора.

После того, как утилита будет настроена и запущена, эмулятор устройства для Windows Mobile 6 Professional сможет обрабатывать входящие и исходящие звонки, получать и отправлять SMS и использовать службы передачи данных, такие как GPRS и 3G.

Fake GPS

Как несложно догадаться, утилита Fake GPS позволяет эмулятору или реальному устройству работать с GPS, даже при отсутствии реального GPS-приемника. Другой вариант использования этой утилиты – тестирование работы приложения при отсутствии GPS покрытия. Вы должны изучить оба, как реальный, так и эмулируемый GPS. Как вы сможете убедиться чуть позже, когда будете работать с учебным приложением, для того чтобы получить доступ к GPS, вам нужно использовать сборку Microsoft.WindowsMobile.Samples.Location, включенную в пример работы с GPS из SDK. Откройте в Visual Studio «GPS sample solution» из SDK и соберите проект. Получившая сборка потребуется для приложений, которые, так или иначе, используют GPS.

Fake GPS – это небольшое приложение, которое устанавливается на эмулятор устройства и работает как служба. Утилита случайным образом выбирает GPS-координаты из текстового файла, а ваше приложение работает так, как будто имеет дело с реальным GPS-приемником и получает настоящие GPS-координаты.

Другие инструменты Windows Mobile 6 SDK

В SDK входят и другие утилиты, но так как они не используются в учебном приложении, мы только коротко упомянем о некоторых из них.

Библиотека Local Server Framework (FakeServer) помогает тестировать работу приложения с различными удаленными сервисами. Эта библиотека позволяет создавать «виртуальные» сервера, работающие прямо на эмуляторе устройства.

Еще одна утилита, Hopper, предназначена для нагрузочного тестирования интерфейса приложений на эмуляторе или на реальном устройстве. Hopper случайным образом имитирует события ввода – нажатия на клавиши и касания экрана.

ActiveSync или Windows Mobile Device Center (WMDC)

Эмулятор может получить доступ к ресурсам рабочей станции – файловой системе, Интернету, веб-службам, службам WCF, базам данных, - но для этого нужно специально настраивать как сам эмулятор, так и рабочую станцию. Есть другой подход, и он кажется более простым и понятным – подключить эмулятор устройства через ActiveSync или через WMDC. При этом имитируется ситуация, как будто устройство вставлено в крэдл и получило доступ к ресурсам рабочей станции.

Приложение Microsoft ActiveSync 4.5 и более поздних версий устанавливается на Windows XP независимо и может быть использовано для работы с Windows Mobile 6. ActiveSync позволяет установить соединение между компьютером и подключенным к нему устройством (или эмулятором устройства) и задать настройки синхронизации данных, например, содержимого Microsoft Office Outlook, файлов и т.д. С помощью ActiveSync можно получить доступ к файловой системе устройства и копировать данные с устройства на рабочую станцию и с рабочей станции на устройство, для этого можно использовать проводник Windows.

Window Vista не поддерживает ActiveSync, вместо него здесь используется Windows Mobile Device Center (WMDC). Основная идея WMDC осталась такая же, как у ActiveSync, но пользовательский интерфейс и архитектура приложения значительно улучшены.

На устройствах, использующих Windows Mobile, ActiveSync уже установлен, т.к. является компонентом операционной системы.

Настройка среды разработки

Итак, вы познакомились с инструментами разработки приложений для Windows Mobile 6. Но перед тем как приступить к разработке первого приложения вам нужно настроить среду разработки, т.е. установить следующие продукты:

  1. Visual Studio 2005 или 2008.
  2. Последние обновления для Visual Studio, .NET Framework и .NET Compact Framework.
  3. Инструментарий Windows Mobile 6 SDK редакции Standard или Professional (можно обе).
  4. Последние версии эмуляторов устройств, не включенные в SDK.
  5. ActiveSync (если у вас установлена Windows XP) или Windows Mobile Device Center (если вы работаете на Windows Vista).
  6. SQL Server CE 3.5 SP1 (и все доступные для него обновления) для работы с локальными базами данных.

Теперь вы готовы создать свое первое Windows Mobile приложение.

Разработка первого приложения

Проект мобильного приложения создается точно так же, как и проект обычного настольного приложения. Создайте в Visual Studio новый проект, выберите язык, затем выберите шаблон проекта «Smart Device» и укажите имя проекта и его расположение.

Следующий шаг специфичен для Windows Mobile – необходимо указать платформу, на которой приложение будет работать (Target Platform), и версию .NET Compact Framework, которую приложение будет использовать. Как уже упоминалось, Visual Studio 2005 поддерживает .NET CF 1.0 и 2.0, а Visual Studio 2008 – .NET CF 2.0 и 3.5. Платформа может быть любой: Windows Mobile 5.0 или 6, Windows CE, или даже Pocket PC 2003.

Теперь у вас есть стандартное решение, содержащее каркас простейшего приложения. Обратите внимание, что форма Form1 представлена как форма на мобильном устройстве. Обрамление формы можно выключить. Среда Visual Studio выглядит привычно, присутствуют все стандартные панели инструментов и окна: Solution Explorer, Properties, Form Designer, Code Editor, и т.д. Правда, добавилась панель инструментов, специально предназначенная для мобильных решений – здесь можно выбирать и настраивать устройства и эмуляторы, подключаться к ним, менять ориентацию экрана в конструкторе форм с книжной на альбомную и наоборот.

Поскольку .NET Compact Framework – это подмножество .NET Framework, вам доступны некоторые элементы управления, знакомые вам по .NET Framework. Принципиально подход к разработке и созданию пользовательского интерфейса такой же, как и при создании настольных приложений, поэтому мы не будем на этом останавливаться.

Создание пользовательского интерфейса

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

Меню в Windows Mobile расположено внизу экрана. Оно создается точно так же, как и меню для настольных приложений, однако, лучше не создавать для мобильных приложений меню более чем с тремя уровнями вложенности, иначе меню становится нечитаемым. Два пункта меню первого уровня можно связать с левой и правой программируемыми клавишами устройства. Обычно с левой программируемой клавишей связывают действие по умолчанию, а с правой – все остальные действия и вложенные меню.

На устройствах, работающих под управлением Windows Mobile 6, можно изменять ориентацию экрана. Для разработчика интерфейса это означает, что интерфейс должен остаться удобным при любой ориентации. Автоматические полосы прокрутки, как уже говорилось, - не самое хорошее решение, гораздо лучше использовать механизмы привязки и докирования элементов, которые поддерживаются начиная с .NET CF 2.0.

.NET CF доступны все стандартные элементы управления: текстовое поле, надпись, диалоговое окно, закладки, таблицы-сетки и т.д. Кроме того, имеется множество дополнительных элементов управления, перенесенных из .NET Framework, например, веб-браузер.

Кнопка «Х» в правом верхнем углу формы минимизирует окно, а не закрывает его. Чтобы эта кнопка закрывала окно, свойству формы MinimizeBox нужно присвоить значение False. Тогда вместо крестика появится надпись «ok», и кнопка будет закрывать окно.

Управление вводом

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

Касание – это способ ввода для мобильных устройств с сенсорным экраном, касание эквивалентно двойному щелчку левой кнопкой мыши. Касание и удерживание эквивалентно щелчку правой кнопкой мыши – открывается контекстное меню выбранного элемента. Касания обрабатываются точно так же, как события мыши MouseDown, MouseUp, MouseMove, Click, DoubleClick в настольном приложении.

Экранная панель ввода имитирует работу настоящей клавиатуры. Прикосновения к «клавишам» вызывают события, аналогичные тем, что возникают при нажатии на клавиши настоящей клавиатуры: KeyUp, KeyDown и KeyPress

Панель ввода – это элемент управления .NET CF. Панелью ввода, размещенной на форме, можно управлять программно. Например, когда текстовое поле получает фокус, панель ввода можно сделать видимой:

 inputPanel1.Enabled = true;

Или невидимой, когда текстовое поле теряет фокус:

 inputPanel1.Enabled = false;

Отладка и обработка ошибок

Ошибки в .NET CF обрабатываются точно так же, как в полной версии .NET Framework – с помощью конструкции try/catch/finally. В Microsoft Visual Basic так же поддерживаются конструкции On Error GoTo и Resume [Next], но все же блок try/catch/finally предпочтительнее, поскольку такая конструкция требует меньше ресурсов. Средства отладки в .NET CF тоже стандартные. Развертывание и отладку приложений можно осуществлять как на реальных устройствах, так и на эмуляторах.

Unit-тесты в проектах для Windows Mobile поддерживается, начиная с версии .NET Compact Framework 3.5.

Работа с данными

.NET CF может работать с различными источниками данных: SQL Server CE, XML, SQL Server, веб-службы и службы WCF. Принципы работы с данными здесь такие же, как в .NET Framework, и что очень важно, .NET CF практически полностью поддерживает возможности ADO.NET.

XML – это очень распространенный формат, и большинство источников данных могут экспортировать данные в XML или импортировать данные из XML. Несмотря на то, что XML «понимают» почти все источники данных, мы не рекомендуем использовать это формат, поскольку для работы с ним требуются значительные ресурсы. XML не оптимизирован, данные не индексированы, а значит, их обработка будет происходить гораздо медленнее, чем, например, в реляционной базе данных. Так что XML стоит использовать, только когда нет другого выхода.

Из мобильного приложения можно получить прямой доступ к SQL Server. Если нет необходимости создавать приложение, работающее в автономном режиме, а так же если вы гарантируете наличие постоянного соединения, используйте SQL Server. Хранимые данные будут всегда актуальны и доступны в реальном времени, кроме того будет меньше конфликтов. Хороший пример мобильного приложения, использующего SQL Server, – это «Склад». Для этого типа приложений постоянное соединение с SQL Server не просто применимо в полном объеме, а даже желательно.

Веб-службы и службы WCF можно использовать для передачи данных в n-уровневую среду при отсутствии прямого доступа к SQL Server, либо для репликации. При этом источник данных может быть любым, лишь бы его поддерживал .NET CF.

SQL Server Compact Edition

SQL Server Compact Edition – это, пожалуй, наиболее оптимальный источник данных для мобильных приложений. SQL Server CE – это только источник данных, и ничего больше, в нем есть только таблицы. Однако для таблиц предусмотрено все необходимое – индексы, первичные и внешние ключи, ссылочная целостность и ограничивающие условия. В SQL Server CE нет триггеров, т.к. он не поддерживает выполнение кода, хранящегося на сервере. Помимо того, что SQL Server CE – это реляционная база данных, у него есть еще одно существенное преимущество - SQL Server CE может выступать как подписчик при репликации с SQL Server. Репликацией в этом случае очень просто управлять программными средствами, а все конфликты будут разрешаться централизовано, администратором.

Процедура добавления в проект Windows Mobile приложения нового источника данных точно такая же, как в полной версии .NET Framework. В качестве источника данных необходимо выбрать Microsoft SQL Server Compact Edition 3.x, затем нужно указать путь к файлу базы данных (все файлы баз данных SQL Server CE имеют расширение «.sdf»). База данных может находиться на локальном диске или на устройстве, подключенном к хосту через ActiveSync или WMDC.

Поскольку SQL Server CE - это локальный источник данных, во время развертывания приложения база данных копируется на устройство. Следовательно, в приведенном выше примере строка подключения (connection string), которая была создана при выборе файла базы данных, окажется некорректной. Вам будет задан вопрос – следует ли изменить строку подключения так, чтобы она всегда ссылалась на папку приложения, которая расположена на устройстве.

Привязка данных

Как только в проект будет добавлена база данных, с ней можно начинать работать, используя стандартные средства ADO.NET. Элемент управления можно связать с источником данных напрямую или через объект Data Binding. Для работы с данными на устройстве можно воспользоваться стандартными наборами данных (datasets), правда тут есть одна проблема – в памяти создается копия данных, которые и так хранятся на устройстве, т.е. ресурсы устройства используются очень неэффективно. Обойти эту проблему можно – в SQL Server CE существует специальный адаптер для обработки данных SqlCeResultset. Это оптимизированный, обновляемый, прокручиваемый курсор, который позволяет получить доступ к таблицам SQL Server CE прямо из приложения, при этом нет необходимости подключать наборы данных. Поэтому мы рекомендуем использовать именно SqlCeResultset.

Для работы с данными, хранящими в БД SQL Server CE, необходимо подключить к проекту пространство имен System.Data.SqlServerCe.

В приведенном ниже примере показано, как задать пространство имен и как создать и использовать объект SqlCeResultset.

 using System.Data.SqlServerCe;
...
SqlCeResultSet rs;
SqlCeCommand cmd = new SqlCeCommand(commandText, sqlCeConnection);
rs = cmd.ExecuteResultSet(ResultSetOptions.Scrollable);
dataGrid1.DataSource = rs;

Установка и упаковка

Последний этап в цикле разработки – это установка готового решения на устройство и его упаковка для последующего распространения. Существует несколько способов развертывания установки приложения на устройстве или эмуляторе: инсталляция во время разработки (Development IDE deployment), создание инсталлятора для устройства (Device Installer) и создание инсталлятора для настольного компьютера (Desktop Installer). Мы рассмотрим только первые два способа.

Инсталляция во время разработки

Самый простой способ установить приложение на устройство – это подключить устройство к рабочей станции, где велась разработка, через ActiveSync или WMDC. Этот способ позволяет установить приложение в процессе разработки и отладки.

Сначала нужно выбрать устройство или эмулятор, где будет установлено приложение.

После этого нужно подключиться к устройству. Сделать это можно вручную (на панели инструментов для этого есть специальная кнопка), или же соединение будет выполнено автоматически во время установки.

Для начала установки нужно, как обычно, нажать клавишу F5 или выбрать пункт Start из меню Debug. Будет запрошено подтверждение – правильно ли указано устройство или эмулятор, на которое будет установлено приложение (кстати, вызов этого подтверждения можно запретить). Сначала Visual Studio проверяет, установлены ли на устройстве все необходимые компоненты для запуска приложения. Если какие-то компоненты отсутствуют, они будут установлены автоматически. Понятно, что обязательный компонент – это .NET Compact Framework, кроме него приложению может потребоваться SQL Server CE и другие компоненты, не входящие в состав .NET CF. На приведенной ниже иллюстрации показана строка состояния, которая уведомляет, что во время развертывания на устройство был установлен .NET CF 3.5.

Инсталляция во время разработки – это достаточно надежный и быстрый способ установить на подключенном к рабочей станции устройстве корректно работающее приложение.

Инсталлятор для устройства

Крайне маловероятно, что все мобильные устройства, куда нужно установить приложение, попадут на рабочий стол к разработчику. Впрочем, в этом и нет никакой необходимости, к тому же такой подход не решит проблему – как делать обновления продукта в будущем. Есть другой способ – создание инсталлятора приложения, который будет запущен прямо на мобильном устройстве, при этом никаких подключений к компьютеру разработчика не потребуется. Все нужные сборки проекта и необходимые для работы компоненты упаковываются в один или несколько CAB-файлов, эти файлы копируются на устройство и уже там запускаются. Приложение будет установлено со всеми предопределенными параметрами. Готовый CAB-файл можно распространять по электронной почте, через веб-сайт, копировать на внешние карты памяти, или переписать на устройство, подключив его к рабочей станции через ActiveSync или WMDC.

Для создания проекта инсталлятора нужно открыть диалоговое окно Add New Project, выбрать тип проекта Setup and Deployment, затем в списке готовых шаблонов выбрать Smart Device CAB Project.

Теперь нужно указать, где находится готовое приложение (то, что получилось на выходе проекта, с которым вы работали).

После этого выходные файлы проекта автоматически будут добавлены в папку «Application Folder» инсталлятора.

На закладке File System показаны различные системные папки: Global Assembly Cache (GAC), Program Files, Windows, Startup и Fonts. Файлы проекта можно помещать, где угодно, а при необходимости можно создать дополнительные папки.

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

При развертывании проекта можно изменить настройки реестра и добавить для приложения новые ключи.

Считается хорошей практикой распространять и устанавливать необходимые для работы приложения компоненты (.NET CF, SQL Server CE) отдельно от самого приложения, чтобы основной CAB-файл был небольшим. По умолчанию, компоненты не включены в выходной CAB-файл, но их можно добавить в проект.

После того, как все необходимые для развертывания параметры заданы, проект нужно собрать. На выходе получится CAB-файл, который можно распространять и запускать прямо на мобильном устройстве.

Дополнительные возможности

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

Интеграция с Pocket Outlook Object Model (POOM)

POOM API – это компонент библиотеки Microsoft.WindowsMobile.PocketOutlook. Используя POOM, можно получить доступ к объектам Calendar, Contacts и Tasks. Вся функциональность, которую использует POOM, основана на классе OutlookSession, поэтому на уровне приложения всегда должен присутствовать экземпляр этого объекта.

В приведенном ниже примере видно, что объект OutlookSession продекларирован впервые, и что создан экземпляр этого объекта.

 using Microsoft.WindowsMobile.PocketOutlook;
 
namespace WP_FirstApp
{
    public partial class Form1 : Form
    {
        private OutlookSession outlook;
 
        private void Main_Load(object sender, EventArgs e)
        {
            outlook = new OutlookSession();

После создания экземпляра объекта OutlookSession его можно использовать для всех функций, связанных с объектами и коллекциями Outlook.

В этом примере показано, что создать новую задачу из приложения очень просто.

 Task task = new Task();
task.Subject = textBox1.Text;
task.Body = textBox2.Text;
outlook.Tasks.Items.Add(task);

Новая задача будет добавлена в список задач Pocket Outlook, и теперь к ней можно обратиться либо прямо из списка задач, либо из приложения. Из приложения можно получить доступ и к другим задачам и вносить в них какие-либо изменения.

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

 Contact contact = outlook.Contacts.Items.AddNew();
contact.FirstName = textBox1.Text;
contact.LastName = textBox2.Text;
contact.Update();

Для выбора существующего контакта следует использовать объект класса ChooseContactDialog. Этот же объект предоставляет доступ к выбранному контакту и его свойствам. С помощью свойства RestrictContacts и установленного фильтра можно фильтровать контакты, которые будут показаны пользователю. Фильтровать контакты можно по любому полю.

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

 ChooseContactDialog dialog = new ChooseContactDialog();
dialog.RestrictContacts = "[Department] = \"Field\"";
dialog.Title = "Assign To";
 
if (dialog.ShowDialog() == DialogResult.OK)
{
    str = dialog.SelectedContact.BusinessTelephoneNumber;
}

Если предопределенного набора свойств коллекций Tasks, Calendar или Contacts недостаточно, можно создать Custom Properties. Такие свойства нельзя синхронизировать через ActiveSync, и в Pocket Outlook они недоступны.

Обмен сообщениями

Про обмен сообщениями рассказано в следующих разделах – Электронная почта и SMS-сообщения.

Электронная почта

Доступ к электронной почте предоставляет объект EmailMessage, который включает все стандартные свойства электронного письма: Attachments, Bcc, BodyText, CC, Importance, Subject, To и т.д.

В приведенном ниже примере показано, как создать электронное письмо, задать его свойства и отправить созданное письмо выбранному в предыдущем примере адресату.

 EmailMessage email = new EmailMessage();
email.To.Add(new Recipient(dialog.SelectedContact.Email1Address));
email.Subject = textBox1.Text;
email.BodyText = textBox2.Text;
email.Send("ActiveSync");

Этот фрагмент кода поместит электронное письмо в папку Outbox, и оно будет там находиться, пока пользователь не выполнит синхронизацию. Синхронизацию можно вызвать программными средствами, для этого существует метод Synchronize.

SMS-сообщения

Обработка SMS-сообщений похожа на обработку электронных писем. Не считая нескольких свойств, разница в том, что SMS-сообщение отправляется сразу же при вызове метода Send, а электронное письмо ждет синхронизации.

В этом примере показано, как создать и отправить SMS-сообщение.

 SmsMessage sms = new SmsMessage();
sms.To.Add(new Recipient("123456"));
sms.Body = "WP_FirstApp SMS message";
sms.Send();

Перехват SMS-сообщений

Приложение может перехватывать SMS-сообщения с помощью объекта MessageInterceptor. Этот объект включен в пространство имен Microsoft.WindowsMobile.PocketOutlook.MessageInterception. Перехватываемые сообщения можно фильтровать по тексту, теме или отправителю. Использование SMS как транспорта для сообщений позволяет передавать данные в приложение без вмешательства пользователя. Сообщения можно перехватывать, даже если приложение не запущено.

Этот пример показывает, как реализовать перехват SMS-сообщений.

 // SMS Interception Setup
smsInterceptor = new
    MessageInterceptor(InterceptionAction.NotifyAndDelete);
smsInterceptor.MessageCondition = new MessageCondition(
    MessageProperty.Sender,
    MessagePropertyComparisonType.Equal,
    "+14254448851");
smsInterceptor.MessageReceived +=
    new MessageInterceptorEventHandler(
        smsInterceptor_MessageReceived);
 
// SMS Interception event handler
private void smsInterceptor_MessageReceived(
    object sender,
    MessageInterceptorEventArgs e)
{
    if (e.Message.GetType() == typeof(SmsMessage))
    {
        SmsMessage message = (SmsMessage)e.Message;
        //do something with message

Телефония

Делать звонки можно прямо из приложения, без обращения к встроенному в устройство номеронабирателю. Для этого используется класс Phone, входящий в библиотеку Microsoft.WindowsMobile.Telephony. Приведенный ниже пример показывает, как позвонить по номеру, который был набран в последний раз.

 using Microsoft.WindowsMobile.Telephony;
 
private void MakeVoiceCall()
{
    Phone phone = new Phone();
    phone.Talk(dialog.SelectedContact.BusinessTelephoneNumber);
}

Заключение

Разработка приложений для платформы Windows Mobile не сложнее, чем разработка настольных приложений. Для создания мобильного приложения используются похожие инструменты и приемы, но между .NET Compact Framework и .NET Framework есть некоторые существенные различия. .NET Compact Framework поддерживает большую часть классов и элементов управления полной версии, но некоторая функциональность специально приспособлена для использования на мобильных устройствах и учитывает их ограничения.

Чтобы мобильное приложение было более удобным, в него очень часто добавляется характерная для мобильных устройств функциональность – интеграция с POOM, использование возможностей телефона, GPS и т.д. Для разработки в Visual Studio приложений, которые будут работать на платформе Windows Mobile 6, необходимо установить Windows Mobile 6 SDK. В SDK входят эмуляторы устройств и другие полезные инструменты, которые позволяют разрабатывать и тестировать все специфичные для мобильного телефона функции (например, GPS) даже без наличия реальных устройств.

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

Об авторе

Андрей Радингер (Andrej Radinger) является MVP (ценным профессионалом) по разработке приложений для мобильных устройств, MCSD (сертифицированным разработчиком Майкрософт), MCDBA (сертифицированным администратором баз данных Майкрософт), и MCT (сертифицированным тренером Майкрософт). Андрей – соучредитель компании APPAMundi Limited, которая специализируется на разработке и внедрении корпоративных мобильных решений. Андрей занимается разработкой, консультированием и подготовкой специалистов уже более 13 лет, из них 10 лет он специализируется на всех направлениях, связанных с мобильными решениями и технологиями компании Майкрософт. Кроме этого Андрей считается Technology Champ в сообществе профессионалов по мобильным решениям и локальной группе новостей, а так же регулярно делает доклады на мероприятиях, которые проводит компания Майкрософт в регионе EMEA (Европа, Ближний Восток и Африка), включая Tech Ed.

Связаться с Андреем можно по электронной почте: andrej@appamundi.com

Дополнительная информация

  • Статья на MSDN: Differences between .NET FX and .NET CF (Различия между .NET FX и .NET CF)
  • Windows Mobile Developer Center. Один из лучших сайтов для начинающих разработчиков приложений для Windows Mobile. Здесь можно найти множество примеров, массу документации и технических описаний, блогов и ресурсов для загрузки.
  • Microsoft Mobile Development Handbook. Очень полезная книга, полностью описывающая аспекты разработки приложений для мобильных устройств.

Смотрите также

Другие ресурсы

Официальный сайт Windows Mobile: https://www.microsoft.com/windowsmobile

Перевод: Светлана Шиблева