1 / 45

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

Пламен Желязов Eternity Logic. Java 2 Micro Edition Разработване на приложения за мобилни телефони. За какво ще говорим?. Какво е Java Какво e CLDC и MIDP Преглед на достъпни API Какво е Мидлет LCDUI – Класове и възможности Други важни класове Примерна програма. Какво е Java?.

emmy
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  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. JTWI(JSR 185) • 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) • Поддържа се от най-новите устройства на всички големи производители.

  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. JADJava 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. Displayable Canvas Screen Form List TextBox Alert Преглед на LCDUI javax.microedition.lcdui classes • java.lang.Object • Displayable • Display • AlertType • Command • Font • Graphics • Image • Item • Ticker • Item • ChoiceGroup • CustomItem • DateField • Gauge • ImageItem • Spacer • StringItem • TextField Interfaces • Choice • ChoiceGroup, List • CommandListener • ItemCommandListener • ItemStateListener

  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. LAYOUT_NEWLINE_BEFORE LAYOUT_NEWLINE_AFTER LAYOUT_SHRINK LAYOUT_VSHRINK LAYOUT_EXPAND LAYOUT_VEXPAND LAYOUT_2 The Layout (2/3) • LAYOUT_DEFAULT • LAYOUT_LEFT • LAYOUT_RIGHT • LAYOUT_CENTER • LAYOUT_TOP • LAYOUT_BOTTOM • LAYOUT_VCENTER

  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. Класът Canvas –директен достъп до екрана • Наследниците на Canvas имплементи-рат метод protected void paint(Graphics g) • paint () не се вика директно – извиква се repaint () • За директен достъп до екрана се използва параметъра (Graphics g)

  33. 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); }

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

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

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

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

  38. Пример за HTTP Вход HttpConnection httpcon = (HttpConnection) Connector.open(“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); }

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

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

  41. Формат на отговора Response: <?xml version="1.0" encoding="utf-8"?> <string xmlns="http://www.webserviceX.NET"> <CurrentWeather> <Location> Sofia Observ. , Bulgaria (LBSF) 42-39N 023-23E 595M </Location> <Time> Nov 29, 2005 - 04:00 AM EST / 2005.11.29 0900 UTC </Time> <Wind>Variable at 2 MPH (2 KT)</Wind> <Visibility>4 mile(s)</Visibility> <SkyConditions>mostly clear</SkyConditions> <Temperature>48 F (9 C)</Temperature> <DewPoint>41 F (5 C)</DewPoint> <RelativeHumidity>75%</RelativeHumidity> <Pressure>29.97 in. Hg (1015 hPa)</Pressure> <Status>Success</Status> </CurrentWeather> </string>

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

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

More Related