Title: J2ME%20CLDC%20MIDP%201.0
1J2ME CLDC MIDP 1.0
- Blazej Pietrzak blazej.pietrzak_at_cs.put.poznan.pl
2Plan prezentacji
- Przeglad technologii Java
- J2ME CLDC MIDP 1.0
- OTA Provisioning
- CLDC MIDP 1.0 API
- Problemyimplementacyjne
3Przeglad technologii Java
4Skró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
5Stos J2ME
6Stos J2ME - Konfiguracje
7CLDC Charakterystyka urzadzen
- 160kB 512 kB pamieci dla platformy Java
- Procesor 16-bit lub 32-bit
- Niskie zuzycie energii
- Dostep do sieci, czesto bezprzewodowej, o niskiej
przepustowosci(czesto 9600 bps i nizszej)
8CLDC Zakres
- Podstawowe biblioteki Java
- java.lang., java.util.
- Wejscie / Wyjscie
- java.io.
- Siec (tylko interfejs)
- Generic ConnectionFramework
- Bezpieczenstwo
- Lokalizacja(ang. Internationalization)
- zapis/odczyt Unicode ze strumieni
9CLDC Zakres c.d.
- System properties
- java.lang.System.getProperty(key)
- microedition.platform
- microedition.encoding
- microedition.configuration
- microedition.profiles
10CLDC Bezpieczenstwo
- Weryfikacja pobranych klas
- Aplikacje uruchamiane sa w piaskownicy (ang.
Sandbox) - Klasy w chronionych pakietach systemowych nie
moga byc nadpisane przez aplikacje
11CLDC Ograniczenia
- Ograniczenia w stosunku do J2SE
- Brak danych typu zmiennoprzecinkowego
- float
- double
- Brak finalizacji (ang. finalization) instancji
klas - Object.finalize() nie istnieje
- Obsluga bledów
- brak wiekszosci podklas java.lang.Error
- Bledy sa obslugiwane w sposób zalezny od
urzadzenia
12CLDC Ograniczenia c.d.
- Brak Java Native Interface (JNI)
- Brak class-loaders zdefiniowanych przez
uzytkownika - Brak mechanizmu refleksji (ang. reflection)
- Brak obslugi grup watków i watków demonów
- Brak slabych referencji (ang. weak references)
13CLDC/KVM Weryfikacja klas
14CLDC/KVM Weryfikacja klas c.d.
- Do klasy dodany jest atrybut stack map nie
wystepujacy w J2SE - Zwiekszony rozmiar klasy o okolo 5
- Szybciej niz w J2SE
- mniejsze zuzycie pamieci niz w J2SE
- ten sam poziom bezpieczenstwa co w J2SE
- Klasy moga nadal byc uruchamiane w J2SE
15MIDP Charakterystyka MID
- Wyswietlacz (wymagania minimalne)
- Rozmiar 96x54 pikseli
- Glebia koloru 1-bit
- Ksztalt piksela (Aspect ratio) okolo 11
- Wejscie
- One-handed keyboard(ITU-T phone keypad)
- Two-handed keyboard (QWERTY keyboard)
- Ekran dotykowy
16MIDP - Zakres
- Interfejs uzytkownika
- Structured (Screen)
- wysokopoziomowy dostep
- wieksza przenoszalnosc
- Unstructured (Canvas)
- niskopoziomowy dostep
- mniejsza przenoszalnosc
- Generic ConnectionFramework
- protokól http
17MIDP Zakres c.d.
- Dostep do pamieci stalej urzadzenia
- Record Store
- Dane zapisywane w postaci rekordów
- Mozliwosc prostego filtrowania rekordów
- Cykl zycia aplikacji
- MIDlet
- System properties
- microedition.locale
18OTA Provisioning
- MIDlet Suite - dystrybucja aplikacji J2ME
- .jad JAva Descriptor
- .jar JAva aRchive
19OTA Provisioning c.d.
20OTA Provisioning c.d.
21OTA Provisioning c.d.
- HTTP 401 (unauthorized) lub 407 (proxy
authentication required) - Implementacja przynajmniejBasic Authentication
Scheme - cookie jako identyfikator sesji
- MIME
- text/vnd.sun.j2me.app-descriptor jad
- Kodowanie przynajmniej UTF-8
22OTA Provisioning c.d.
- Identyfikacja urzadzenia
- User-Agent
- Accept-Language
- Accept
23OTA Provisioning c.d.
- Plik JAD wymagane atrybuty
Atrybut Opis
MIDlet-Name Nazwa MIDlet Suite
MIDlet-Version Numer wersji MIDlet Suite
MIDlet-Vendor Organizacja
MIDlet-ltngt Nazwa, ikona, klasa ltngt MIDletu
MIDlet-Jar-URL URL, z którego mozna pobrac plik jar
MIDlet-Jar-Size Liczba bajtów pliku jar
MicroEdition-Configuration Wymagany profil J2ME
MicroEdition-Profile Wymagana konfiguracja J2ME
24OTA Provisioning c.d.
- Plik JAD opcjonalne atrybuty
Atrybut Opis
MIDlet-Data-Size Minimalna liczba bajtów pamieci
MIDlet-Delete-Confirm Tresc 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
25OTA Provisioning c.d.
- Fragment przykladowego 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
26API - MIDlet
- Pakiet javax.microedition.midlet
27API interfejs uzytkownikaCommand
28API interfejs uzytkownikaCommand c.d.
29API interfejs uzytkownika
- Pakiet javax.microedition.lcdui
30API Hello World
31API 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!
32API 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)
- throws MIDletStateChangeException
- notifyDestroyed()
-
-
33API HelloWorldForm.java
- import javax.microedition.lcdui.
- public class HelloWorldForm extends Form
- public static final String EXIT "Wyjscie"
- public HelloWorldForm(String text)
- super("Hello World")
- append((text null) ? "" text)
- addCommand(new Command(EXIT,
Command.EXIT, 1)) -
-
-
34API 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.EXI
T)) - try
- owner.destroyApp(false)
- catch (MIDletStateChangeException
ex) -
-
-
-
35API Generic Connection Framework
- Pakiet javax.microedition.io
36API Generic Connection Framework Przyklady
- Connection conn Connector.open(schemetarget
parms) - Pliki
- (StreamConnection) Connector.open(file//bp.txt)
- HTTP
- (HttpConnection) Connector.open(http//localhost
8080/) - Sockets
- (DatagramConnection) Connector.open(socket//129.
14.11.29000)
37API Record Store
- pakiet javax.microedition.rms
38API RecordStore Przyklad
- public class FilterComparator
- implements RecordFilter, RecordComparator
- public boolean matches(byte candidate)
- return (candidate0 A ?
- false true
-
- public int compare(byte arg1, byte arg2)
- if (arg10 gt arg20) return 1
- if (arg10 arg20) return 0
- if (arg10 lt arg20) return 1
-
39API RecordStore Przyklad
- public void openRecordStore(String name)
- try
- recordStore
- RecordStore.openRecordStore(name,
- true)
- catch (RecordStoreException ex)
40API RecordStore Przyklad
- 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()
- try
- recordStore.addRecord(b, 0, b.length)
- catch (RecordStoreException ex)
41API RecordStore Przyklad
- 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
) - ...
42API RecordStore Przyklad
- try
- int age inputStream.readInt()
- String name inputStream.readUTF()
- catch (EOFException ex)
- ....
43Implementacja
- Problemy
- Rozmiar pamieci
- Szybkosc dzialania
- Rozmiar kodu
- Rozmiar ekranu
- Klawiatura
- Bledy w implementacji KVM
- Garbage Collector
44Literatura
- Mobile Information Device Profile (MIDP) 1.0
Final http//jcp.org/aboutJava/communityprocess/fi
nal/jsr037/index.html - MIDP APIs for Wireless Applicationshttp//java.su
n.com/products/midp/midp-wirelessapps-wp.pdf - Applications for MIDshttp//java.sun.com/products
/midp/midpwp.pdf - MIDP 1.0 Style Guidehttp//java.sun.com/j2me/docs
/zip/style-guide-html.zip - Forum Nokiahttp//www.forum.nokia.com/
- Motocoderhttp//developers.motorola.com/developer
s/default.asp
45Koniec
- Dziekuje za uwage i oczekuje pytan ?