« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
    Популярное
Функция AccessResource

Функция GlobalUnfix

Глава 9. ОБЪЕДИНЕНИЕ ТАБЛИЦЫ С СОБОЙ

Поиск и фильтрация данных в Delphi

Некоторые аспекты использования пользовательских функций в предложениях SQL.

Создание документа XML из объекта DataSet (Набор данных)

Инструкция присваивания

Data

Ошибки начинающих PHP разработчиков

Двоичная система счисления. Бит и байт. Сегментация памяти.




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 149
Пользователей: 0

Статьи:: Интернет технологии :: Java2ME :: Создание простейшего Java приложения для сотового телефона



отправить ссылку другу версия для печати  Обсудить на форуме

Создание простейшего Java приложения для сотового телефона



Создание простейшего Java приложения для сотового телефона

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

Введение

Технология Java была разработана компанией Sun Technologies, Inc. На сайте компании можно найти документацию и средства разработки: http://java.sun.com и http://wireless.java.sun.com/. Спецификации по CLDC и MIDP – наиболее нужные документы для разработчика приложений под «беспроводные устройства связи», находятся по адресу http://java.sun.com/j2me/docs.

Несколько слов про совместимость. Как известно, поддержка сотовыми телефонами языка Java предполагала появление универсального средства разработки. В реальности все оказалось не совсем так. Да, язык программирования один и, при необходимости, адаптировать программу для работы на разных телефонах вполне реально. Но, иногда, для этого приходится выпускать несколько версий приложения.

Дело в том, что основным предназначением Java очень быстро стала разработка игр. И вот здесь MIDP 1.0 (Mobile Information Device Profile), использующийся в настоящий момент в большинстве телефонов, оказался не на высоте. Отсутствие возможности использования прозрачных спрайтов уже сильно затрудняло разработку приложений. К этому прибавлялось невозможность использования полноэкранного режима, поворота и инвертирования спрайтов (чтобы сделать кораблик, способный лететь в четыре направления, надо было рисовать и закачивать на телефон четыре практически одинаковых спрайта, что отрицательно сказывалось на размерах игры и доступной памяти) и некоторые прочие недостатки.

Nokia решила не ждать появления MIDP 2.0 и разработать собственный API, ориентированный на производителей игр. MIDP 2.0 до большинства аппаратов Nokia еще не добрался, хотя большинство аппаратов поддерживает отдельные его функции.

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

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

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

