Программирование для смартфонов

Особенности программирования для смартфонов

В этой главе мы научимся создавать приложения для смартфонов под управлением системы Windows Mobile 5.0. Так получилось, что в России смартфоны под управлением Smartphone 2003 поначалу не получили широкого признания Признанными лидерами на рынке «умных» телефонов были такие марки, как Nokia, Siemens и Sony Ericsson, которые использовали в телефонах операционную систему Symbian. И если на рынке КПК компании Microsoft удалось потес­нить своего вечного конкурента PalmOs, то в сфере мобильной связи основная борьба еще впереди.

Небольшие изменения начались, когда в продаже появились смарт­фоны под управлением Windows Mobile 5.0, выпускаемые азиатски­ми компаниями. В этой главе мы только познакомимся с основными особенностями программирования для смартфонов, а в следующей главе более подробно изучим платформу Windows Mobile 5.0.

Если. NET Compact Framework можно считать подмножеством пол­ной версии. NET Framework, то смартфоны можно считать подмно­жеством карманных компьютеров. Причем разница между ними стремительно стирается. Но, тем не менее, между двумя типами мобиль- ных устройств есть существенные различия. Во-первых, смартфоны являются прежде всего мобильными телефонами, пред­назначенными для телефонных разговоров. Во-вторых, размер эк­рана у смартфонов меньше, чем у стандартных карманных компью­теров, и составляет 176 х 220 пикселов, тогда как у КПК размер экрана 240 х 320 пикселов.

ПРИМЕЧАНИЕ——————————————————————————-

В последнее время все чаще выпускаются смартфоны с разрешени­ем 240 х320 пикселов. А КПК стали все чаще стали делать с экра­ном 480 х 640 пикселов.


Еще одной отличительной и, пожалуй, главной чертой смартфонов является отсутствие стилуса. Следовательно, тип экрана также от­личается от экрана карманного компьютера. Пользователь может взаимодействовать с приложением только при помощи кнопок теле­фона. И хотя «умные» телефоны используют такую же версию. NET Compact Framework, эти различия заставляют применять совсем иные приемы программирования.

В состав Visual Studio 2005 уже входят эмулятор для Smartphone 2003 и необходимые шаблоны проектов. Пора приступить к созда­нию приложения для смартфона. Самый первый пример будет сде­лан для устройства Smartphone 2003, а остальные — для Windows Mobile 5.0. И хотя речь о Windows Mobile 5.0 пойдет только в сле­дующей главе, я решил сразу тестировать программы именно для этой платформы. В этом случае вам придется скачать дополнитель­ный пакет Windows Mobile 5.0 SDK Smartphone, который содер­жит дополнительные эмуляторы для этого класса устройств.

Создание приложения для смартфона

В главе 7 уже создавался проект, рассчитанный на работу с смарт­фоном. Мы тогда немного забежали вперед. Настало время вернуть­ся к истокам и начать изучение с самого начала.

Запустите Visual Studio 2005 для создания нового проекта. Надо выбрать тип проекта Smartphone 2003. Для этого типа применяется только. NET Compact Framework 1.0. Сразу после создания надо за­пустить эмулятор при помощи команды меню Debug ► Start Debugging. На экране будет отображено окно Deploy со списком имеющихся эму­ляторов. Нужно выбрать эмулятор и нажать кнопке Deploy. Если все прошло нормально, то эмулятор будет загружен с пустой формой. В первом упражнении надо лишь проверить возможности работы с эмулятором. Поэтому надо закрыть приложение (но не эмулятор!) и продолжить работу с приложением в режиме проектирования.

ПРИМЕЧАНИЕ——————————————————————————-

Так как у приложений для смартфонов нет кнопки закрытия окна, то непонятно, как можно закрыть программу. Можно нажать кнопку Stop Debugging. Если на эмуляторе нажать кнопку с крас­ным телефоном, то окно программы будет свернуто, а не закрыто, и все равно придется воспользоваться первым способом для закры­тия приложения.

Создание меню

Программирование для смартфонов

Практически все программы для смартфонов работают при помо­щи команд меню. Поэтому надо получить базовые навыки работы с этим элементом управления. В режиме проектирования формы сле­дует щелкнуть мышью в левой части голубой полоски, которая рас­положена в нижней части экрана. Эта полоска является элементом меню, которое вызывается нажа­тием кнопки Soft Keyl, находя­щейся под экраном. На форме по­явится текст Туре Неге (рис. 9.1).

В этой области нужно ввести сло­во Привет и нажать клавишу Enter. Введенный текст появится в ле­вой части формы, и будет активи рована Soft Key 2 с той же надпи­сью Туре Неге. В этой области нужно ввести слово Закрыть. Те­перь можно вводить текст для подменю. Новый пункт меню по­лучит заголовок Выход. Перед словом Выход появится единица. Среда разработки Visual Studio 2005 автоматически вставляет цифры в создаваемое меню. Эти цифры являются номерами кно­пок-клавиш телефонов. С помо­щью этой подсказки пользователь может быстро активировать нуж­ный пункт меню нажатием соот­ветствующей кнопки (рис. 9.2).

