Программирование мобильных телефонов на Java

         

Архитектура телефонов



1.2. Архитектура телефонов



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

Телефон имеет процессор, память, приемо-передатчик, систему контроллеров для дисплея, клавиатуры, аккумулятора и карту SIM (Subscriber identification module - идентификационный модуль абонента). Процессор вкупе с памятью является сердцем телефона. Он имеет более скромные характеристики, чем процессор компьютера. Приемо-передатчик служит для приема и передачи сигнала и включает в себя различные фильтры, кодеры, декодеры речи и сигналов. Система контроллеров для клавиатуры (клавиш телефона) и дисплея позволяет вводить информацию в телефон посредством клавиш и выводить ее на дисплей. Контроллер аккумулятора производит управление процессом зарядки аккумуляторных батарей телефона.

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

 


Инфракрасный порт



1.4. Инфракрасный порт





Инфракрасный порт имеют не все телефоны. В основном это модели, относящиеся ко второй и третьей условной ценовой категории, о которых мы говорили в начале этой главы. С помощью инфракрасного порта можно произвести соединение с компьютером, другим телефоном или любым иным устройством имеющим инфракрасный порт. Принцип работы инфракрасного порта очень прост: имеются светодиод и фотодиод, соответственно для передачи и приема сигнала. Поместив два устройства на расстоянии не более полутора метров в зоне прямой видимости можно осуществить связь между этими устройствами. Что касается связи телефона с компьютером посредством инфракрасного порта, то это происходит при помощи программного обеспечения поставляемого производителями телефонов. В частности на компакт диске можно найти программы для телефонов Sony Ericsson, Nokia и Siemens, подробный анализ этих программ вы найдете в главе 3.

 


Карта SIM



1.8. Карта SIM



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

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

Таким образом, устройство мобильного телефона отдаленно напоминает устройство компьютерных систем. Поэтому адаптация платформы Java 2 ME, для телефонов, произошла абсолютно безболезненно, переведя виток развития мобильной индустрии на новый, до настоящего времени не ведомый уровень. Следующая глава раскрывает теорию строения платформы Java 2 Micro Edition.

 


Прошивка и операционная система



1.3. Прошивка и операционная система



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

Операционная система Windows Mobile, за которой стоит, как не трудно догадаться, софтверный гигант Microsoft предъявляет достаточно высокие требования к аппаратной части телефона. Соответственно, высокая цена на такие устройства никак не способствует популяризации этой операционной системы. Но стоит признать тот факт, что операционная система Windows Mobile- очень  мощная и хорошо продуманная система, которая в будущем возможно сможет занять одно из ведущих мест в этом сегменте рынка.

Операционная система Symbian является открытой системой и предъявляет значительно меньше требований к аппаратному устройству телефона. В акционерное общество Symbian Ltd. (разработчик операционной системы Symbian) входят все мировые лидеры производителей телефонов. Эта операционная система на данный момент занимает доминирующее положение в мобильной промышленности.

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

Прошивка телефона — это программа, управляющая работой телефона, но вшитая в сам телефон. Каждый из производителей создает свои прошивки для конкретных моделей, предопределяя тем самым функциональность телефона. Операционная система разрешает осуществлять загрузку созданных программ . в телефон, а в прошивке такая возможность не предусмотрена. Точнее сказать, не была предусмотрена до появления платформы Java 2 ME. Для работы приложений написанных на Java, необходима виртуальная Java машина иди среда исполнения приложений. Виртуальная Java машина, адаптированная специально для телефонов, настолько компактна по размеру, и, что самое главное, безопасна, что практически все производители телефонов стараются создать поддержку Java программ, то есть встроить среду исполнения Java программ в телефон. Загрузка сторонних приложений дала очень мощный импульс мобильной игровой индустрии, что, как мне кажется, вывело телефон на новый более качественный уровень. Единственное что необходимо понимать в этом аспекте, это то, что среда исполнения Java-приложений в телефоне реализована таким образом, что не позволяет написать «вредные» программы портящие аппаратную часть телефона. Модель работы Java-программ реализована как бы в виде закупоренной бочки, в которой и происходит работа всех Java приложений. Из этой бочки программы выбраться не могут, а соответственно не могут и нанести ущерб телефону.

Загрузка Java программ в телефон происходит при помощи программного обеспечения и кабеля, соединяющего телефон с компьютером. Также можно загрузить в телефон программы при помощи инфракрасного порта, технологии Bluetooth, либо непосредственно из Интернета с помощью протоколов WAP и GPRS. Все программы, загружаемые в телефон, распространяются в виде двух файлов, JAD - это дескриптор приложения и JAR - архив программы. Более подробно процесс загрузки программ рассматривается в главе 3.

 


Протокол GPRS



1.7. Протокол GPRS



