Java ME
Java ME
Java ME
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Java</strong> <strong>ME</strong><br />
<strong>Java</strong> Micro edition
Pregled<br />
<br />
<br />
<br />
<br />
<br />
<br />
Zgodovina<br />
Osnove Jave <strong>ME</strong> (J2<strong>ME</strong>)<br />
<strong>Java</strong> <strong>ME</strong>:CDC/CLDC<br />
Midlet-i<br />
Razvojna orodja<br />
Primer aplikacije
Zgodovina<br />
<br />
1990: Začetek jave kot interni projekt v podjetju Sun<br />
Microsystems<br />
<br />
1995: Izide JDK 1.0<br />
<br />
1999: <strong>Java</strong> se razdeli v tri sklope:<br />
<br />
<br />
<br />
<br />
<strong>Java</strong> SE (J2SE) – Standard edition<br />
<strong>Java</strong> EE (J2EE) – Enterprise edition<br />
<strong>Java</strong> <strong>ME</strong> (J2<strong>ME</strong>)-Microedition (Personal java,<br />
Mobile java)<br />
2000/01:Prvi telefoni s podporo za J2<strong>ME</strong>
Zgodovina<br />
<br />
<br />
<br />
<br />
2004: 250 milijonov telefonov s podporo J2<strong>ME</strong><br />
2005: 700 milijonov telefonov s podporo J2<strong>ME</strong><br />
<br />
Sprememba imena v <strong>Java</strong> <strong>ME</strong><br />
2006: <strong>Java</strong> <strong>ME</strong> spremeni licenco v GPL<br />
Danes: Vsi proizvajalci telefonov podpirajo javo
<strong>Java</strong>
<strong>Java</strong> <strong>ME</strong> (J2<strong>ME</strong>)
Spremembe <strong>Java</strong> jezik-a<br />
<br />
Spremembe <strong>Java</strong> jezika so se zgodile na treh<br />
področjih<br />
<br />
Ni podpore za plavajočo vejico (CLDC 1.0), CLDC 1.1<br />
<br />
<br />
jo ima vendar ni zahtevan v MIDP 2.0<br />
Ne pozna finalizacije oz. ni metode finalize()<br />
Podpora izjemam je omejena
Spremembe JVM<br />
<br />
<br />
<br />
Zaradi varnosti ne podpira JNI (<strong>Java</strong> native<br />
interface)<br />
Zaradi varnosti ni uporabniško določenih<br />
nalagalnikov razredov (Custom class loaders)<br />
Ni skupin niti (thread groups) ter demonskih niti<br />
(deamon threads)
<strong>Java</strong> <strong>ME</strong><br />
<br />
<br />
<br />
<br />
<br />
<strong>Java</strong> Micro Edition<br />
<strong>Java</strong> za “male” naprave<br />
Da bi zadostili različnim tipom naprav se uvedejo<br />
konfiguracije in profili<br />
Vse je definirano z JSR-ji<br />
http://jcp.org
<strong>Java</strong> <strong>ME</strong> konfiguracije<br />
<br />
<br />
Konfiguracije se ločijo glede na lastnosti JVM,<br />
uporabljene knjižnice iz J2SE ter uporabljene<br />
lastnosti <strong>Java</strong> programskega jezika<br />
Trenutno poznamo dve konfiguraciji<br />
<br />
<br />
CLDC - Connected limited device configuration<br />
CDC – Connected device configuration
<strong>Java</strong> <strong>ME</strong> konfiguracije
CDC<br />
<br />
<br />
<br />
<br />
TV set-top box, Internet TV, zabavni in navigacijski<br />
sistemi v avtomobilih, hišna avtomatizacija<br />
Programski model bližje Javi SE, kar omogoči lažji<br />
prenos obstoječih aplikacij.<br />
Trajne in širokopasovne omrežne povezave<br />
Velik pomnilnik ter močnejši procesorji (glede na<br />
CLDC)
CLDC<br />
<br />
<br />
<br />
<br />
<br />
Za manj zmogljive naprave, ki imajo majhno<br />
procesorsko moč, majhne pomnilniške<br />
kapacitete, mali ekran ter omejene možnosti<br />
povezovanja v mrežo<br />
Telefoni, manj zmogljivi PDA-ji, osebni<br />
organizatorji<br />
Uporabljajo enostavne uporabniške vmesnike<br />
(v primerjavi z osebnimi računalniki)<br />
JVM : KVM (“Kilobyte Virtual Machine”)<br />
Trenutno na voljo CLDC 1.0 in1.1
CDC vs. CLDC<br />
<br />
<br />
CDC je subset Jave SE z nekaj dodatnimi razredi.<br />
CLDC je subset CDC-ja<br />
<strong>Java</strong> SE<br />
CDC<br />
CLDC
MIDP 2.0 (JSR 118 )<br />
<br />
Definira API vmesnik za :<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Uporabniški vmesnik<br />
Življenski cikel aplikacije<br />
Omrežno povezljivost<br />
Multimedijo<br />
Shrambo podatkov (RMS)<br />
OTA – over the air nalaganje aplikacij<br />
Minimalne sistemske zahteve<br />
<br />
<br />
<br />
<br />
<br />
128 KB RAM,8 KB trajnega spomina<br />
128 KB za KVM<br />
Zaslon: 94x54 pik<br />
Tipkovnica ali zaslon na dotik<br />
Omrežna povezljivost (dvosmerno, brezžično, občasne<br />
povezave, omejena pasovna širina)
MIDP 2.0 (JSR 118 )<br />
<br />
API ki ga definira CLDC 1.1 + MIDP 2.0<br />
API je omejen v<br />
primerjavi z JAVA SE
CLDC/MIDP<br />
<br />
CLDC obravnava<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Jezik <strong>Java</strong><br />
<strong>Java</strong>nski virtualni stroj<br />
Osnovne knjižnice<br />
Vhod/Izhod<br />
Omrežno povezovanje<br />
Varnost<br />
Internacionalizacijo<br />
<br />
<br />
CLDC ne obravnava<br />
<br />
Življenskega cikla aplikacije<br />
<br />
Funkcionalnosti uporabniških<br />
vmesnikov<br />
<br />
Rokovanja z dogodki<br />
<br />
Visokonivojskega modela<br />
aplikacij<br />
Te stvari obravnava MIDP
MIDlet<br />
<br />
<br />
<br />
<br />
MIDP aplikacija se imenuje MIDlet in je izpeljana<br />
iz javax.microedition.midlet<br />
Konceptualno so MIDlet-i enaki Applet-om<br />
MIDlet-i se lahko izvajajo na vseh napravah, ki<br />
imajo podprt MIDP profil (compile once, run<br />
anywhere)<br />
Implementirane mora imeti tri abstraktne metode:<br />
<br />
<br />
<br />
startApp()-sprožimo izvajanje midlet-a<br />
pauseApp()-uporablja jo sistem za začasno prekinitev<br />
destroyApp()-pokliče jo sistem pred ukinitvijo midleta
MIDlet življenski cikel<br />
<br />
<br />
MIDlet-i so vedno v enem od treh stanj.<br />
Za prehajanje stanj skrbi AMS (Application manager)<br />
MIDlet()<br />
startApp()<br />
Paused<br />
Active<br />
pauseApp()<br />
destroyApp()<br />
destroyApp()<br />
Destroyed
Midlet struktura<br />
public class Midlet extends MIDlet {<br />
public void startApp() {<br />
}<br />
public void pauseApp() {<br />
}<br />
public void destroyApp(boolean unconditional) {<br />
}<br />
}
Potek kreiranja aplikacije
Garniture MIDlet (Midlet suite)<br />
<br />
<br />
<br />
Kolekcija MIDletov ter manifesta, ki so združeni v<br />
JAR paketu se imenuje Midlet garnitura<br />
Midleti v garnituri si delijo isti trajni pomnilnik<br />
(RMS), sklad, static spremenljivke.<br />
JAR paket MIDlet garniture vsebuje:<br />
<br />
<br />
<br />
Razrede (class), ki implementirajo MIDlet-e<br />
Vse datoteke, ki jih MIDlet uporablja: slike, ikone...<br />
Manifest, ki opisuje vsebino datoteke JAR
Garniture MIDlet (Midlet suite)<br />
<br />
<br />
MIDP uvaja še dodatno opcijsko JAD datoteko<br />
(Application description), ki omogoča, da naprava<br />
pred namestitvijo ugotovi, če naprava ustreza vsem<br />
zahtevam aplikacije<br />
Imeti mora vsaj naslednje lastnosti:<br />
<br />
<br />
<br />
<br />
<br />
MIDlet-Name<br />
MIDlet-Version<br />
MIDlet-Vendor<br />
MIDlet-Jar-URL<br />
MIDlet-Jar-Size
Primer JAD datoteke<br />
MIDlet-Name: HelloMIDlet<br />
MIDlet-Version: 1.0.0<br />
MIDlet-Vendor: Sun Microsystems, Inc.<br />
MIDlet-Description: A Simple Example<br />
MIDlet-Info-URL: http://java.sun.com/j2me/<br />
MIDlet-Jar-URL: Hello.jar<br />
MIDlet-Jar-Size: 1063 MicroEdition-Profile:<br />
MIDP-1.0 MicroEdition-Configuration: CLDC-1.0<br />
MIDlet-1: Hello,, HelloMIDlet<br />
(Name, Icon, Class)
Nameščanje<br />
•<br />
Garniture MIDlet (MIDlet suites) lahko posredujemo napravicam na<br />
enega od naslednjih načinov:<br />
•<br />
Kopiranje direktno v pomnilnik (BT, USB, ..)<br />
•<br />
Preko brskalnika, ki razume MI<strong>ME</strong> tipa JAD<br />
•<br />
Preko SMS sporočila
GUI<br />
<br />
<br />
<br />
<br />
MIDP ima definirano svojo UI arhitekturo<br />
javax.microedition.lcdui<br />
Visokonivojski prenosljiv API<br />
<br />
<br />
Abstrakten in prenosljiv<br />
Delal naj bi na vseh napravah<br />
Nizkonivojski API<br />
<br />
<br />
Popolna kontrola nad zaslonom<br />
Nastanejo lahko problemi pri prenosljivosti aplikacij
Visokonivojski API<br />
<br />
Izhajamo iz razreda Form<br />
public class MyForm extends Form {<br />
private TextField name;<br />
private TextField password;<br />
public MyForm(String title) {<br />
super(title);<br />
name = new TextField("Name:", "", 20, TextField.ANY);<br />
password = new TextField("Password:","",20,TextField.PASSWORD);<br />
append(name);<br />
append(password);<br />
}<br />
}<br />
}
Nizkonivojski API<br />
<br />
Izhajamo iz razreda Canvas in povozimo metodo<br />
paint()<br />
public class MyCanvas extends Canvas {<br />
public MyCanvas() {<br />
setFullScreenMode(true);<br />
}<br />
public void paint(Graphics g) {<br />
g.setColor(255, 0, 0);<br />
int width = this.getWidth();<br />
int height = this.getHeight();<br />
g.fillRect(0, 0, width, height);<br />
g.setColor(255, 255, 255);<br />
Font f = Font.getFont(Font.FACE_SYSTEM,<br />
Font.STYLE_BOLD, Font.SIZE_LARGE);<br />
g.setFont(f);<br />
g.drawRect(10, 10, width - 25, height - 25);<br />
g.drawString("Napaka!!", width/2, height/2,<br />
g.BASELINE|g.HCENTER);<br />
}<br />
}
Mrežne povezave<br />
<br />
<br />
<br />
<br />
Za mrežne povezave skrbi GCF<br />
Definiran v javax.microedition.io<br />
Pokriva veliko množico povezav<br />
<br />
<br />
<br />
<br />
<br />
Http,https<br />
Socket,SSL,TLS<br />
Comm (serijska povezava)<br />
Datagram (UDP)<br />
Bluetooth<br />
URL definira tip povezave
Mrežne povezave<br />
String url = "socket://www.j2medeveloper.com:80";<br />
SocketConnection c = (SocketConnection)Connector.open(url);<br />
String url = "http://www.j2medeveloper:80/com/myServlet";<br />
HttpConnection c = (HttpConnection)Connector.open(url);<br />
String url = "file:///myResourceFile.res";<br />
FileConnection c = (FileConnection)Connector.open(url);<br />
String url = "datagram://www.j2medeveloper.com:7001";<br />
UDPDatagramConnection c = (UDPDatagramConnection)Connector.open(url);
Trajni spomin<br />
<br />
<br />
<br />
<br />
<br />
<br />
Record Management System (RMS) min. 8Kb<br />
Definiran v javax.microedition.rms<br />
API neodvisen od naprave<br />
Posamezni vnosi (Record) so polja bytov in imajo<br />
unikaten ID (ni index)<br />
Vnosi se shranjujejo v “record store”, ki imajo<br />
unikatna imena<br />
“record store” zagotavlja da bodo vsi zapisi<br />
atomarni
Trajni spomin<br />
public boolean storeUsername(String username) {<br />
RecordStore rs;<br />
try {<br />
rs = RecordStore.openRecordStore(“loginInfo”, false);<br />
byte[] user = username.getBytes();<br />
rs.addRecord(user,0,user.length);<br />
return true;<br />
} catch (Exception e) {<br />
return false;<br />
} finally {<br />
if (rs != null)<br />
rs.closeRecordStore();<br />
}<br />
}
Game API<br />
<br />
<br />
Optimiziran za igre<br />
Definiran v javax.microedition.lcdui.game
Preostali API<br />
<br />
Wireless messaging API (JSR-120)<br />
<br />
Mobile media API (JSR-135)<br />
<br />
Bluetooth API (JSR-82)<br />
<br />
Mobile 3D Graphics API (JSR-184)<br />
<br />
Location API (JSR-179)<br />
<br />
Web services API (JSR-172)<br />
<br />
.....
Razvojna orodja<br />
<br />
<strong>Java</strong> <strong>ME</strong> SDK 3.0<br />
<br />
NetBeans (6.7.1)<br />
<br />
Eclipse<strong>ME</strong><br />
<br />
SDK-ji proizvajalcev telefonov (emulatorji)
Vaje<br />
<br />
Uporabljalo se bo NetBeans 6.7.1<br />
<br />
Nokia Emulator S60
“BIG Picture”<br />
MIDP java<br />
aplikacije<br />
MIDP<br />
<strong>Java</strong> aplikacije<br />
Specifičen API<br />
za<br />
posamezne naprave<br />
Aplikacije prilagojene<br />
operacijskemu sistemu<br />
(C, C++,...)<br />
CLDC<br />
Operacijski sistem (Symbian, Android, Windows mobile, ...)