Рис. 9.1. Создание меню Теперь нужно перейти на форму

и дважды щелкнуть на пункте созданного меню Выход. В результате будет открыт редактор кода с заготовкой функции menuItem3_Cl ick. Ее код приведен в листинге 9.1.

Листинг 9.1

private void menuItem3_Click(object sender. EventArgs e) {

this. CloseO:

}

Программирование для смартфонов

Рис. 9.2. Создание подменю


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

В отношении меню приложения для смартфонов установлено спе­циальное правило. Клавиша Left Softkey может иметь только один пункт меню, а клавиша Right Softkey может иметь разветвленное меню. Любопытно отметить, что при попытке создания подменю для левой клавиши предыдущая версия среды разработки Visual Studio 2003 выводила ошибку. Теперь такой ошибки не вы­водится, и, теоретически, ничто не мешает нарушить установив­шуюся традицию. Например, при использовании примеров для смартфонов под управлением Windows Mobile 5.0 программист может создавать вложенные меню для левой кнопки.

Элементы управления

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

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

Поначалу количество не поддерживаемых элементов управления приводит в замешательство. Как же писать приложения, если смарт­фон не поддерживает такой распространенный элемент, как кноп­ка? Так как в смартфонах не используется стилус, то применение кнопок просто бессмысленно. Управление объектами в приложе­ниях для смартфонов осуществляется при помощи реальных кно­пок-клавиш.

Кроме стандартных кнопок с цифрами у смартфона имеются еще так называемые softkey-клавиши. Это две дополнительные кнопки под экраном, которые выполняют очень важные функции в прило­жениях. Именно с помощью этих кнопок осуществляется работа с меню.

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

Следует добавить на форму два текстовых поля. Одно из них авто­матически получит фокус при загрузке приложения (рис. 9.3). Если с помощью клавиши навигации перейти на второе поле, то оно по­лучит окантовку, а у первого поля, соответственно, окантовка про­падет.

Программирование для смартфонов

tertBoxi


te*tBcx2

t Z

Рис. 9.3. Окантовка у первого текстового поля, имеющего фокус

Чтобы не путать текстовые поля с элементами Label, в надписях используют более жирный текст. На форме надо расположить два элемента Label. На рис. 9.4 видно, что строки label 1 и label2 выде­


ляются более жирным начертанием текста. На этом различия не за­канчиваются.

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

labell

jtexterxl

labeiZ

toctBmz

В лесу родилась елочк >

Рис. 9.4. Различия внешнего вида некоторых элементов управления

Если установить фокус ввода на этом текстовом поле и нажать кноп­ку Enter, то текст полностью будет показан в новом окне (рис. 9.5).

3 лесу роднюсь ЄЖМІЗ, * ле

су сна росла

Рис. 9.5. Полный текст в текстовом поле

Пользователь может самостоятельно дописать слова песни в новом окне и выбрать команду Done или отказаться от подтверждения вво­да с помощью команды Cancel.

То же самое касается и элемента ComboBox. Данный элемент получа­ет окантовку при получении фокуса и отображает уже два треуголь­ника. Чтобы раскрыть список элементов, хранящихся в комбини­рованном окне, необходимо сначала установить фокус и нажать на кнопку Enter. При этом будет открыто новое окно, в котором с по­мощью клавиш навигации пользователь может выбрать необходи­мый элемент и выполнить команду меню Done.

Существует также альтернативный способ выбора элемента из ComboBox. Для этого нужно опять установить фокус на комбиниро­ванном окне и прокручивать имеющиеся записи при помощи кно­пок навигации Влево или Вправо.

Режимы ввода

Первые модели сотовых телефонов для отправки сообщений име­ли только один режима ввода. Пользователь нажимал на кнопки телефона в определенном порядке, вводя тот или иной символ. Затем появились другие режимы. В частности, сейчас поддержи­вается числовой режим, так называемый режим T9 и символь­ный режим. Поначалу библиотека. NET Compact Framework не имела поддержки режимов ввода. Поэтому для установки необ­ходимого режима программистам приходилось использовать механизм P/Invoke для вызова функций API, как показано в ли­стинге 9.2.

Листинг 9.2

[DllImport("coredll. dll”. EntryPoInt = "SendMessage”)] private static extern uint SendMessage(IntPtr hWnd. uint msg, uint wParam, uint IParam);

// Сообщение для режима ввода const uint EM_SETINPUTMODE — OxOODE;

// Перечисление режимов ввода public enum InputModeAPI {

Spell = 0.

T9 = 1.

Numbers = 2.

Text = 3 }

public static void SetInputModeCControl ctrl. InputModeAPI mode)

{

SendMessage(ctrl. Handle, EM_SETINPUTMODE. 0. (uint)mode);

}

private void mnuT9_Click(object sender, EventArgs e)

{

SetInputMode(textBox3. InputModeAPI. T9);

}

private void mnuSpell_Click(object sender. EventArgs e)

{

SetInputMode(textBox3. InputModeAPI. Spel1):

}

private void mnuNumeric Click(object sender, EventArgs e)

