Błażej Pietrzak [email protected] J2ME CLDC MIDP 1.0 Błażej Pietrzak [email protected].

1 Błażej Pietrzak [email protected] CL...
Author: Konstanty Gradek
0 downloads 0 Views

1 Błażej Pietrzak [email protected]J2ME CLDC MIDP 1.0 Błażej Pietrzak

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

3 Przegląd technologii Java

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

5 Stos J2ME

6 Stos J2ME - Konfiguracje

7 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)

8 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

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

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

11 CLDC – Ograniczenia Ograniczenia w stosunku do J2SEBrak 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

12 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)

13 CLDC/KVM – Weryfikacja klas

14 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

15 MIDP – Charakterystyka MIDWyś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

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

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

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

19 OTA Provisioning – c.d.

20 OTA Provisioning – c.d.

21 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

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

23 OTA Provisioning – c.d. Plik JAD – wymagane atrybuty Atrybut OpisMIDlet-Name Nazwa MIDlet Suite MIDlet-Version Numer wersji MIDlet Suite MIDlet-Vendor Organizacja MIDlet- Nazwa, ikona, klasa 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

24 OTA Provisioning – c.d. Plik JAD – opcjonalne atrybuty Atrybut OpisMIDlet-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

25 OTA Provisioning – c.d. Fragment przykładowego pliku jadMIDlet-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

26 API - MIDlet Pakiet javax.microedition.midlet

27 API – interfejs użytkownika Command

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

29 API – interfejs użytkownikaPakiet javax.microedition.lcdui

30 API – Hello World

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

32 API – HelloWorldMIDlet.javapublic 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();

33 API – HelloWorldForm.javaimport 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)); }

34 API – HelloWorldListener.javapublic 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) { }

35 API – Generic Connection FrameworkPakiet javax.microedition.io

36 API – Generic Connection Framework – PrzykładyConnection 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:// :9000”);

37 API – Record Store pakiet javax.microedition.rms

38 API – RecordStore – Przykładpublic 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; }

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

40 API – RecordStore – Przykładpublic 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) { } }

41 API – RecordStore – Przykładpublic 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); ...

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

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

44 Literatura Mobile Information Device Profile (MIDP) 1.0 Final MIDP APIs for Wireless Applications Applications for MIDs MIDP 1.0 Style Guide Forum Nokia Motocoder

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