Связь телефона по протоколу GPRS (General Packet Radio Service - радио сервис пакетной передачи данных) осуществляется в куда более щадящем режиме. Используя соединение WAP, вы фактически звоните по другому номеру, занимая тем самым один из многочисленных каналов связи, поэтому и оплата взимается поминутно. С использованием GPRS оплата происходит только за количество скачанных данных, измеряемое в байтах, килобайтах или мегабайтах. Например, оператор мобильной связи Би Лайн за один мегабайт изымает 6 рублей 60 копеек с вашего счета (по состоянию на 2004 год). Лучше использовать WAP соединение, то есть просматривать WAP-сайты, через протокол GPRS, значительно экономя средства. Все это происходит благодаря тому, что GPRS использует пакетную передачу данных и не задействует какой-то конкретный канал связи, он вклинивается в свободные зоны различных каналов, передавая информацию в виде небольших пакетов. Скорость связи может доходить до 115 кбит/с, но полагаю, что таких показателей никто не видел, а вот цифра в 30-40 кбит/с вполне реальна. Связь через GPRS можно использовать и на компьютере, для выхода в Интернет через мобильный телефон. Такая услуга связи носит название мобильный: Интернет.

 


Протокол WAP



1.6. Протокол WAP



Протокол WAP (Wireless Application Protocol) - это протокол беспроводного соединения с сетью Интернет. Имея поддержку WAP в мобильном телефоне, появляется возможность выхода в Интернет для просмотра специально адаптированных web-страниц на телефоне. Также с помощью WAP можно скачать или купить игру или приложение, написанное на языке Java. Стоимость таких программ обычно не превышает 1-2 доллара. Однако пользоваться WAP можно только в том случае, если ваш оператор сотовой связи предоставляет WAP услуги. Телефон, имеющий поддержку WAP, снабжен и WAP-браузером, что и делает возможным просмотр WAP страниц в Интернете.

Если обобщить все выше сказанное, то работу телефона с протоколом WAP, можно сравнить с обыкновенным компьютером, связывающимся с сетью Интернет. Все Интернет-страницы, используемые компьютерными системами написаны на языке HTML или XML, а страницы для WAP-соединения созданы с помощью своего языка WML (Wireless Markup Language - беспроводной язык разметки). Для того чтобы через WAP выйти в Интернет с мобильного телефона, необходимо обязательно произвести соответствующие настройки в телефоне. Сделать это можно вручную, а можно воспользоваться услугами своего оператора, предоставляющего мобильную связь. Для этого необходимо позвонить по соответствующему номеру или отправить SMS, в зависимости от оператора связи указанного в инструкции, прилагающейся к SIM-карте. Если есть желание настроить WAP самостоятельно, то можно воспользоваться значениями, приведенными в таблице 1.1.

Таблица 1.1.

Операторы
БиЛайн
Мегафон
МТС
URL
"http://wap.beeline.ru"
http://wap.megawap.ru
http://wap.mts.ru
Защита связи
отключить
отключить
отключить
Канал
GPRS
GPRS
GPRS
Входная точка
http://wap.beeline.ru
http://wap.megawap.ru
http://wap.mts.ru
Адрес IP
192.168.017.001
010.010.001.002
212.44.140.13
Логин
beeline
wap
mts
Пароль
beeline
wap
mts


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

Единственная проблема WAP-сервиса - это высокая цена соединения, поскольку оплата происходит поминутно, а платите вы практически как за минуту разговора по телефону. Это получается весьма дорогое удовольствие. Отчасти эту проблему решает протокол GPRS.

 


Стандарт GSM



1.1. Стандарт GSM



Цифровой стандарт GSM (Global System Mobile Communication - система мобильной глобальной связи), на основе которого происходит связь между телефонами, - самый распространенный стандарт во всем мире, обеспечивающий диапазон работы мобильных телефонов на частотах 900/1800/1900 МГц. Стандарт GSM обладает качественными и безопасными характеристиками связи, что и повлияло на его популярность во всем мире. В нашей стране это основной стандарт, использующийся всеми крупными операторами связи.

 



Технология Bluetooth



1.5. Технология Bluetooth



Название этой сравнительно новой технологии (Bluetooth - голубой зуб) позаимствовано из истории - так некогда звали датского короля Гарольда второго, стремящегося объединить все датские земли в одно королевство Дания.

С помощью технологии Bluetooth можно осуществлять соединение сразу с множеством устройств и организовывать небольшие локальные сети. Связь с использованием Bluetooth происходит на частоте 2,4 ГГц с расстояния порядка 10 метров и что самое главное, не требует прямого соединения, то есть устройства могут находиться вне зоны видимости друг друга. Приемопередатчик сигнала выполняется в виде микросхемы и может связать в сеть около десятка разнообразных устройств.

Сейчас технология Bluetooth очень активно используется производителями мобильных телефонов для создания беспроводных гарнитур, например наушника и микрофона.

 


к изучению особенностей программирования мобильных



В этой главе ...

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

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

Первая представляет собой мобильные телефоны с набором простейших функций, такие телефоны часто называют «звонилка». Функциональность подобных телефонов сводится только к их прямому назначению. С такого устройства можно произвести или принять вызов и воспользоваться услугами SMS (Short Message Service - служба коротких сообщений). Сам телефон, как правило, имеет монохромный дисплей небольшого размера, а из пользовательских программ доступны только простейшие, такие как калькулятор, таймер, диктофон, телефонная книга и так далее.

Вторая категория мобильных телефонов имеет более широкий круг возможностей. Дисплей таких телефонов обычно цветной, разрешение варьируется от 80 до 130 пикселей с глубиной цвета около пяти тысяч цветов. Телефоны этой категории обычно содержат те же возможности, что и у аппаратов первой категории и ряд дополнительных функций. Одна из них - это возможность загрузки приложений написанных на языке Java. Из всех дополнительных функций стоит выделить возможность работы с WAP (Wireless Application Protocol - протокол беспроводной передачи данных) и GPRS (General Packet Radio Service - радио сервис пакетной передачи данных). Принципы работы этих протоколов описывается в разделах 1.6 и 1.7 этой главы.

Третья категория телефонов представляет собой так называемую бизнес-категорию. Подобные устройства имеют впечатляющие наборы функций, сравнимые с карманными портативными устройствами (КПК), а цена таких мобильных телефонов может быть достаточно высокой.

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


Пакет java lang



2.4.1 Пакет java.lang



Этот пакет содержит системные классы или основы языка Java и исключения. Имеется также один единственный интерфейс Runnable. На Рисунок 2.3 изображена иерархия классов пакета java.lang.

Рассмотрим имеющиеся компоненты пакета java.lang и дадим краткую характеристику каждому из них.



Свойства языка Java



2.2.1. Свойства языка Java



Все свойства языка Java в конфигурации CLDC должны, насколько это возможно, соответствовать спецификации языка Java, но в силу ограниченности системных ресурсов мобильных устройств, не поддерживаются следующие 'свойства доступные в платформах Java 2 ЕЕ и Java 2 SE:

1) операции с дробными числами (floating point);

2) финализация (finalization);

3) отсутствует восстановление ошибок после сбоя (error handling).

 


Пакет Java util



2.4.2. Пакет Java.util



В этом пакете содержатся классы стандартных утилит упрощающих работу программиста. Пакет сильно урезан по сравнению со стандартным пакетом Java 2 SE. На Рисунок 2.4 представлена иерархия классов пакета jova.util.



Виртуальная машина



2.2.2. Виртуальная машина



Виртуальная машина, используемая в конфигурации CLDC, несколько отличается от обычной виртуальной машины задействованной в Java, но обязана оставаться совместимой со спецификацией этой виртуальной машины (Java Virtual Machine Specification). Виртуальная машина находится непосредственно в телефоне и за совместимостью с общепринятой спецификацией обязаны следить производители мобильных телефонов. Сама же виртуальная машина носит название Kilobyte Virtual Machine (KVM) из-за своей компактности и также имеет ряд недоступных свойств:

1) не поддерживаются операции с дробными числами (floating point);

2) нельзя создать класс загрузчик (class loader); 

3) отсутствует механизм отражения (reflection);

4) не реализован Java Nativ интерфейс (Java Native Interface);

5) не поддерживается финализация (finalization);

6) отсутствует восстановление ошибок после сбоя (error handling);

7) не поддерживается работа с групповыми потоками (Thread group).

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

 


Пакет Java io



2.4.3. Пакет Java.io



Классы этого пакета отвечают за работу с входными и выходными потоками данных. На Рисунок 2.5 показана иерархия наследования классов пакета java.io.



Пакет javax microedition io



2.4.4. Пакет javax.microedition.io



Этот пакет содержит множество интерфейсов и всего два класса обеспечивающих связь с сетью. На Рисунок 2.6 и Рисунок 2.7 приводится общая схема наследования соответственно интерфейсов и классов пакета javax.microedition.io.



Пакет javax microedition lcdui



2.4.5. Пакет javax.microedition.lcdui



Данный пакет имеет разнообразные классы для реализации пользовательского интерфейса в мобильных приложениях. Существует большое количество классов, благодаря которым можно создать действительно красивое интерактивное приложение. На Рисунок 2.8 изображена иерархия классов пакета javax.microedition.lcdui.



Пакет javax microedition lcdui game



2.4.6. Пакет javax.microedition.lcdui.game



Это новый игровой пакет добавлен в профиль MIDP 2.0. В состав пакета входит пять мощных и хорошо продуманных классовое помощью которых можно достаточно легко создавать игры для мобильных устройств. На Рисунок 2.9 показана иерархия классов пакета javox.microedition.lcdui.game.



Пакет javax microedition media



2.4.7. Пакет javax.microedition.media



Пакет добавлен в профиль MIDP 2.0 и служит для создания звукового сопровождения в приложении. Пакет разработан специальной экспертной группой (MMAPI Expert Group), в состав которой входят такие известные компании:

Nokia (Specification Lead);  Aplix Corporation;  Beatnik. Inc.;  France Telecom;  Insignia Solutions;  Mitsubishi Electric Corp.;  Motorola;  Netdecisions Holdings United;  NTT DoCoMo. Inc.;  Openwave Systems Inc.;  PacketVideo Corporation;  Philips;  Siemens AC ICM MP TI;  Smart Fusion;  Sun Microsystems. Inc.;  Symbian Ltd;  Texas Instruments Inc.;  Vodafone;  Yamaha Corporation;  Zucotto Wireless.


В профиле MI DP 1.0 отсутствует возможность полноценной работы со звуком, и каждый из производителей предоставлял свои библиотеки для этих целей. В профиле MIDP 2.0 такой необходимости уже нет и можно воспользоваться любым необходимым классом и интерфейсом из пакета javax.microedition.mediu. На Рисунок 2.10 приводится наследование интерфейсов этого пакета.



Пакет javax microedition media control



2.4.8. Пакет javax.microedition.media.control



С помощью пакета javax.microedition.media.control определяется контроль над воспроизведением заданных звуковых данных. Это небольшой пакет, имеющий в своем составе всего два интерфейса, а на Рисунок 2.11 дается схема наследования интерфейсов.



Пакет javax microedition midlet



2.4.9. Пакет javax.microedition.midlet



Сам по себе пакет небольшой, но он играет ключевую роль при создании приложений на Java 2 ME. С помощью этого пакета происходит связь между приложением и мобильным информационным профилем устройства (MIDP).



Пакет javax microedition pki



2.4.10. Пакет javax.microedition.pki



Пакет javax.microedition.pki сертифицирует информацию для безопасной связи.



Пакет javax microedition rms



2.4.11. Пакет javax.microedition.rms



Этот пакет предназначен для создания механизма хранения и извлечения данных из памяти устройства. Хранение и запись данных происходит на основе менеджера системной записи (Record MaAagement System), что дает возможность удалять, добавлять, просматривать, изменять или составлять список всех имеющихся записей. Имеется один класс и несколько интерфейсов реализующих механизм сохранения и извлечения данных. На Рисунок 2.14 представлена иерархия пакета javax.microedition.rms.



Блочная схема построения платформы Java 2 ME



Рисунок 2.1. Блочная схема построения платформы Java 2 ME



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

Цель этой книги научить вас создавать приложения для мобильных телефонов с применением конфигурации CLDC и профиля MIDP. Вся концепция книги построена на использовании связки MIDP/CLDC, но несколько слов стоит сказать о конфигурации CDC и доступных для этой конфигурации профилях.

 


Иерархия интерфейсов пакета javax microedition media control



Рисунок 2.11. Иерархия интерфейсов пакета javax.microedition.media.control




Интерфейсы:

 ToneControl - воспроизведение однотональных звуков;  VolumeControl - регулирует громкость воспроизведения.

 


Конфигурация CDC



2.1. Конфигурация CDC



Конфигурация CDC объединяет в себе ряд устройств имеющих постоянное сетевое соединение, таких как двунаправленные пейджеры, телевизионные приставки, автомобильные системы навигации, интеллектуальные коммуникаторы. Данные устройства характеризуются более мощными системными ресурсами, они имеют обычно 16 или 32-разрядные процессоры и как минимум 2 мегабайт памяти. В этой связи обе конфигурации CDC и CLDC, имеют свой набор свойств, определяющих поддержку библиотек Java API, виртуальную машину, свойства самого языка Java. Эти свойства и отличают разные конфигурации.

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

Конфигурация может содержать несколько профилей. Конфигурация CDC имеет два профиля - это Foundation Profile и Personal Profile и PDA. Смысл и устройство этих профилей мы рассматривать не будем, они не имеют никакого отношения к теме этой книги и были приведены лишь для понимания общей идеи конфигурации. При желании в документации по Java 2 ME вы сможете найти необходимую информацию и изучите ее самостоятельно.

 



Конфигурация CLDC



2.2. Конфигурация CLDC



Конфигурация CLDC рассчитана на семейство мобильных устройств, таких как телефоны, органайзеры, КПК. Мобильные устройства, для которых предназначена конфигурация CLDC, характеризуются следующими параметрами:

 процессор 16 или 32-разрядный;  память от 160 до 512 килобайт, для всей платформы Jауа 2 ME;  беспроводное сетевое соединение;  питание от аккумуляторов.


Все перечисленные характеристики, несомненно, накладывает определенные ограничения на создаваемое приложение. Конфигурации CDC и CLDC независимы друг от друга и не могут использоваться вместе. Вся концепция конфигурации CLDC была разработана дочерней группой Java Community Process, компании Sun Microsystems, которая включает в себя множество известных компаний:

 America Online;  Bull;  Ericsson;  Fujitsu;  Matsushita;  Mitsubishi;  Motorola;  Nokia;  NTT DoCoMo;  Oracle;  Palm Computing;  RIM;  Samsung;  Sharp;  Siemens;  Sony;  Sun Microsystems;  Symbian.


Конфигурация CLDC содержит ряд классов, интерфейсов, методов платформы Java 2 SE, но в урезанном виде. Это и не мудрено, компьютерная платформа превосходит по мощности мобильные телефоны во много раз. С другой стороны, та простота, с которой можно за несколько недель создать среднее по сложности приложение, подкупает и даже возвращает нас во времена шестнадцатибитных приставок. На самом деле общая масса игр, написанных на Java 2 ME, по своему игровому процессу напоминает именно те старые добрые времена.

Конфигурация CLDC также определяется своим набором свойств состоящих из языка Java, виртуальной Java машины и библиотек API. В данный момент имеется две версии этой конфигурации - это CLDC 1.0 и CLDC 1.1. Конфигурация CLDC 1.1 имеет больше возможностей, например поддержку чисел с плавающей точкой, что соответственно предъявляет более серьезные требования к аппаратной части телефона. В момент написания книги таких телефонов не было, поэтому вся книга построена на конфигурации CLDC 1.0. К слову сказать, конфигурация CLDC 1.1 построена на первой версии и просто имеет ряд улучшений. Остановимся на каждом свойстве конфигурации CLDC 1.0 подробней. В последствии при упоминании конфигурации, будет иметься в виду CLDC 1.0.

 


Отражает полную иерархию пакета



Рисунок 2.12 отражает полную иерархию пакета javax.microedition.midlet.



Рисунок 2.12. Иерархия пакета javax.microedition.midlet