{

SetInputMode(textBox3. InputModeAPI. Numbers);

}

private void mnuText Click(object sender. EventArgs e)

{

SetInputMode(textBox3, InputModeAPI. Text);

}

В данном примере нужный режим ввода указывается для текстово­го поля textBox3 с помощью системы меню (рис. 9.6).

Программирование для смартфонов

Рис. 9.6. Выбираем режим ввода


ПРИМЕЧАНИЕ——————————————————————————-

Режим T9 в эмуляторе не работает, поэтому надо проверять код на реальном устройстве.

В библиотеке. NET Compact Framework 2.0 появилась возмож­ность контролировать режим ввода текста с помощью класса InputModeEditor. Данный режим распространяется только на тек­стовые поля.

Предположим, что в программе есть два текстовых поля. В одном поле пользователь должен ввести свое имя, а во втором — номер телефона. В первом случае пользователь будет использовать бук­вы, а во втором случае ему необходимы только цифры. Поэтому можно заранее задать нужный режим ввода текста для разных тек­стовых полей. Для этого надо указать ссылку на сборку Micro — soft. WindowsCE. Forms и задействовать класс InputModeEditor, как по­казано в листинге 9.3.

Листинг 9.3

Управление режимами ввода с помощью управляемого кода private void Forml_Load(object sender, EventArgs e)

{

// Устанавливаем текстовый режим ввода текста InputModeEdi tor. SetInputMode(txtName,

InputMode. AlphaCurrent):

// Устанавливаем числовой режим ввода текста InputModeEditor. SetInputMode(txtPhone, InputMode. Numeric);

}

Переопределение клавиш Soft Key

На смартфонах клавиши Soft Key 1 и Soft Key 2 используются для управления меню. Если попробовать переопределить эти клави­ши для других задач, то у вас ничего не получится. Дело в том, что события Key_Down не распознаются системой для этих клавиш, если на форме присутствует компонент MainMenu. Но если удалить этот компонент, устанавливаемый по умолчанию, то с этими кнопка­ми можно будет связать собственные команды, как показано в листинге 9.4.

Листинг 9.4

private void Forml_KeyDown(object sender, KeyEventArgs e)

{

if ((e. KeyCode = System. Windows. Forms. Keys. FI))

{

// Soft Key 1

lblTest. Text * "Вы нажали на клавишу Soft Key 1":

}

if ((e. KeyCode — System. Windows. Forms. Keys. F2))

{

// Soft Key 2

lblTest. Text * "Вы нажали на клавишу Soft Key 2":

}


Прокручивание формы

Если форма не умещается на экране целиком, то пользователь мо­жет прокрутить ее стилусом с помощью полос прокрутки. Особен­но это полезно, если учесть, что. NET Compact Framework 2.0 те­перь поддерживает свойство AutoScroll. Ilo смартфоны не имеют сенсорного экрана, реагирующего на стилус. Для прокрутки фор­мы надо искать другой вариант.

Например, можно воспользоваться обработкой события KeyDown. В тестовом проекте надо растянуть форму так, чтобы нижнюю часть не было видно на экране смартфона. На форме надо разместить не­сколько надписей, причем одна из них должна располагаться в ниж­ней части формы. Для свойства формы AutoScrol 1 надо задать значе­ние True. В листинге 9.5 приведен пример кода для прокрутки формы.

Листинг 9.5

private void Forml_KeyDown(object sender, KeyEventArgs e)

{

if ((e. KeyCode = System. Windows. Forms. Keys. Up))

{

// Up

this. AutoScrollPosition = new Point(-this.

AutoScrol1Positіon. X,-this. AutoScrollPosition. Y * 16);

}

if ((e. KeyCode = System. Windows. Forms. Keys. Down))

{

// Down

this. AutoScrollPosition = new Point(-this.

AutoScrol1Position. X,-this. AutoScrollPosition. Y + 16);

}

if ((e. KeyCode = System. Windows. Forms. Keys. Left))

{

// Left

this. AutoScrollPosition = new Point(-this.

AutoScrollPositіon. X — 16.-this. AutoScrollPosition. Y):

}

if ((e. KeyCode — System. Windows. Forms. Keys. Right))

{

// Right

this. AutoScrollPosition = new Point(-this.

AutoScroll Position. X + 16.-this. AutoScrollPosition. Y);

}

}

После запуска приложения можно нажимать на клавиши навигации. Написанный код позволит прокручивать форму в выбранном направ­лении. Но здесь нас подстерегает одна опасность. Код будет работать лишь тогда, когда форма имеет фокус. Если форма содержит элемен­ты управления, то фокус может находиться у данного элемента. И тогда нажатия на клавиши навигации не принесут желаемого ре­зультата. Это ограничение легко обходится добавлением соответству­ющего обработчика события, как показано в листинге 9.6.

Листинг 9.6

private void Forml_Load(object sender, EventArgs e)

{

pi ctureBoxl. Focus();

this. pictureBoxl. KeyDown += new KeyEventHandler (Forml KeyDown):

}

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


Leave a reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Confirm that you are not a bot - select a man with raised hand: