Presentation is loading. Please wait.

Presentation is loading. Please wait.

Java 2 Micro Edition Разработване на приложения за мобилни телефони Пламен Желязов Eternity Logic.

Similar presentations


Presentation on theme: "Java 2 Micro Edition Разработване на приложения за мобилни телефони Пламен Желязов Eternity Logic."— Presentation transcript:

1 Java 2 Micro Edition Разработване на приложения за мобилни телефони Пламен Желязов Eternity Logic

2 За какво ще говорим? ● Какво е Java ● Какво e CLDC и MIDP ● Преглед на достъпни API ● Какво е Мидлет ● LCDUI – Класове и възможности ● Други важни класове ● Примерна програма

3 Какво е Java? ● Езикът Java ● Java editions – Standard Edition (J2SE) – Enterprise Edition (J2EE) – Micro Edition (J2ME) ● Java Community Process (JCP) – JSR – Java Specification Request

4 Структура на J2ME ● CDC – Connected Device Configuration ● CLDC – Connected Limited Device Configuration ● Java Card Technology

5 CLDC Technology (1/3) ● Connected Limited Device Configuration (CLDC); JSR 30, JSR 139 ● Mobile Information Device Profile (MIDP); JSR 37, JSR 118 ● Information Module Profile, (IMP); JSR 195

6 CLDC Technology (2/3) ● Java Technology for the Wireless Industry, (JTWI); JSR 185 ● Mobile Media API (MMAPI); JSR 135 ● File Connection and PIM API (JSR 75) ● Location API for J2ME; JSR 179 ● SIP API for J2ME; JSR 180

7 CLDC Technology (3/3) ● Security and Trust Services API for J2ME (SATA); JSR-177 ● Mobile 3D Graphics; JSR-184 ● J2ME Web Services APIs (WSA), JSR-172 ● Bluetooth API JSR-82 ● J2ME Content Handler API (CHAPI) JSR 211

8 CLDC Версии ● CLDC 1.0 (JSR 30) – java.lang – java.util – java.io – javax.microedition.io ● CLDC 1.1 (JSR 139) – floating point операции – Поддръжка на weak reference – Подобрения в нишките

9 MIDP 1.0 ● MIDP 1.0 (JSR 37) – javax.microedition.lcdui – javax.microedition.lcdui.game – javax.microedition.media – javax.microedition.midlet – javax.microedition.rms

10 MIDP 2.0 ● MIDP 2.0 (JSR 118) – Enhanced user interface – Enhanced multimedia/gaming – Better connectivity (unbound connections) – OTA (over the air) provisioning – Better security

11 Видове устройства ● MIDP 1.0 / CLDC 1.0 – Nokia, Motorola, Siemens, LG, SE и други. ● MIDP 2.0 / CLDC 1.0 – Новите устройства на Nokia ser. 40, Nokia ser. 60, Siemens 65x, Motorola, SE, и други. ● MIDP 2.0 / CLDC 1.1 – Нови устройства от Nokia ser. 60, ser. 80, ser. 90, Siemens 65x, 75x, SE и други.

12 Optional Packages (1/2) ● Mobile Media API (MMAPI); JSR 135 ● Mobile 3D Graphics; JSR-184 ● J2ME Web Services APIs, (WSA); JSR 172 ● Bluetooth API (JSR-82) ● Location API for J2ME; JSR 179

13 Optional Packages (2/2) ● SIP API for J2ME; JSR 180 ● Security and Trust Services (SATSA); JSR-177 ● File Connection and PIM API (JSR 75)

14 API fragmentation Проблемът: Твърде много възможни комбинации: ● Различни размери на екрана и брой цветове ● Различни медийни формати ● Connectivity features (sms/ssl/udp) ● Vendor specific API (Nokia, Siemens и др.)

15 Решение? ● Разработка на отделни версии на критичните сегменти код ● Използване на “условна компилация” (j2mepolish, jpp и други). ● Когато е възможно – използване на най- ниска версия на API.

16 Java Technology for Wireless Industry: ● Стандартизация на минимален набор от API с цел избягване на фрагментацията: CLDC 1.0 (JSR 30) или CLDC 1.1 (JRS 139) MIDP 2.0 (JSR 118), WMA 1.1 (JSR 120), MMAPI (JSR 135) Поддържа се от най-новите устройства на всички големи производители. JTWI (JSR 185)

17 Какво е Midlet Suite Приложение, написано според MIDP спецификацията :) ● Съдържа един или повече наследници на javax.microedition.midlet.MIDlet ● class файловете са преминали процес на верификация ● Class-файловете са пакетирани в JAR ● JAD файл с допълнителна информация

18 Жизнен цикъл на Midlet

19 Как изглежда кода? import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class HelloWorldMidlet extends MIDlet { public HelloWorldMidlet() { super(); } protected void startApp() throws MIDletStateChangeException { } protected void pauseApp() { } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { }

20 JAD Java Application Descriptor Съдържа информация за Midlet Suite ● Списък с мидлетите ● Версия на CLDC и MIDP ● Производител ● Адрес за инсталация ● Размер на JAR файла

21 Примерен JAD файл (1/2) MIDlet-1: Hello World,/icon1.png,HelloWorldMidlet MIDlet-2: Hello World Canvas,/icon2.png,HelloWorldCanvas MIDlet-Name: Lecture Midlet Suite MIDlet-Description: This is just Demo MIDlet-Jar-URL: http://eternity-logic.com/j2me/Lecture.jar MIDlet-Jar-Size: 5247 MIDlet-Data-Size: 1024 MIDlet-Version: 1.0.0 MIDlet-Vendor: Eternity Logic MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0

22 Примерен JAD файл (2/2) MIDlet-Info-URL: http://eternity-logic.com/info/ MIDlet-Install-Notify: http://eternity- logic.com/midlet_install.jsp?name=HelloWorld MIDlet-Delete-Notify: http://eternity- logic.com/midlet_uninstall.jsp?name=HelloWorld MIDlet-Delete-Confirm: Are you shure? MIDlet-Permissions: javax.microedition.io.Connector.http Property1: Value1 Property2: Value2

23 Преглед на LCDUI ➔ java.lang.Object ➔ Displayable ➔ Display ➔ AlertType ➔ Command ➔ Font ➔ Graphics ➔ Image ➔ Item ➔ Ticker ➔ Displayable ➔ Canvas ➔ Screen ➔ Form ➔ List ➔ TextBox ➔ Alert ➔ Item ➔ ChoiceGroup ➔ CustomItem ➔ DateField ➔ Gauge ➔ ImageItem ➔ Spacer ➔ StringItem ➔ TextField javax.microedition.lcdui classes ➔ Choice ChoiceGroup, List ➔ CommandListener ➔ ItemCommandListener ➔ ItemStateListener Interfaces

24 Hello World ! public class HelloWorldMidlet extends MIDlet implements CommandListener { Form helloForm = new Form ("Demo"); Command cmdExit = new Command ("Exit",Command.EXIT,0); protected void startApp() throws MIDletStateChangeException { helloForm.append("Hello World!"); helloForm.addCommand(cmdExit); helloForm.setCommandListener(this); Display.getDisplay(this).setCurrent(helloForm); } public void commandAction(Command cmd, Displayable displ) { if (displ==helloForm && cmd==cmdExit) { Display.getDisplay(this).setCurrent(null); notifyDestroyed(); }

25 Класът StringItem mainForm.append("This is a simple label"); item = new StringItem("This is a StringItem label: ", "This is the StringItems text"); mainForm.append(item); item = new StringItem("Short label: ", "text"); mainForm.append(item); item = new StringItem("Hyper-Link ", "hyperlink", Item.HYPERLINK); mainForm.append(item); item = new StringItem("Button ", "Button", Item.BUTTON); mainForm.append(item);

26 Класът Item Базов клас за всички класове, чиито инстанции могат да се добавят във форма По важни методи: ● getMinimumHeight(), getMinimumWidth(), getPreferredHeight(), getPreferredWidth(),setPreferredSize() ● notifyStateChanged() ● AddCommand (), removeCommand (), setDefaultCommand (), setItemCommandListener ● notifyStateChanged()

27 Класът Form Контейнер за Item subclasses. Методи: ● append(Image img), append(Item item), append(String str), set(int itemNum, Item item) ● delete(int itemNum), deleteAll() ● Item get(int itemNum) ● getHeight(), getWidth() ● setItemStateListener(ItemStateListener iListener)

28 The Layout (1/3) ● Не може да се разположи Item на конкретни координати. ● Елементите се показват по техния ред, в зависимост от имплементацията ● Елементите се разползагат в “Редове” ● Покзаването може да се управлява чрез метода setLayout () на класа Item ● Алгоритъмът за разползагане разчита на т.нар. Current Layout

29 The Layout (2/3) ● LAYOUT_DEFAULT ● LAYOUT_LEFT ● LAYOUT_RIGHT ● LAYOUT_CENTER ● LAYOUT_TOP ● LAYOUT_BOTTOM ● LAYOUT_VCENTER ● LAYOUT_NEWLINE_BEFORE ● LAYOUT_NEWLINE_AFTER ● LAYOUT_SHRINK ● LAYOUT_VSHRINK ● LAYOUT_EXPAND ● LAYOUT_VEXPAND ● LAYOUT_2

30 Класът TextField Constructor: TextField(String label, String text, int maxSize, int constraints) Sample: new TextField("Any Character", "", 15, TextField.ANY); new TextField("E-Mail", "", 15, TextField.EMAILADDR); new TextField("Number", "", 15, TextField.NUMERIC); new TextField("Decimal", "", 15, TextField.DECIMAL); new TextField("Phone", "", 15,TextField.PHONENUMBER); new TextField("Password", "", 15, TextField.PASSWORD); new TextField("URL", "", 15, TextField.URL);

31 Класът ChoiceGroup (1/2) String[] sa = {"Option A", "Option B", "Option C", "Option D"}; Image img = Image.createImage (“/pic.img”); form.append(new ChoiceGroup( "Exclusive", ChoiceGroup.EXCLUSIVE, sa, img)); form.append(new ChoiceGroup( "Multiple", ChoiceGroup.MULTIPLE, sa,img)); form.append(new ChoiceGroup( "Pop-Up", ChoiceGroup.POPUP, sa,img));

32

33 Класът Canvas – директен достъп до екрана ● Наследниците на Canvas имплементи-рат метод protected void paint(Graphics g) ● paint () не се вика директно – извиква се repaint () ● За директен достъп до екрана се използва параметъра (Graphics g)

34 Canvased Hello World! protected void paint(Graphics g) { g.drawLine(5,5,30,30); g.drawString("Hello World!", getWidth()/2, getHeight()/2, Graphics.TOP | Graphics.HCENTER); }

35 CustomItem Създаване на собствени контроли ● За създаване на собствени контроли се наследява класа javax.microedition.lcdui.CustomItem ● Задължително се имплементира void paint(Graphics g, int w, int h); ● Незадължително – traverse, traverseOut, keyPressed, keyReleased, keyRepeated и други.

36

37 Други UI класове (Screen) ● List – Аналог на ChoiceGroup, но се показва на цял екран ● Alert – Показва съобщение на екрана (info, warning, error и др.) ● TextBox – Аналог на TextField и също се показва на цял екран

38 Други интересни възможности (RMS) ● RMS – Record Memory Store – javax.microedition.rms.RecordStore – Позволява записване на информация върху мобилното устройство – Представлява номерирано множество от записи byte [] – Всеки запис се чете или записва наведнъж – Записите могат да се филтрират, търсят и сравняват по дадени признаци

39 Вход/Изход ● Пакетът javax.microedition.io – javax.microedition.io.Connector – factory за създаване на Connection обекти – Connection – Базов интерфейс за вход/изход – Поддържат се HttpConnection, HttpsConnection, SocketConnection, StreamConnection, UDPDatagramConnection

40 Пример за HTTP Вход HttpConnection httpcon = (HttpConnection) Connector.open(“http://fun.bg”);http://fun.bg InputStream is = httpcon.openInputStream(); byte [] buff = new byte[128]; int count = -1; while ((count = is.read(buff))!=-1) { String text = new String (buff,count); form.append(text); }

41 Демонстрация: Да направим един Midlet ● Weather Midlet – показва метеороло- гичните условия в даден град ● Използваме web service предоставен от http://webservicex.net ● Ще направим заявка, ще изтеглим, обработим и визуализираме резултата

42 Формат на заявката и данните HTTP Get Request: webservicex.net/globalweather.asmx/GetWeather? CountryName=Bulgaria&CityName=Sofia

43 Формат на отговора Response: Sofia Observ., Bulgaria (LBSF) 42-39N 023-23E 595M Nov 29, 2005 - 04:00 AM EST / 2005.11.29 0900 UTC Variable at 2 MPH (2 KT) 4 mile(s) mostly clear 48 F (9 C) 41 F (5 C) 75% 29.97 in. Hg (1015 hPa) Success

44 Да напишем кода ● Ще използваме Eclipse ● Плъгинът EclipseME ще автоматизира част от работата ● За емулатор – WTK 2.2 на Sun Microsystems

45 That’s all folks! Благодаря Ви за вниманието! Имате ли въпроси?


Download ppt "Java 2 Micro Edition Разработване на приложения за мобилни телефони Пламен Желязов Eternity Logic."

Similar presentations


Ads by Google