Класс:

 MIDlet - основной класс программы должен наследовать класс MIDlet, для управления работой приложения.


Исключение:

 MIDletStateChangeException - исключает неправильную работу с классом MIDlet.

 


Профиль



2.3. Профиль



Как уже не раз отмечалось, профиль содержит предопределенные требования к аппаратной части устройства, а так же включает в себя минимальный набор API используемый в программировании мобильных устройств. Единственно доступный рабочий профиль в конфигурации CLDC имеет название MIDP (Mobile Information Device Profile - информационный профиль мобильных устройств). Спецификация профиля разработана экспертной группой MIDP Expert Group, в состав которой входят следующие компании:

America Online;  DDI;  Ericsson;  Espial Group, Inc.;  Fujitsu;  Hitachi;  J-Phone;  Matsushita;  Mitsubishi;  Motorola, Inc.;  NEC;   Nokia;  NTT DoCoMo;  Palm;  Research In Motion;  Samsung;  Sharp;  Siemens;  Sony;  Sun Microsystems, Inc.;  Symbian;  Telcordia Technologies.


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

 разрешение экрана минимум 96x54 пикселя с глубиной экрана минимум 1 бит;  устройством ввода может быть клавиатура или сенсорный экран;  32 килобайта динамической памяти;  128 килобайт под компоненты MIDP;  8 килобайт для хранения постоянных данных;  беспроводная сеть;  питание от аккумулятора.


Такое сочетание конфигурации и профиля CLDC/MIDP используется в программировании мобильных телефонов и будет основным сочетанием при рассмотрении примеров из книги.

На данный момент профиль MIDP имеет две версии: MIDP 1.0 и MIDP 2.0. До последнего времени первая версия MIDP была основным профилем при создании приложений для телефонов. Все телефоны, поддерживающие Java, имеют совместимость с профилем MIDP 1.0. Этот профиль был сформирован при начальном создании платформы Java 2 ME и имеет в своем составе определенный набор API,

С выходом профиля MIDP 2.0 добавилось ряд новых библиотек, значительно улучшающих создание приложений для мобильных телефонов. Но самое главное это то, что у него имеется полная совместимость с профилем MIDP 1.0. Профиль MIDP 2.0 содержит большое количество новых дополнительных библиотек, отсутствующих в составе MIDP 1.0, но при создании приложений под профиль MIDP 2.0, можно пользоваться библиотеками профиля MIDP 1.0. Если же вы пишите программу под профиль MIDP 1.0, то библиотеки профиля MIDP 2.0 вам будут недоступны. В книге будут рассмотрены оба профиля как единое целое. Подытожив все вышесказанное о профилях и конфигурациях необходимых для программирования мобильных телефонов, можно резюмировать: программный продукт создаваемый разработчиками ориентирован на конкретный профиль, который является, спецификацией устанавливающей определенные требования к аппаратной части телефона, а1 также содержит дополнительные библиотеки. Каждый конкретный профиль надстраивается над своей и только ему доступной конфигурацией. Конфигурация предъявляет требования к виртуальной Java машине и свойствам языка Java, используемым в этой конфигурации. Далее идет плотное взаимодействие с аппаратным обеспечением телефона, через имеющиеся сервисы, которые предоставляются операционной системой либо прошивкой телефона. Благодаря такой цепочке взаимодействий, любое программное обеспечение, написанное на Java под конкретный профиль, будет работать на телефоне с поддержкой Java. На Рисунок 2.2 хорошо прослеживается общая схема взаимодействия приложения с мобильным телефоном.



такого количества продуманных классов, наверное,



2.4. Профиль MIDP 2.0 и конфигурация CLDC 1.0

Язык Java самый «библиотечный язык», такого количества продуманных классов, наверное, нет ни в одном языке программирования. С другой стороны, простота в использовании Java, по всей видимости, поспособствовала определенной популярности этого языка. С точки зрения программиста, обилие готовых классов гораздо упрощает разработку программного продукта, и что самое главное, уменьшает сроки создания программ.

Профиль MIDP 2.0 и конфигурация CLDC 1.0, содержит большое количество интерфейсов и классов, использование которых в программировании приложений, пожалуй, сможет удовлетворить любого разработчика. Часть классов было взято из Java 2 SE с некоторыми усечениями, а часть была специально написана под Java 2 ME. Вся библиотека доступная для профиля MIDP 2.0 и конфигурации CLDC 1.0, состоит из одиннадцати пакетов. По традиции каждый отвечает за свою определенную область.

 java.lang;  java.util;  java.io;  javax.microedition.lcdui;  javax.microedition.lcdui.gamer  javax.microedition.io;  javax.microedition.media;  javax.microedition.media.control;  javax.microedition.pki;  javax.microedition.midlet;  javax.microedition.rms.

Все пакеты с префиксами javax.microedition.*, написаны специально для Java 2 ME профиля MIDP 2.0. Пакеты с префиксом Java.*, взяты из Java 2 SE версии 1.4, в урезанном виде, и имеет полную совместимость с оригиналом и определенны в конфигурации CLDC 1.0.

 


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



Рис 2.2. Схема взаимодействия приложений с аппаратным обеспечением телефона



Такая модульность в построении Java 2 ME дает неограниченную возможность в модернизации всей платформы и написанию действительно аппаратно-независимого кода программы. Люди, знакомые с моей книгой «DirectX 9. Уроки программирования на C++», обязательно найдут много общего в подходе реализации двух платформ DirectX и Java 2 ME. Оставшаяся часть этой главы целиком посвящена рассмотрению пакетов и классов доступных в MIDP 2.0/CLDC 1.0. Будут затронуты практически все имеющиеся компоненты данного профиля и конфигурации.

 


Иерархия классов пакета java lang



Рис 2.3. Иерархия классов пакета java.lang




Интерфейс:

 Runnable - создает поток в приложении.


Классы:

 Boolean - объектно-ориентированный класс, оболочка или как еще говорят «обвертка», для простого типа Boolean;  Byte - объектно-ориентированный класс для простого типа Byte;  Character - объектно-ориентированный класс для простого типа Char;  Class - виртуальная машина создает объекты этого класса, которые представляют интерфейсы и классы языка Java;  Integer - объектно-ориентированный класс для простого типа int;  Long - объектно-ориентированный класс, оболочка для простого типа;  Math - класс, содержащий математические методы;  Object - суперкласс для всех классов Java. Все классы наследуются от класса Object и являются его подклассами;  Runtime - класс времени исполнения;  Short - объектно-ориентированный класс, оболочка для простого типа Short;  string — создает строки символов;  StringBuffer - содержит строку символов любого размера;  System - содержит ряд системных методов;  Thread - создает поток в работе приложения;  Throwable - суперкласс для всех подклассов, предназначенных для работы с ошибками и исключениями.


Исключения:

 Exceptions - исключения для классов и подклассов;  ArithmeticException - арифметическое исключение;  ArrayIndexOutOfBoundsException - исключение обрабатывающее неправильный индекс в массиве данных;  ArrayStoreException - исключение обрабатывающее неправильно заданный тип объекта в массиве объектов;  ClassCastException - неправильно указан подкласс объекта;  ClassNotFoundException - класс не найден;  IllegalAccessException - нет доступа к классу;  IllegalArgumentException - указан неправильный аргумент;  IllegalMonitorStateException - мониторинг объектов;  IllegalStateException - неправильно вызванный метод;  IllegalThreadStateException - неправильные установки потока;  IndexOutOfBoundsException-исключает неверный указанный индекс;  InstantiationException - исключает ситуацию в создании или вызове членов абстрактного класса;  InterruptedException - исключает прерывание потока находящегося в состоянии ожидания:  NegativeArraySizeExcept'ion - исключает ситуацию в создании большего размера массива данных, чем было указано при инициализации;  NumberFormatException — неправильное преобразование строки в целочисленный тип данных;  Runt imeException - суперкласс исключений времени исполнения виртуальной машины Java;  SecurityException - менеджер безопасности;  StringlndexOutOfBoundsException - выход индекса за приделы строки.


Ошибки:

 Error - обобщенная модель ошибок;  OutOf MemoryError - ошибки связанные с выходом за пределы памяти;  VirtualMachineError — ошибка времени исполнения.

 


Иерархия классов пакета Java util



Рис 2.4. Иерархия классов пакета Java.util




Интерфейс:

 Enumeration - декларирует возможность доступа к элементам.


Классы:

 Calendar - выполняя функции обыкновенного календаря;  Date - реализует возможность работы с датой и временем;  Hashtable -имеет возможность в сохранении объектов с доступом к ним по определенно заданному ключу;  Random - генератор случайных чисел;  Stack - реализует функциональность стека;  Timer — реализует возможность работы со временем;  TimerTask - планировщик задач;  TimeZone - дает возможность в определении временного пояса;  Vector - класс для создания и содержания массивов любого размера.


Имеет возможность изменять размер заданного массива.

Исключения:

 EmptyStackException - указывает на пустой стек;  NoSuchElementException - исключение указывает на отсутствие элементов в определенном перечислении.

 


Иерархия интерфейсов пакета javax microedition io



Рис 2.6. Иерархия интерфейсов пакета javax.microedition.io




Интерфейсы:

CommConnection - находит последовательный порт;  Connection - общий тип всей связи сети;  ContentConnection - находит связь с потоком;  Datagram - общий интерфейс дейтограммы;  DatagramConnection - определяет возможность связи дейтограммы;  HttpConnection - декларирует методы константы для http-соединения;  HttpsConnection - декларирует методы константы для безопасного http-соединения;  InputCdnnection - интерфейс для создания входной связи с сетью;  OutputConnection - интерфейс для создания выходной связи с сетью;  SecureConnection - определяет безопасную связь с сетью;  Securitylnfo - располагает методами для получения информации сетевой связи;  ServerSocketConnection - реализует связь с сервером;  SocketConnection - находит socket (сокет) для потока связи;  StreamConnection - связь с потоком;  StreamConnectionNotifier - определяет возможность всей связи;  UDPDatagramConnection - реализует связь с дейтограммой.




Иерархия классов пакета javax microedition io



Рис 2.7. Иерархия классов пакета javax.microedition.io




Классы:

 Connector - класс для создания объектов связи;  PushRegistry - класс для поддержания списков связей.


Исключение:

 ConnectionNotFoundException - указывает на отсутствие связи.

 


Иерархия классов пакета javax microedition lcdui



Рис 2.8. Иерархия классов пакета javax.microedition.lcdui