Что Вам понадобится

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

       · Java™2 SDK, Standard Edition, v.1.4.1 (http://java.sun.com/j2se/1.4.1/download.html). Размер около 38 мб.

       · J2ME™ Wireless Toolkit 2.0 (http://java.sun.com/products/j2mewtoolkit/). Размер около 10 мб.

Внимание! У приложений Sun Technologies есть одна неприятная особенность. Если произвести установку в каталог, в названии которого имеются пробелы или русские символы, они будут работать некорректно. В частности, будут большие проблемы с поиском библиотек во время компиляции.

Создаем первое приложение

Сейчас мы создадим свое первое Java-приложение, представляющее собой классический пример программы «Hello, world». Будут использоваться универсальные библиотеки, что позволит запускать приложение на любом телефоне, поддерживающем Java с версией MIDP 1.0.

После установки средств разработки, запускайте KToolbar.

Пуск -> Программы -> J2ME Wireless Toolkit 2.0 -> KToolbar

В программе KToolbar создаем новый проект (кнопка New Project…)

Введите название проекта (Project Name) и название класса MIDlet (MIDlet Class Name). Мы будем использовать “Hello” и “HelloWorldMIDLet” соответственно.

После создания проекта будет предложено отредактировать его настройки. Нужно изменить всего один пункт, MicroEdition-Profile на MIDP-1.0 .

Теперь нужно найти созданный проект. Найдите, куда Вы устанавливали J2ME™ Wireless Toolkit 2.0 и разыщите в этом каталоге подкаталог appsHellosrc.

В нем создайте файл с названием «HelloWorldMIDLet.java». Учтите, что Java-код и имена файлов регистрозависимые.

Код программы и комментарии приведены ниже. После заполнения файла скомпилируйте программу нажатием кнопки «Build» и запустите в эмуляторе нажатием на «Run».

Чтобы опробовать созданное приложение на своем телефоне выберите меню Project -> Package -> Create Package. Файлы, предназначенные для закачивания на трубку буду находиться в подкаталоге bin, находящемся в каталоге с программой.

Пример кода:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloWorldMIDlet extends MIDlet

{
    public HelloWorldMIDlet()
    {
    }

    public void startApp()
    {
    Displayable current = Display.getDisplay(this).getCurrent();
        if(current == null)
        {
        HelloScreen helloScreen = new HelloScreen(this, "Hello World."
        Display.getDisplay(this).setCurrent(helloScreen);
        }
    }

    public void pauseApp() 
    {
    }

    public void destroyApp(boolean b) 
    {
    }

    void exitRequested()
    {
        destroyApp(false);
        notifyDestroyed();
    }
}

class HelloScreen extends TextBox implements CommandListener
{
      private final HelloWorldMIDlet midlet;
      private final Command exitCommand;
      HelloScreen(HelloWorldMIDlet midlet, String string)
      {
            super("HelloWorldMIDlet", string, 256, 0);
            this.midlet = midlet;
            exitCommand = new Command("Exit", Command.EXIT, 1);
            addCommand(exitCommand);
            setCommandListener(this);
      }

      public void commandAction(Command c, Displayable d)
      {
            if(c == exitCommand)
            {
                  midlet.exitRequested();
            }
      }
}

Любое J2ME приложение может находится в следующих состояниях: рабочее, пауза и уничтоженное. Для контроля за этими состояниями, управления приложением со стороны аппарата

После создания MIDlet находится в состоянии паузы. Если в конструкторе MIDlet’а происходит прерывание, он немедленно входит в уничтоженное состояние и его ресурсы очищаются. Перейти из активного состояния в паузу приложение может после успешного завершения метода pauseApp (), или, в случае возникновения прерывания в методе startApp ().

Перейти из состояния паузы в активное состояние MIDlet может при успешном завершении метода startApp() в случае нормальной работы приложения.

Метод destroyApp (boolean unconditional) служится для перевода приложения в уничтоженное состояние, т.е. для очистки ресурсов, занимаемых им. Если аргумент unconditional соответствует значению true (истинно), MIDlet будет уничтожен. В противном случае (значение false) и при возникновении прерывания MIDletStateChangeException он не будет уничтожен. В этом случае может понадобится соответствующая обработка возникающих прерываний.

Чего это означает для нас? Функция startApp () вызывается в двух случаях: когда приложение впервые запущено и когда оно возвращается из состояния паузы. Пауза, как правило, включается по решению самого сотового телефона, например, при входящем телефонном звонке (и, в этом случае, автоматом выполняется функция pauseApp(), в которой можно произвести необходимые действия – освободить некоторые ресурсы, остановить таймеры и прочее). В методе destroyApp () пишется код, который будет выполнен непосредственно перед выключением приложения – в частности, из нее может вызываться функция сохранения.

В нашем случае в функции startApp производится анализ показываемого в данный момент экрана:

        Displayable current = Display.getDisplay(this).getCurrent();

и, если показываемый в данный момент объект current пуст (на экране ничего нет) – мы создаем новый объект класса helloScreen и отображаем его на экране.

        if(current == null)
        {
            HelloScreen helloScreen = new HelloScreen(this, "Hello World.");
            Display.getDisplay(this).setCurrent(helloScreen);
        }

 

Функция Display.getDisplay(this) возвращает объект класса Display, который может быть использован в этом MIDlet для отображения информации на экране.

Подробнее разберемся с этим классом. Он наследует параметры класса TextBox, который в свою очередь наследует параметры класса Form. В данном случае это означает, что у нас на экран выводится элемент формы, предназначенный для ввода текста (содержащий строчку string). Кроме того, класс обладает возможностями CommandListener, т.е. может ожидать от пользователя ввода команд, реагировать на них, а также отображать подсказку по действиям команд на экране. В верхней части экрана также показывается строка (В данном случае -  HelloWorldMIDlet).

Все операции организации ввода команд производятся в конструкторе, т.е. функции HelloScreen одноименного класса.

            super("HelloWorldMIDlet", string, 256, 0);

Создаем объект формы с названием (title) "HelloWorldMIDlet", изначальным содержимым (text) равным строке string, максимальной длиной вода 256 и без специальных ограничений на ввод текста.

            this.midlet = midlet;

Просто присваиваем значению объекта midlet в классе значение объекта midlet, переданному в конструктор фукнции.

            exitCommand = new Command("Exit", Command.EXIT, 1);
            addCommand(exitCommand);
            setCommandListener(this);

Создаем новый объект класса Command с названием «Exit», типа Command.EXIT. Пусть это Вас не смущает, несмотря на название типа, срабатывание этой команды не будет приводить к автоматическому выходу из приложения. Обработчик этой команды мы напишем после.

Тип команды указывает телефону, в какое место экрана, обычно предназначено для отображения именно подобных команд, установить ее. В случае, если этих команд в одном месте оказывается несколько (к примеру, на правой soft-клавише телефона на одном экране могут оказаться повешены команды Command.EXIT и Command.BACK, т.е. выход и возврат в предыдущее меню) – обеспечивает выбор меню с соответствующим выбором; в этом порядок следования команд определяется третьим передаваемым параметром – приоритетом ( в нашем случае, 1).

Функция addCommand добавляет выбранный объект (команду) на показываемый экран (Displayable).
setCommandListener включает для данного же экрана режим приема команд.

      public void commandAction(Command c, Displayable d)
      {
            if(c == exitCommand)
            {
                  midlet.exitRequested();
            }
      }

А вот и обработчик. В случае, если вызванная команда соответствует exitCommand, запускает функция exitRequested родительского класса. В данном случае она приводит к закрытию приложения.

Для первого раза вполне достаточно. Только что мы написали простейшую команду на Java2ME, типичный «Hello World».

Запускайте эмулятор кнопкой «Run» и смотрите на результат.




Рубрика: Java2ME




Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

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


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия