tehnici avansate de programare - profs.info.uaic.roacf/java/slides/ro/javame_slide.pdf · segment...
Post on 29-Jul-2018
261 Views
Preview:
TRANSCRIPT
Tehnici avansate de programareCurs -
Cristian Frasinaru
acf@infoiasi.ro
Facultatea de Informatica
Universitatea ”Al. I. Cuza” Iasi
Platforma Java Micro Edition
Tehnici avansate de programare – p.1/81
Tehnici avansate de programare – p.2/81
Cuprins
Introducere
Arhitectura generala Java ME
Crearea unui MIDlet simplu
Dezvoltarea suitelor de midlet-uri
Interfata grafica cu utilizatorul
Tratarea evenimentelor
Crearea jocurilor (Game API)
Asigurarea persistentei datelor (RMS)
Distributia unei suite de midlet-uri
Tehnici avansate de programare – p.3/81
Introducere
Tehnici avansate de programare – p.4/81
Comunicatii Wireless
Domeniu extrem de vast
Comunicatiile pot fi de naturi diferite:Radio-TeleviziuneTelefonie mobile...
Comunicatiile pot fi:localela distanta
Exista o serie protocoale standard
Complexitate, fragmentare
Tehnici avansate de programare – p.5/81
Ce este Java ME ?
Java ME reprezinta un set de tehnologii si specificatiiconcepute pentru dispozitive mobile cu capabilitatilimitate, cum ar fi pagere, telefoane mobile, sisteme denavigare, PDA-uri, etc.
Java ME aduce conceptul de portabilitate la niveluldispozitivelor mobile, oferind un mediu optimizat, bazatpe Java, de dezvoltare a aplicatiilor pentru acestsegment software.
Tehnici avansate de programare – p.6/81
JSR + JCP
Specificatiile pentru Java ME (dar si pentru EE, SE) suntcreate sub egida Java Comunity Process (JCP) , primulpas în în dezvoltarea acestora fiind o cerere de tip JavaSpecification Request (JSR) , venita din parteacomunitatii Java. Ulterior, acestea sunt analizate de ungrup de experti si rafinate pâna la forma lor finala.
Specificatiile Java ME sunt referite adeseori sub formanumarului corespunzator JSR, expertii care contribuie lastandardizarea lor fiind firme ca Sun, Nokia, Motorolla,Ericsson, Fujitsu, Siemens, Samsung, Vodafone, FranceTelecom, Orange, etc.
Tehnici avansate de programare – p.7/81
Arhitectura generala Java ME
Tehnici avansate de programare – p.8/81
Platforme java
Tehnici avansate de programare – p.9/81
Configuratii si profile
Java ME are o arhitectura modular a si ierarhic a:
ConfiguratiiSpecificatii ce detalizaa o masina virtuala Java si unAPI restrâns ce sta la baza dezvoltarii de aplicatiipentru o anumita categorie de dispozitive.
ProfileProfilele sunt atasate configuratiilor, adaugând API-ulspecific necesar crearii efective a unei aplicatii.
Pachete optionale
Tehnici avansate de programare – p.10/81
Privire generala
Tehnici avansate de programare – p.11/81
Dezvoltarea de aplicatii wireless
Tehnici avansate de programare – p.12/81
Categorii de aplicatii
Aplicatii locale (independente) - nu necesita surseexterne de date sau comunicatii prin retea (jocuri,programe utilitare: agenda, calculator, etc)
Aplicatii de retea - contin atât componente localecât si la distanta, aflate pe servere Web (client deemail).
Tehnici avansate de programare – p.13/81
Consideratii generale
Crearea unei aplicatii performante Java ME este o "arta"ce trebuie sa tina cont de:
Memoria (volatila sau persistenta) este limitatadrastic
Procesoare lente
Lipsa unui sistem de fisiere clasic
Limitari, eventual severe, ale conectivitatii
Modalitatea de instalare a aplicatiei
...
Tehnici avansate de programare – p.14/81
Diferente fata de Java SE
Nu sunt permise operatii în virgula mobila
Nu mai exista finalizarea obiectelor
Diferente în modul de tratare a exceptiilor
Nu exista suport pentru JNI, introspectie, serializare
Nu exista grupuri de fire de executie, demoni.
Nu pot fi definite class loader-e proprii
Verificarea claselor este realizata diferit (dupacompilare are loc etapa de preverificare)
Tehnici avansate de programare – p.15/81
MIDlet-uri
Aplicatii create pentru:
Configuratia CLDC (Connected Limited DeviceConfiguration)
Profilul MIDP (Mobile Information Device Profile)
Midlet-urile sint distribuite sub forma unor suite .
fie ofera o serie de functii similare (cum ar fi ocolectie de jocuri), sau
fie lucreaza împreuna, fiind module ale unui sistemmai complex
au acces la aceleasi resurse (imagini, date, etc.)
pot comunica prin setarea/obtinerea unor informatiidintr-o zona comuna de memorie
Tehnici avansate de programare – p.16/81
MIDlet API
Pachete CLDCjava.lang ⊂ J2SE
java.io ⊂ J2SE
java.util ⊂ J2SE
javax.microedition.io
Pachete MIDPjavax.microedition.midlet
javax.microedition.lcdui
javax.microedition.rms
...
Tehnici avansate de programare – p.17/81
Crearea unui midlet simplu
import javax.microedition.lcdui. * ;import javax.microedition.midlet.MIDlet;
public class Hello extends MIDlet implements CommandListe ner {public void startApp() {
Display display = Display.getDisplay(this);Form mainForm = new Form("Hello");mainForm.append("Hello world!");Command exitCommand = new Command("Exit", Command.EXIT, 0 );mainForm.addCommand(exitCommand);mainForm.setCommandListener(this);display.setCurrent(mainForm);
}public void pauseApp () {}public void destroyApp(boolean unconditional) {}public void commandAction(Command c, Displayable s) {
if (c.getCommandType() == Command.EXIT)notifyDestroyed();
}}
Tehnici avansate de programare – p.18/81
Compilarea si executia
Compilarea presupune:Apelul compilatorului javac din kitul standardJava.Preverificarea claselor rezultate cu utilitarulpreverify
ExecutiaVa fi realizata folosind un emulator . Acesta va afisalista midleturilor disponibile in suita selectata.
Tehnici avansate de programare – p.19/81
Dezvoltarea suitelor de midlet-uri
Tehnici avansate de programare – p.20/81
Modul de lucru
Un midlet este format din unul sau mai multe ecrane(screens) . Acestea pot fi
structurate - au o anumita functionalitate, suntportabile, nu permit accesul direct la acran sau lamecanisme low-level.nestructurate (canvas-uri) - permit controlulecranului la nivel de pixel, tratarea evenimentelorgenerate de apasarea tastelor, etc.
Fiecare ecran are asociata o serie de comenzi(abstract commands) . Acestea permit utilizatoruluinavigarea între ecrane si executia unor actiunispecifice.
Tehnici avansate de programare – p.21/81
Ciclul de viata
Tehnici avansate de programare – p.22/81
Structura unui midlet
public class MyMIDlet extends MIDlet {public MyMIDlet() {
// Crearea de ecrane// Crearea si asocierea de actiuni ecranelor// Stabilirea claselor de tip listener pentru actiuni
}public void startApp() {
// Setarea eranului initial/curent// Pornirea unor fire de executie
}public void pauseApp () {
// Eliberarea temporara a unor resurse// Oprirea unr fire de executie
}public void destroyApp(boolean unconditional) {
// Eliberarea tuturor resurselor// Salvarea starii persistente a aplicatiei
}}
Tehnici avansate de programare – p.23/81
Interfata grafic a
Interfata grafica cu utilizatorul a fost implementata tinândcont de particularitatile fizice ale dispozitivelor mobile.Specificatiile CLDC nu au nici o referire la GUI, ele fiinddefinite în MIDP.Pachetele care ofera suport pentru crearea GUI:
javax.microedition.lcdui
javax.microedition.lcdui.game
Gestiunea ecranului propriu-zis si a celorlaltemecanisme fizice accesibile ale dispozitivului se faceprin intermediul clasei Display , aceasta fiindresponsabila si de gestiunea screen-urilor aplicatiei.
Tehnici avansate de programare – p.24/81
ClasaDisplayable
Este supeclasa abstracta a ecranelor, definindfunctionalitatea comuna a acestora:
pot avea un titlu
pot avea un ticker (un text ce se deplaseaza în modcontinuu pe ecran)
pot avea zero sau mai multe comenzi
pot avea un CommandListener
Implementarile de baza ale acestei clase sunt:
Screen - ecrane structurate
Canvas - ecrane nestructurate
Tehnici avansate de programare – p.25/81
ClasaScreen
Este superclasa abstracta a ecranelor structurate,implementarile directe fiind:
Alert - Mesaje de avertizare, erori, etc.
Form - Permite crearea de ecrane compuse din altecomponente, cum ar fi imagini (Image ) sau articolederivate din Item :ChoiceGroup, CustomItem, DateField, Gauge,ImageItem, Spacer, StringItem, TextField
List - Ecran pentru selectarea unei optiuni dintr-omultime prestabilita.
TextBox - Ecran pentru introducerea unui text.
Tehnici avansate de programare – p.26/81
Crearea form-urilor
Articolele unui ecran Form sunt referite prin indexul lor(un numar între 0 si size() - 1 ), gestiunea lor fiindrealizata prin intermediul metodelor: append, insert,set, delete .Pozitionarea articolelor se face pe linii, dupa un algoritmprestabilit. In cazul in care articolele nu incap in ecran,va fi creata automat o bara verticala de derulare.
mainForm.append("Introduceti datele:");mainForm.append(new TextField("Nume", "", 50, TextField .ANY));mainForm.append(new DateField("Data", DateField.DATE) );
Tratarea evenimentelor generate de modificarecontinutului unui articol se face prin implementareainterfetei ItemStateListener .
Tehnici avansate de programare – p.27/81
Interfata ItemStateListener
Metoda interfetei este: itemStateChanged(Item item) .
Form mainForm = new Form("Hello");StringItem s = new StringItem(null, "Hello world");TextField tf = new TextField("Nume", "", 50, TextField.ANY );
...
mainForm.append(s);mainForm.append(tf);
mainForm.setItemStateListener(new ItemStateListener( ) {public void itemStateChanged(Item item) {
s.setText("Hello " + tf.getString());}
});
Tehnici avansate de programare – p.28/81
ClasaCanvas
Este clasa de baza pentru aplicatii care necesitadesenare la nivel de pixel si tratarea unor evenimentelow-level (→ jocuri !!)
Desenarea se face în metoda paint
Tratarea evenimentelor se face în metode specificecum ar fi: keyPressed, keyRepeated,keyReleased, etc.
Derivata din Canvas , este GameCanvas care oferafacilitati suplimentare pentru dezvoltarea de jocuri.
Tehnici avansate de programare – p.29/81
Definirea comenzilor
Comenzi abstracte - high-level: Command
Etichet a: nume scurt / lung
Tip : BACK, CANCEL, EXIT, HELP, ITEM, OK, SCREEN, STOP
Prioritate : numar întreg; cel mai mic numar - ceamai importanta comanda.
Dispunerea comenzilor pe ecran va tine cont de tipurilesi prioritatile acestora.Adaugare de comenzi pentru un ecran: addCommand .Tratarea evenimentelor generate de actionareacomenzilor: CommandListener .
Tehnici avansate de programare – p.30/81
Interfata CommandListener
Metoda interfetei este:commandAction(Command c, Displayable s) .
public class MyListener implements CommandListener {
public void commandAction(Command c, Displayable s) {if (c.getCommandType() == Command.EXIT)
notifyDestroyed();
if (c.getLabel().equals("Play"))letsPlayTheGame();
...}
Tehnici avansate de programare – p.31/81
Imagini
Imaginile sunt utilizate prin intermediul clasei Image .Formatul admis este PNG (Portable Network Graphics)
Crearea se realizeaza prin metoda: Image.createImage ,continutul imaginii putând fi:
preluat din resursele midletului (imutable)
creat explicit din program (mutable)
Tehnici avansate de programare – p.32/81
Folosirea imaginilor
componente în cadrul form-urilorForm mainForm = new Form("Hello");Image img = Image.createImage("/Taz.png");mainForm.append(img) ; // sauImageItem item = new ImageItem("Poza", img, Item.LAYOUT_C ENTER, "Taz"))mainForm.append(item) ;
desenare în canvas-uripublic void paint(Graphics g) {
Image img = Image.createImage("/Taz.png");g.drawImage(0, 0, HCENTER | VCENTER); }
double-bufferingImage img = Image.createImage(width, height);Graphics gmem = img.getGraphics();gmem.drawLine(0, 0, 10, 10);
Tehnici avansate de programare – p.33/81
Crearea jocurilor de "actiune"
Tehnici avansate de programare – p.34/81
Varianta veche
public void MyGameCanvas extends Canvasimplements Runnable {
public void run() {while (true) {
// Actualizeaza starea joculuirepaint();// Pauza
}}public void paint(Graphics g) {
// Desenare}protected void keyPressed(int keyCode) {
// Tratare apasare taste}
}
Tehnici avansate de programare – p.35/81
Varianta noua
public void MyGameCanvas extends GameCanvasimplements Runnable {
public void run() {Graphics g = getGraphics();while (true) {
// Actualizeaza starea jocului
int keyState = getKeyStates();// Tratare apasare taste
// Desenare
flushGraphics();
// Pauza}
}}
Tehnici avansate de programare – p.36/81
"Planurile" unui joc
Reprezentarea unui joc de "actiune" la un moment datconsta în suprapunerea unor desene, fiecare aflat într-unanumit plan (layer), unele dintre ele fiind statice iar altelemobile. Stratificarea aplicatiei în acest fel permitemanevrarea mai usoara si independenta a planurilor.Suportul pentru crearea planurilor este oferit de clasele:
LayerTiledLayerSprite
LayerManager
Tehnici avansate de programare – p.37/81
Definirea componentelortile
Tehnici avansate de programare – p.38/81
Crearea fundalului
Tehnici avansate de programare – p.39/81
Definirea "spiridusilor"
Tehnici avansate de programare – p.40/81
Definirea animatiei
Tehnici avansate de programare – p.41/81
Crearea jocului propriu-zis
Tehnici avansate de programare – p.42/81
Asigurarea persistentei datelor
Tehnici avansate de programare – p.43/81
Record Management System
Prin clasele sale, RMS ofera suportul pentru asigurareapersistentei unor informatii între doua executii succesiveale unui midlet.
Memorarea datelor este realizata într-o tabel a depersistent a, formata din articole . Fiecare articol estecompus din:
ID - valoare asignata automat ce identifica în modunic articolele din tabela de persistenta.
continut - un tablou de octeti, lungimea acestuiaputând varia de la un articol la altul.
Tehnici avansate de programare – p.44/81
Tabele de persistenta
javax.microedition.rms.RecordStoreUn midlet poate crea oricate tabele de persistenta,fiecare fiind identificata prin numele sau care trebuie safie unic în cadrul suitei.Fiecare midlet dintr-o suita poate avea acces la tabelelecelorlalte. Aceeassi tabela poate fi utilizata concurent demai multe midleturi, implementarea clasei RecordSetasigurând sincronizarea accesului.Detectarea modificarilor:
Obtinerea numarului de versiune
Setarea unui RecordListener .
Tehnici avansate de programare – p.45/81
Gestiunea tabelelor
Operatiile ce pot fi efectuate: creare / stergere,deschidere / închidere, etc.import javax.microedition.rms. * ;
RecordStore rs = null;try {
boolean createIfNecessary = true;rs = RecordStore.openRecordStore("mydata", createIfNec essary);...rs.closeRecordStore();
}catch( RecordStoreNotFoundException e ){
// tabela nu existacatch( RecordStoreNotOpenException e ){
// tabela nu este deschisa} catch( RecordStoreException e ){
// alta eroare (spatiu insuficient, etc.)}
Tehnici avansate de programare – p.46/81
Gestiunea articolelor
ID (autoincrement) Continut (buffer de octetti)
byte[] data = {0, 1};try {
int id = rs.addRecord( data, 0, data.length );...int numBytes = rs.getRecord(id, data, 0 );rs.deleteRecord(id);
}catch( RecordStoreFullException e ){
// spatiu insuficient} catch( InvalidRecordIDException e ){
// id-ul specificat nu exista} catch( RecordStoreException e ){
// general error}
Tehnici avansate de programare – p.47/81
Scrierea/Citirea tipurilor primitive
ScriereaByteArrayOutputStream baos = new ByteArrayOutputStream( );DataOutputStream out = new DataOutputStream(baos);out.writeUTF("Hello");out.writeInt(123);byte data[] = baos.toByteArray();rs.addRecord( data, 0, data.length );
Citireabyte data[];rs.getRecord(id, data, 0);ByteArrayInputStream bais = new ByteArrayInputStream(da ta);DataInputStream in = new DataInStream(bais);String s = in.readUTF();int n = in.readInt(123);
Tehnici avansate de programare – p.48/81
Enumerarea articolelor
Enumerarea articolelor unei tabele de persistenta:public RecordEnumeration enumerateRecords(
RecordFilter filter,RecordComparator comparator,boolean keepUpdated)
RecordEnumeration - interfata ce descrie unenumerator bidirectional pentru parcurgereaenumerarii.
RecordFilter - interfata pentru filtrarea enumerariiconform unor criterii proprii.
RecordComparator - interfata pentru compararea /sortarea articolelor din enumerare.
Tehnici avansate de programare – p.49/81
Programare de retea folosindMIDP
Tehnici avansate de programare – p.50/81
Generic Connection Framework
GCF defineste fundamentele pentru dezvoltareaaplicatiilor de retea pentru dispozitive mobile, oferindsuport pentru toate tipurile de comunicare fie pe baza depachete, fie pe baza de fluxuri.
Initial, modelul GFC a fost definit în configuratia CLDC(Connected Limited Device Configuration), în pachetuljavax.microedition.io .
Tehnici avansate de programare – p.51/81
Ierarhia claselor si interfetelor
Tehnici avansate de programare – p.52/81
Formatul geneal al unui URL
protocol:adresa;parameteri
protocol - metoda de acces: ftp, http, etc
adresa - numele complet sau IP-ul resursei, portul,utilizator, parola, calea locala, etc.
parameteri - perechi de forma ;nume=valoare.
Exemplehttp://java.sun.com/developerdatagram://address:port#comm:0;baudrate=9600file:/myFile.txt...
Tehnici avansate de programare – p.53/81
Tipuri de conexiuni
btl2cap Bluetooth L2CAPConnection
datagram Datagram DatagramConnection
file File Access FileConnection, InputConnection
http HyperText Transport Protocol HttpConnection
https Secure HTTP HttpsConnection
comm Serial I/O CommConnection
sms Short Messaging Service MessageConnectionmms Multimedia Messaging Servicecbs Cell Broadcast SMS
apdu Security Element APDUConnection,jcrmi JavaCardRMIConnection
socket Socket SocketConnection,serversocket ServerSocketConnection
datagram UDP Datagram UDPDatagramConnection
Tehnici avansate de programare – p.54/81
Crearea unei conexiuni
Se realizeaza cu clasa Connector .Aceasta este o clasa de tip Factory, în sensul ca vainstantia un obiect functie de schema (protocolul)specificat în URL.
Metoda Connector.openString url = "socket://www.j2medeveloper.com:80";c = (SocketConnection)Connector.open(url);s = c.openInputStream();
Metode de crearea directa a unor fluxuri specificeString url = "socket://www.j2medeveloper.com:80";s = (InputStream)Connector.openInputStream(url);
Tehnici avansate de programare – p.55/81
Conexiuni suportate de MIDP
Tehnici avansate de programare – p.56/81
HttpConnection
HTTP este un protocol bazat pe paradigmacerere-raspuns, în care parametrii cererii trebuie trimisiînaintea cererii propriu-zise. Conexiunea poate exista înuna din starile:
Setup - In aceasta stare pot fi apelate doar metodelesetRequestMethod si setRequestProperty
Connected - Mtode cum ar fi openInputStream,openDataInputStream determina tranzitia dinstarea Setup în starea Connected
Closed
Tehnici avansate de programare – p.57/81
Citirea unui fisier
String url = "http://www.infoiasi.ro/˜acf/hello.txt"StreamConnection c = null;InputStream s = null;StringBuffer b = new StringBuffer();try {
c = (StreamConnection)Connector.open(url);s = c.openInputStream();int ch;while((ch = s.read()) != -1) {
b.append((char) ch);}System.out.println(b.toString());
} finally {if(s != null)
s.close();if(c != null)
c.close();}
Tehnici avansate de programare – p.58/81
Programare low-level
Incepând cu MIDP 2.0 a fost introdus suport pentruprogramare de retea low-level, folosind socket-uri sidatagrame. Interfetele adaugate înjavax.microedition.io sunt:
pentru protoculul socket : SocketConnection ,ServerSocketConnectionConnector.open("socket://host:port") -> SocketConnect ionConnector.open("socket://:port") -> ServerSocketConne ction
pentru protoculul datagram :UDPDatagramConnection
Connector.open("datagram://host:port") -> UDPDatagram Connection
Tehnici avansate de programare – p.59/81
Interfata ServerSocketConnection
...ServerSocketConnection server =
(ServerSocketConnection) Connector.open("socket://:2 500");SocketConnection client =
(SocketConnection) server.acceptAndOpen();
client.setSocketOption(DELAY, 0);client.setSocketOption(KEEPALIVE, 0);
DataInputStream dis = client.openDataInputStream();DataOutputStream dos = client.openDataOutputStream();
String result = is.readUTF();os.writeUTF(...);
is.close();os.close();client.close();server.close();...
Tehnici avansate de programare – p.60/81
Interfata SocketConnection
...SocketConnection client =
(SocketConnection) Connector.open("socket://" + hostna me + ":" + port);
client.setSocketOption(DELAY, 0);client.setSocketOption(KEEPALIVE, 0);
InputStream is = client.openInputStream();OutputStream os = client.openOutputStream();
os.write("some string".getBytes());int c = 0;while((c = is.read()) != -1) {
// do something with the response}
is.close();os.close();client.close();...
Tehnici avansate de programare – p.61/81
Wireless Messaging API (WMA)
Tehnici avansate de programare – p.62/81
Ce este WMA ?
WMA ofera suport pentru trimiterea / receptionarea demesaje text sau binare , cum ar fi SMS-uri (ShortMessage Service).
WMA este un pachet optional(javax.wireless.messaging ), bazat pe GenericConnection Framework (GCF) ce extinde profile createpe configuratia CLDC.
Tehnici avansate de programare – p.63/81
Componentele WMA
Tehnici avansate de programare – p.64/81
WMA API
Message getAddress(), getTimestamp(), setAddress()
BinaryMessage getPayloadData(), setPayloadData()
TextMessage getPayloadText(), setPayloadText()
MessageConnection newMessage(), receive(), send(),
setMessageListener(), numberOfSegments()
MessageListener notifyIncomingMessage()
Tehnici avansate de programare – p.65/81
Crearea unei conexiuni
Modul client - doar pentru a trimite mesaje(MessageConnection)Connector.open("sms://+512123456 7:5000");
Modul server - pentru a trimite / receptiona mesaje(MessageConnection)Connector.open("sms://:5000");
Tipuri de protocoale
sms
sms
cbs
Tehnici avansate de programare – p.66/81
Trimiterea unui mesaj text
public void sendTextMessage(MessageConnection mc,String msg,String url) {
try {TextMessage tmsg =
(TextMessage)mc.newMessage(MessageConnection.TEXT_M ESSAGE);tmsg.setAddress(url);tmsg.setPayloadText(msg);mc.send(tmsg);
}catch(Exception e) {
System.out.println("sendTextMessage " + e);}
}
Tehnici avansate de programare – p.67/81
Trimiterea unui mesaj binar
public void sendBinaryMessage(MessageConnection mc,byte[] msg,String url) {
try {BinaryMessage bmsg =
(BinaryMessage)mc.newMessage(MessageConnection.BINA RY_MESSAGE);bmsg.setAddress(url);bmsg.setPayloadData(msg);mc.send(bmsg);
}catch(Exception e) {
System.out.println("sendBinaryMessage " + e);}
}
Tehnici avansate de programare – p.68/81
Receptionarea mesajelor
Implementarea interfetei MessageListenerpublic class WMAMIDlet extends MIDlet implements MessageL istener {
...public void notifyIncomingMessage(MessageConnection co nn) {
// Procesare mesaj}
}
Inregistrarea ascultatoruluipublic void startApp() {
...MessageConnection mc = (MessageConnection)Connector.op en("sms://:mc.setMessageListener(this);...
}
Tehnici avansate de programare – p.69/81
Procesarea mesajelor
Este realizata uzual într-un fir de executie.public void run() {
...Message msg = mc.receive();
if (msg instanceof TextMessage) {TextMessage tmsg = (TextMessage)msg;String data = tmsg.getPayloadText();
}if (msg instanceof BinaryMessage) {
BinaryMessage bmsg = (BinaryMessage)msg;byte[] data = bmsg.getPayloadData();
}}
Tehnici avansate de programare – p.70/81
Segmentarea si reasamblarea
Segmentarea si reasamblarea (SAR) este ocaracteristica a unor protocoale de transport carepermite divizarea unui mesaj mare într-o secventaordonata de mesaje de dimensiuni mai mici (unitati detransmisie). Exemplu: 1 segment SMS - 160 caractere.Pot exista limitari asupra dimensiunii unui mesaj sau anumarului de segmente. Standard: 3 segemente.
MessageConnection mc = ... ;TextMessage tmsg = ... ;int segcount = mc.numberOfSegments(tmsg);if (segcount == 0) {
// alert the user}
Tehnici avansate de programare – p.71/81
Bluetooth
Bluetooth reprezinta o tehnologie wireless pentrudistante scurte, cu costuri reduse, pentru crearea deretele personale (PAN - Personal Area Network). O astfelde retea (piconet) este creata dinamic într-un spatiurestrâns în care devine automat posibila comunicareaîntre diferite dispozitive mobile (telefoane, PDA-uri) - unuldin ele va fi master, celelalte (cel mult 7), fiind de tipslave. De asemenea, Bluetooth permite conectarea maimultor piconet-uri.Java APIs for Bluetooth Wireless Technology (JABWT)permite dezvoltarea de aplicatii Java bazate petehnologia Bluetooth.
Tehnici avansate de programare – p.72/81
JXTA
JXTA reprezinta un set de protocoale de reteaopen-source peer-to-peer (P2P) care permitcomunicarea între orice tipuri de dispozitive conectate înretea: statii PC, servere, telefoane, PDA-uri, etc.JXTA poate fi utilizat din orice limbaj, sistem de operare,dispozitiv fizic sau protocol de transport.Comunicarea este realizata prin mesaje XML.JXME (JXTA - J2ME) reprezinta setul de protocoaleJXTA destinat J2ME pentru configuratia CLDC si profilulMIDP.
Tehnici avansate de programare – p.73/81
Push Registry
Tehnici avansate de programare – p.74/81
Conceptul de "Push"
Conceptul de "Push" se refera la mecanismul sauabilitatea unei aplicatii de a primi si procesa asincroninformatii, având avantajul de a reduce substantialutilizarea resurselor dispozitivului pe care ruleazaprogramul respectiv. Folosind registri de tip "Push" esteposibila activarea midlet-urilor :
pe baza unui timer
prin retea
Utilitatea: aplicatii pentru e-mail, agenda, etc.
Tehnici avansate de programare – p.75/81
Elementele Push Registry
Tehnici avansate de programare – p.76/81
Activarea midlet-urilor
Tehnici avansate de programare – p.77/81
Inregistrarea
Static a - în fisierul descriptor (.jad) al suitei demidleturi pot fi înregistrate doar activari prin retea.MIDlet-Push-<n>: <ConnectionURL>, <MIDletClassName>,
<AllowedSender>MIDlet-Push-1: socket://:79, com.sun.example.SampleCh at, *MIDlet-Push-2: datagram://:50000, com.sun.example.Sam pleChat, *
Dinamic a - folosind Push Registry API pot fiînregistrate la momentul executiei (runtime) atâtactivari prin retea cât si pe baza de timer.
PushRegistry.registerAlarm
PushRegistry.registerConnection
Tehnici avansate de programare – p.78/81
Activarea pe baza de timer
private void scheduleMIDlet(long deltatime)throws ClassNotFoundException,
ConnectionNotFoundException,SecurityException {
String midlet = this.getClass().getName();Date alarm = new Date();long t = PushRegistry.registerAlarm(midlet, alarm.getTi me() + deltatime);
}...public void destroyApp(boolean uc) throws
MIDletStateChangeException {// Eliberare resurse...// Inregistrarea activariischeduleMIDlet(defaultDeltaTime);display = null;
}
Tehnici avansate de programare – p.79/81
Activarea prin retea
...String midletClassName = this.getClass().getName();String url = "socket://:5000";String filter = " * ";try {
ServerSocketConnection ssc =(ServerSocketConnection)Connector.open(url);
PushRegistry.registerConnection(url, midletClassName , filter);SocketConnection sc =
(SocketConnection)ssc.acceptAndOpen();InputStream is = sc.openInputStream();...
}catch(SecurityException e) { ... }catch(ClassNotFoundException e) { ... }catch(IOException e) { ... }...
Tehnici avansate de programare – p.80/81
top related