Интерфейсы: 

 Choice - содержит набор библиотек создающих возможность выбора заданных элементов;  CommandListener - реализует возможность получения событий;  ItemCommandListener - реализует возможность получения событий от объектов класса Item;  ItemStateListener - используется при получении событий о состоянии объектов класса Item встроенных в Form.


Классы:

 Alert - этот класс необходим при создании уведомлений об ошибках либо информационных сообщений;  AlertType — отображает тип ошибки;  Canvas - абстрактный класс, обеспечивает графическую прорисовку различных элементов на экране телефона;  ChoiceGroup - встраиваемая группа выбираемых элементов. Интегрируется в класс Form, наследуется от класса Item и реализует интерфейс Choice;  Command - инкапсулирует командные действия, при этом, не определяя фактические действия команды, а лишь содержит информацию;  Customltem- создает возможность в отображении новых графических , элементов встроенных в класс Form;  DateField - класс представляющий работу с датой и временем. Интегрируется в класс Form, наследуется от класса Item;  Display — этот класс-диспетчер, отвечающий за экран телефона;  Displayable - абстрактный класс, содержит иерархию классов пользовательского интерфейса;  Font - класс шрифтов;  Form - этот класс создает пустую форму в которую в последствии, можно встраивать ряд классов задающих пользовательский интерфейс всего приложения;  Gauge — показывает графическое течение процесса;  Graphics - предоставляет возможность в рисовании на экране телефона;  Image - класс, отвечающий за загрузку и отображение любых видов изображений формата PNG;  Imageltem - контейнер для загруженных в приложение изображений;  Item - суперкласс, содержащий ряд классов для их дальнейшей интеграции в класс Form;  List - создает список группы элементов;  Screen - суперкласс для всех высокоуровневых классов определяющих пользовательский интерфейс приложения;  Spacer - создает заданное пространство на экране;  Stringltem - дает возможность в создании массивов строк;  TextBox - создает редактируемый текстовый контейнер;  TextField- создает редактируемый текстовый контейнер, который встраивается в класс Form;  Ticker - создает в приложении бегущую строку текста.

 



Иерархия классов пакета



Рис 2.9. Иерархия классов пакета




Классы:

 GameCanvas - абстрактный класс, содержащий основные элементы игрового интерфейса;  Layer - абстрактный класс, отвечающий за уровни представляемые в игре;  LayerManager - менеджер уровней;  Sprite - создает анимационные фреймы;  TiledLayer - отвечает за создание фоновых изображений.

 


Иерархия интерфейсов



Рис 2.10. Иерархия интерфейсов из пакета javax.microedition. media.




Интерфейсы:

 Control - осуществляет контроль над процессами;  Controllable - осуществляет контроль над объектами;  Player - реализует контроль над воспроизведением;  PlayerListener - необходим для получения асинхронных событий : принятых от проигрывателя.


Классы:

 Manager - менеджер системных ресурсов.


Исключение:

 MediaException - исключает ошибки в работе методов этого пакета.

 


Иерархия пакета javax microedition rms



Рис 2.14. Иерархия пакета javax.microedition.rms




Интерфейсы:

 RecordComparator - осуществляет сравнение двух записей;  RecordEnumeration - реализует двунаправленный список записи;  RecordFilter - определяет различные совпадения в записях;  RecordListener - прослеживает события записи данных.


Класс:

 RecordStore - производит запись данных.


Исключения:

 InvalidRecprdlDException - исключает запись данных в неправильно указанный адрес;  RecordStoreException - индикатор ошибки записи данных;  RecordStoreFullException - указывает на переполнение системных ресурсов для записи данных;  RecordStoreNotFoundException - показывает, что указанное место для записи данных не было обнаружено;  RecordStoreNotOpenException - указывает на невозможность записи.


В этой главе мы рассмотрели состав одиннадцати пакетов, давая краткую характеристику имеющимся интерфейсам, классам и исключениям. В конце книги в приложении 2, вы найдете справочник по Java 2 ME, где рассматриваются более подробно все составляющие CDLC/MIDP.

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

 


Иерархия пакета java io



Рис2.5. Иерархия пакета java.io




Интерфейсы:

 Datalnput - декларирует методы для чтения простых типов во входной поток данных;  DataOutput - декларирует методы для записи простых типов в выходной поток данных.


Классы:

 ByteArraylnputStream - необходим при чтении входного потока байт из массива данных, для дальнейшего размещения их в памяти;  ByteArrayOutputStream - необходим при записи потока байт из памяти в массив выходных данных;  DatalnputStream - этот класс должен наследоваться от интерфейса Datalnput, реализуя при этом все его методы;  DataOutputStream - класс Должен наследоваться от интерфейса Data-Output, реализуя при этом все его методы;  InputStream - абстрактный класс, предназначенный для работы с входным потоком байтов;  InputStreamReader - наследуется от класса Reader, реализуя методы для чтения символьных данных входного потока с перекодировкой;  OutputStream - абстрактный класс, предназначенный для работы с выходным потоком байт;  OutputStreamWriter -наследуется от класса Writer, реализуя методы для записи символьных данных в выходной поток с перекодировкой;  PrintStream - расширяет выходной поток способностью печати данных;'  Reader - абстрактный класс, предназначенный для чтения символьных данных входного потока;  Writer - абстрактный класс, предназначенный для записи символьных данных в выходной поток.


