Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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.

Podobne prezentacje


Prezentacja na temat: "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."— Zapis prezentacji:

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

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

3 Przegląd technologii Java

4 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

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.platform
java.lang.System.getProperty(key) microedition.platform microedition.encoding microedition.configuration microedition.profiles

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

11 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

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

16 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

17 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

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-Agent
Accept-Language Accept

23 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

24 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

25 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

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żytkownika
Pakiet javax.microedition.lcdui

30 API – Hello World

31 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!

32 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();

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

34 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) { }

35 API – Generic Connection Framework
Pakiet javax.microedition.io

36 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:// :9000”);

37 API – Record Store pakiet javax.microedition.rms

38 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; }

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

40 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) { } }

41 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); ...

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

43 Implementacja Problemy Rozmiar pamięci Szybkość działania Rozmiar kodu
Rozmiar 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ń 


Pobierz ppt "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."

Podobne prezentacje


Reklamy Google