Błażej Pietrzak blazej.pietrzak@cs.put.poznan.pl J2ME CLDC MIDP 1.0 Błażej Pietrzak blazej.pietrzak@cs.put.poznan.pl.

Slides:



Advertisements
Podobne prezentacje
Sekcja Inżynierii Oprogramowania Koła Naukowego Informatyków
Advertisements

Wstęp do strumieni danych
Java dla studentów II roku Wydziału Fizyki PW Przemysław Duda, 2012
Programowanie obiektowe
Programowanie obiektowe Andrzej Ziółkowski Wykład 3.
Klasy i obiekty.
Bezpieczeństwo wyjątków w C++: OpenGL
Tworzenie i obsługa programów – przykład 3 uwagi cd. Wykorzystując różne klasy biblioteki języka Java należy pamiętać w jakim pakiecie się znajdują. Wszystkie.
Wydajne aplikacje na platformie .NET
Nguyen Hung Son Uniwersytet Warszawski
Programowanie obiektowe w Javie
Wybrane elementy języka Java
Wybrane elementy języka Java – ciąg dalszy
Model – View - Controler
Szkolenie dla NaviExpert, Testowanie jednostkowe.
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Widoki.
Jacek Pospychała Pospychała Eclipse Summer School 2007Eclipse Summer School 2007.
Hibernate Klasy trwałe
Obiektowe metody projektowania systemów Command Pattern.
WPROWADZENIE DO JĘZYKA JAVA
Programowanie sieciowe w Javie
Gniazda komunikacji sieciowej w języku Java
P I OTR SKOŁYSZ. POCHODZENIE I CELE CZYM JEST.NET ? CO IMPLEMENTUJE MONO ? ŚRODOWISKO PRACY [MONODEVELOP] SYTEMY OPERACYJNE CO PROGRAMOWAĆ ? JĘZYKI PRZYKŁADOWY.
Czytanie, pisanie i rysowanie – cd.. Jeszcze jeden strumyk PrintStream działa jak PrintWriter, ale: Używa domyślnego (systemowego) kodowania Nie wyrzuca.
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Obsługa systemu wejścia-wyjścia
Język Java Wielowątkowość.
Odwzorowania relacyjno-obiektowe Hibernate Klasy trwałe.
Projektowanie warstwy serwera Acegi. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego.
Hibernate uzupełnienie
Projektowanie warstwy serwera Wprowadzenie. Projektowanie warstwy serwera Projekt współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu.
WebSphere Everyplace Micro Environment IBM Workplace Client Technology, Micro Edition Monika Nawrot, Tomasz Jadczyk, Tomasz Sadura KI, EAIiE, AGH.
Techniki i języki programowania
Podstawy C# Grupa .NET PO.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Integracja aplikacji Wykład 2
Transakcje zarządzane kontenerem
Programowanie urządzeń mobilnych
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
Tadeusz Ziębakowski Zachodniopomorski Uniwersytet Technologiczny.
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
Generatory dokumentacji kodu źródłowego
W większości języków programowania biblioteki wejścia/wyjścia ukrywają szczegóły obsługi poszczególnych mediów pod abstrakcją strumienia (ang. stream).
Tworzenie aplikacji mobilnych
Obsługa systemu wejścia-wyjścia
Tworzenie aplikacji mobilnych
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Seminarium problemowe
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Platforma analizy wizualnej - VisNow Szkolenie Platforma analizy wizualnej - VisNow Szkolenie 15 maja 2013, Sesja sprawozdawcza KDM Krzysztof S. Nowiński.
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
  ELEMENTY JĘZYKA JAVA komentarze w Javie, słowa kluczowe i operatory, proste typy danych, tablice, podstawowy zestaw instrukcji.
Podstawy programowania (4)
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Informatyka Stosowana – ROK II / III
PROGRAMOWANIE W JAVA Informatyka Stosowana – ROK II / III Laboratoria mgr inż. Krzysztof Bzowski.
Model współbieżności w Javie
Wykład 11 Aplikacje SDI PO11-1 / 22 Single Document Interface 1.Klasy aplikacji SDI 2.Menu systemowe aplikacji SDI 3.Serializacja 4.Tworzenie widoku 5.Tworzenie.
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
do programowania obiektowego w języku Groovy
Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:
InMoST, Java – przykładowa aplikacja Bartosz.Michalik
Programowanie Obiektowe – Wykład 6
(według:
Założenia projektowe Javy
Tworzenie wątków w Javie
Zapis prezentacji:

Błażej Pietrzak blazej.pietrzak@cs.put.poznan.pl J2ME CLDC MIDP 1.0 Błażej Pietrzak blazej.pietrzak@cs.put.poznan.pl

Plan prezentacji Przegląd technologii Java J2ME CLDC MIDP 1.0 OTA Provisioning CLDC MIDP 1.0 API Problemy implementacyjne

Przegląd technologii Java

Skróty CLDC – Connected Limited Device Configuration CDC – Connected Device Configuration KVM – Kilobyte Java Virtual Machine JVM – Java Virtual Machine MID – Mobile Information Device MIDP - Mobile Information Device Profile

Stos J2ME

Stos J2ME - Konfiguracje

CLDC – Charakterystyka urządzeń 160kB – 512 kB pamięci dla platformy Java Procesor 16-bit lub 32-bit Niskie zużycie energii Dostęp do sieci, często bezprzewodowej, o niskiej przepustowości (często 9600 bps i niższej)

CLDC – Zakres Podstawowe biblioteki Java java.lang.*, java.util.* Wejście / Wyjście java.io.* Sieć (tylko interfejs) Generic Connection Framework Bezpieczeństwo Lokalizacja (ang. Internationalization) zapis/odczyt Unicode ze strumieni

CLDC – Zakres c.d. System properties microedition.platform java.lang.System.getProperty(key) microedition.platform microedition.encoding microedition.configuration microedition.profiles

CLDC – Bezpieczeństwo Weryfikacja pobranych klas Aplikacje uruchamiane są w piaskownicy (ang. Sandbox) Klasy w chronionych pakietach systemowych nie mogą być nadpisane przez aplikacje

CLDC – Ograniczenia Ograniczenia w stosunku do J2SE Brak danych typu zmiennoprzecinkowego float double Brak finalizacji (ang. finalization) instancji klas Object.finalize() nie istnieje Obsługa błędów brak większości podklas java.lang.Error Błędy są obsługiwane w sposób zależny od urządzenia

CLDC – Ograniczenia c.d. Brak Java Native Interface (JNI) Brak class-loaders zdefiniowanych przez użytkownika Brak mechanizmu refleksji (ang. reflection) Brak obsługi grup wątków i wątków demonów Brak słabych referencji (ang. weak references)

CLDC/KVM – Weryfikacja klas

CLDC/KVM – Weryfikacja klas c.d. Do klasy dodany jest atrybut „stack map” nie występujący w J2SE Zwiększony rozmiar klasy o około 5% Szybciej niż w J2SE mniejsze zużycie pamięci niż w J2SE ten sam poziom bezpieczeństwa co w J2SE Klasy mogą nadal być uruchamiane w J2SE

MIDP – Charakterystyka MID Wyświetlacz (wymagania minimalne) Rozmiar 96x54 pikseli Głębia koloru 1-bit Kształt piksela (Aspect ratio) około 1:1 Wejście One-handed keyboard (ITU-T phone keypad) Two-handed keyboard (QWERTY keyboard) Ekran dotykowy

MIDP - Zakres Interfejs użytkownika Generic Connection Framework Structured (Screen) wysokopoziomowy dostęp większa przenoszalność Unstructured (Canvas) niskopoziomowy dostęp mniejsza przenoszalność Generic Connection Framework protokół http

MIDP – Zakres c.d. Dostęp do pamięci „stałej” urządzenia Record Store Dane zapisywane w postaci rekordów Możliwość prostego filtrowania rekordów Cykl życia aplikacji MIDlet System properties microedition.locale

OTA Provisioning MIDlet Suite - dystrybucja aplikacji J2ME *.jad JAva Descriptor *.jar JAva aRchive

OTA Provisioning – c.d.

OTA Provisioning – c.d.

OTA Provisioning – c.d. HTTP 401 (unauthorized) lub 407 (proxy authentication required) Implementacja przynajmniej Basic Authentication Scheme cookie jako identyfikator sesji MIME text/vnd.sun.j2me.app-descriptor jad Kodowanie przynajmniej UTF-8

OTA Provisioning – c.d. Identyfikacja urządzenia User-Agent Accept-Language Accept

OTA Provisioning – c.d. Plik JAD – wymagane atrybuty Atrybut Opis MIDlet-Name Nazwa MIDlet Suite MIDlet-Version Numer wersji MIDlet Suite MIDlet-Vendor Organizacja MIDlet-<n> Nazwa, ikona, klasa <n> MIDletu MIDlet-Jar-URL URL, z którego można pobrać plik jar MIDlet-Jar-Size Liczba bajtów pliku jar MicroEdition-Configuration Wymagany profil J2ME MicroEdition-Profile Wymagana konfiguracja J2ME

OTA Provisioning – c.d. Plik JAD – opcjonalne atrybuty Atrybut Opis MIDlet-Data-Size Minimalna liczba bajtów pamięci MIDlet-Delete-Confirm Treść pytania przy usuwaniu MIDlet Suite MIDlet-Description Opis MIDlet Suite MIDlet-Icon Ikona MIDlet Suite MIDlet-Info-URL URL do dodatkowej informacji MIDlet-Install-Notify Status pobierania MIDlet Suite

OTA Provisioning – c.d. Fragment przykładowego pliku jad MIDlet-Name: Sample MIDlet-Version: 1.0 MIDlet-Vendor: BP MicroEdition-Profile: MIDP-1.0 MicroEdition-Configuration: CLDC-1.0 ... MIDlet-1: Sokoban, /icons/Sokoban.png, com.bp.sokoban.Sokoban MIDlet-2: HttpTest,,com.bp.http.HttpTest

API - MIDlet Pakiet javax.microedition.midlet

API – interfejs użytkownika Command

API – interfejs użytkownika Command – c.d.

API – interfejs użytkownika Pakiet javax.microedition.lcdui

API – Hello World

API – HelloWorld.jad MIDlet-1: Hello World, , HelloWorldMIDlet MIDlet-Jar-Size: 100 MIDlet-Jar-URL: HelloWorld.jar MIDlet-Name: HelloWorld MIDlet-Vendor: BP MIDlet-Version: 1.0 text: JUG rulez!

API – HelloWorldMIDlet.java public class HelloWorldMIDlet extends MIDlet { private Displayable form = new HelloWorldForm(getAppProperty("text")); public HelloWorldMIDlet() { form.setCommandListener( new HelloWorldListener(this)); } protected void startApp() throws MIDletStateChangeException { Display.getDisplay(this).setCurrent(form); protected void pauseApp() { } public void destroyApp(boolean unconditional) notifyDestroyed();

API – HelloWorldForm.java import javax.microedition.lcdui.*; public class HelloWorldForm extends Form { public static final String EXIT = "Wyjście"; public HelloWorldForm(String text) { super("Hello World"); append((text == null) ? "" : text); addCommand(new Command(EXIT, Command.EXIT, 1)); }

API – HelloWorldListener.java public class HelloWorldListener implements CommandListener { private HelloWorldMIDlet owner = null; public HelloWorldListener(HelloWorldMIDlet owner) { this.owner = owner; } public void commandAction(Command c, Displayable d){ if (c.getLabel().equals(HelloWorldForm.EXIT)) { try { owner.destroyApp(false); } catch (MIDletStateChangeException ex) { }

API – Generic Connection Framework Pakiet javax.microedition.io

API – Generic Connection Framework – Przykłady Connection conn = Connector.open({scheme}:[{target}][parms]); Pliki (StreamConnection) Connector.open(„file://bp.txt”); HTTP (HttpConnection) Connector.open(„http://localhost:8080/”); Sockets (DatagramConnection) Connector.open(„socket://129.14.11.2:9000”);

API – Record Store pakiet javax.microedition.rms

API – RecordStore – Przykład public class FilterComparator implements RecordFilter, RecordComparator { public boolean matches(byte[] candidate) { return (candidate[0] == ‘A’ ? false : true; } public int compare(byte[] arg1, byte[] arg2){ if (arg1[0] > arg2[0]) { return 1; } if (arg1[0] == arg2[0]) { return 0; } if (arg1[0] < arg2[0]) { return –1; }

API – RecordStore – Przykład public void openRecordStore(String name) { try { recordStore = RecordStore.openRecordStore(name, true); } catch (RecordStoreException ex) { } }

API – RecordStore – Przykład public void addPerson(String name, int age) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream outputStream = new DataOutputStream(baos); try { outputStream.writeInt(age); outputStream.writeUTF(name); } catch (IOException ex) { } byte[] b = baos.toByteArray(); recordStore.addRecord(b, 0, b.length); } catch (RecordStoreException ex) { } }

API – RecordStore – Przykład public void printPeople(RecordFilter filter, RecordComparator comparator) { RecordEnumeration re = null; ByteArrayInputStream bais = null; DataInputStream inputStream = null; try { re = recordStore.enumerateRecords(filter, comparator, true); while (re.hasNextElement()) { int id = re.nextRecordId(); bais = new ByteArrayInputStream( recordStore.getRecord(id)); inputStream = new DataInputStream(bais); ...

API – RecordStore – Przykład try { int age = inputStream.readInt(); String name = inputStream.readUTF(); } catch (EOFException ex) { } ....

Implementacja Problemy Rozmiar pamięci Szybkość działania Rozmiar kodu Rozmiar ekranu Klawiatura Błędy w implementacji KVM Garbage Collector

Literatura Mobile Information Device Profile (MIDP) 1.0 Final http://jcp.org/aboutJava/communityprocess/final/jsr037/index.html MIDP APIs for Wireless Applications http://java.sun.com/products/midp/midp-wirelessapps-wp.pdf Applications for MIDs http://java.sun.com/products/midp/midpwp.pdf MIDP 1.0 Style Guide http://java.sun.com/j2me/docs/zip/style-guide-html.zip Forum Nokia http://www.forum.nokia.com/ Motocoder http://developers.motorola.com/developers/default.asp

Koniec Dziękuję za uwagę i oczekuję pytań 