Исключения:

 EOFException - сигнализируете конце файла;  InterruptedlOException — сигнализирует о прерванном действии по вводу выводу;  IOException - указывает на исключение ввода вывода;  UnsupportedEncodingException - указывает на невозможность перекодировки;  UTFDataFormatException - сигнализирует о прочтении строки формата UTF-8.

 


Содержит иерархию этого пакета



Рисунок 2.13 содержит иерархию этого пакета.



Рисунок 2.13. Иерархия пакета javax.microedition.pki



Интерфейс:

 Certificate - общий сертификат.


Исключение:

 CertificateExceptio - обобщенный вид ошибок, возникший при использовании данного сертификата.

 


с основами программирования на Java.



В этой главе...

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

История языка программирования Java насчитывает более десяти лет. Вначале, при создании Java, планировалось использовать этот язык для программирования микроконтроллеров бытовых устройств. Поэтому язык Java, тогда он, правда, имел другое название, изначально создавался независимым от архитектуры, компактным и безопасным, что в последствии сыграло решающую роль в его широком распространении. Однако, в тот момент язык программирования Java не смог обрести популярности. Более того, он оказался совершенно невостребованным. И только благодаря появлению сети World Wide Web, язык программирования Java получил настоящее признание, но уже в сфере Интернет-программирования. За этот десяток лет компанией Sun Microsystems было создано несколько платформ для различных сфер деятельности.

Java 2 Enterprise Edition - эта платформа необходима при создании серверных приложений;   Java 2 Standard Edition - используется для работы на простых компьютерных системах;  Java 2 Micro Edition - ориентирована на работу с портативными устройствами.

Все три платформы занимают свои ниши и решают круг определенных задач. Но если платформы Java 2 ЕЕ и Java 2 SE испытывают жесткую конкуренцию в своем секторе рынка со стороны других технологий, то Java 2 ME находится вне конкуренции и является фактически стандартом в разработке программ для портативных устройств. Можно с уверенностью сказать: то, для чего изначально создавался язык программирования Java, а именно, создание программ для бытовых устройств, в итоге и стало его стихией.

Так что такое платформа Java 2 ME, для чего она нужна и как устроена? На эти и другие вопросы мы попытаемся дать ответ в этой главе.

Язык программирования Java независим от архитектуры, в силу того, что используется интерпретатор, переводящий байт-код, сгенерированной компилятором в машинно-независимый код. Интерпретация кода осуществляется под управлением системы выполнения, носящей название виртуальная Java машина. Такой механизм образует среду исполнения приложений. Среда исполнения, в свою очередь, предъявляет определенные требования, к свойствам языка программирования Java, построенные на основе спецификации Java Language Specification, разработанной компанией Sun Microsystems. При написании программ на Java активно используются библиотека Java API, без которых написать приложение практически невозможно. Библиотека Java API содержит огромное количество предопределенных интерфейсов, классов, методов, констант помогающих программисту в минимальные сроки создавать рабочее приложение.

Подобный механизм создания и выполнения программ характерен для всех трех имеющихся платформ Java 2 ЕЕ, Java 2 SE и Java 2 ME. Платформы Java 2 ЕЕ и Java 2 SE можно признать почти одинаковыми, однако Java 2 ЕЕ несколько мощнее и содержит ряд библиотек позволяющих производить разработку программного обеспечения для серверов, а вот платформа Java 2 ME ориентирована именно на работу с портативными устройствами. В связи с этим Java 2 ME предъявляет уже свои требования к виртуальной Java машине, свойствам языка Java и библиотекам, поскольку системные ресурсы портативных устройств ограничены в силу своей спецификации аппаратного обеспечения. Небольшие размеры портативных устройств накладывают значительные ограничения на процессор, память, дисплей, устройство ввода, но платформа Java 2 ME разработана специально для того, чтобы создавать программы, ориентированные именно на такие портативные устройства.

Среда исполнения приложений Java, должна находиться внутри портативных устройств. За это отвечает их производитель, и это как раз и характеризует конкретное устройство, как устройство, поддерживающее технологию Java.

Количество портативных устройств поддерживающих Java достаточно большое, но мощность и, соответственно, возможности устройств различны. Поэтому платформа Java 2ME разработана в виде блочной модели надстраиваемых модулей, конфигураций и профилей.

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

Платформа Java 2 ME состоит из двух конфигураций: CDC (Connected Device Configuration - конфигурация подключаемых устройств) и CLDC (Connected Limited Device Configuration - конфигурация подключаемых устройств с ограничениями). Каждая из конфигураций определяет свое семейство портативных устройств. При программировании мобильных телефонов используется конфигурация CLDC. Каждая из конфигураций содержит свои профили, которые надстраиваются над своей конкретной конфигурацией. Когда программист создает программное обеспечение для портативных устройств, он обязан четко осознавать под какой профиль и конфигурацию он пишет программу, а производитель устройства должен осуществить поддержку того или иного профиля в связке со своей конфигурацией.

Как программист вы не можете повлиять на сущность профилей и конфигураций - это жестко заданныеспецификации, используемые в программировании портативных устройств. При создании программ вы будете ориентироваться на профиль, устанавливающий требования к аппаратной части устройства. На Рисунок 2.1 представлена общая схема модульного построения платформы Java 2 ME.