Programim Mobile Leksion 4 � Programimi Mobile në Java
1
Tema: Programimi Mobile në Java
Në këtë leksion....
Familja Java dhe J2ME
Konfigurimet CLDC dhe CDC, Paketat Opsionale
Krijimi i aplikacioneve MIDP dhe CDC
Shembuj aplikacionesh
Hyrje në familjen Java
Teknologjia Java është një mjedis objekt i orientuar, i krijuar nga Sun Microsystems. Qëllimi kryesor i saj ishte që të
krijonte aplikacione të pavarur nga platformat sipas sloganit �shkruaj një herë, ekzekuto kudo�. Sot Java është një
ndër mjediset më popullorë të zhvillimit të softuerëve. Ajo lejon krijimin e aplikacioneve enterprise për servera,
kompjutera personalë si edhe për pajisjet e vogla të lëvizshme. Për tu familjarizuar me teknologjine J2ME për
zhvillimin e aplikacioneve mobile le të shohim fillimisht familjen Java në përgjithësi. Siç tregohet në Figurën 1 Java
ndahet në katër edicione:
J2EE kryesisht shërben për ndërtimin e aplikacioneve enterprise që e vënë theksin në zhvillimin e aplikacioneve
server-side dhe për web.
J2SE është e destinuar për ndërtimin e aplikacioneve konvencionalë për kompjuterat desktop.
J2ME është nëngrup i J2SE që shërben për zhvillimin e programeve për pajisjet e ndërfutura që nuk mund të
suportojnë implementim të plotë të J2SE.
Java Card ofron një mjedis për zhvillimin e aplikacioneve që ekzekutohen në karta smart.
Kjo ndarje është bërë për të ofruar zgjidhje për nevoja dhe rrethana të ndryshme. Për shembull do të ishte jo
efiçente që në një makinë desktop të përdorej J2EE e cila përfshin paketa për aplikacione enterprise. Gjithashtu
implementimi i plotë i J2SE nuk mund të suportohet nga pajisjet e vogla që kanë më pak burime se një makinë
desktop.
Figurë 1- Arkitektura e familjes Java
1. Platforma J2ME J2ME është pjesë e familjes Java e ndërtuar me qëllim që të shërbejë për ndërtimin e aplikacioneve që
ekzekutohen në mjedise që punojnë me bateri dhe jo me energji elektrike si p.sh telefonat celularë, PDA dhe
pajisje të tjera të ndërfutura. Duke qenë se këto pajisje kanë aftësi të ndryshme për sa i përket kujtesës, kohës së
procesimit, harduerit dhe ekranit ato janë ndarë në grupe në varësi të qëllimit dhe të funksionaliteteve të tyre.
Programim Mobile Leksion 4 � Programimi Mobile në Java
2
Pajisjet me aftësi të ngjashme grupohen në konfigurime dhe brenda secilit konfigurim krijohen profile për të
klasifikuar më tej llojin e pajisjes. J2ME nuk është gjuhë e re por është një version i përshtatur i Java për pajisjet e
vogla duke hequr nga J2SE ato pjesë që nuk mund të suportohen. Megjithatë platforma J2ME mund të ekzekutohet
në një larmi pajisjesh si TV, PDA, libra elektronikë, telefona etj.
Për momentin në platformën J2ME ekzistojnë dy konfigurime:
CLDC(Connected Limited Device Configuration), për pajisje me
- Ndërfaqe përdoruesi shumë të thjeshtë
- Kujtesë të vogël (160Kb deri në 512 Kb)
- Komunikim wireless
- Procesor 16 ose 32 bit
- Energji e kufizuar, zakonisht me bateri
- Shembuj: telefonat celularë, librat elektronikë, PDA të thjeshta etj.
Këtyre pajisjeve do i referohemi si pajisje më pak të afta.
CDC(Connected Device Configuration), për pajisje me
- Ndërfaqe përdoruesi më të larmishme
- Kujtesë nga 2 � 16 M.
- Lidhje me disa tipe rrjetash.
- Procesorë 16 ose 32 bit.
- Shembuj: Tv, PDA etj.
Këtyre pajisjeve do i referohemi si pajisje më shumë të afta.
Në Figurën 2 tregohet lidhja midis këtyre dy konfigurimeve me J2SE:
Figurë 2 - Trashëgimia e J2ME
Funksionalitetet kryesorë të CDC dhe CLDC trashëgohen nga J2SE. Për më tepër të gjithë tiparet e implementuar në
CLDC janë të implementuar edhe në CDC në mënyrë që të ketë përshtatshmëri kthimi midis dy konfigurimeve.
Platforma J2ME ekzekutohet mbi sistemin e shfrytëzimit të telefonave celularë dhe përbëhet nga dy versione të
ndryshëm: një për pajisjet më shumë të afta dhe një për pajisjet më pak të afta siç tregohet në Figurën 3.
Secili prej versioneve përfshin:
Konfigurimin: Konfigurimi është grupi i librarive bazë me klasa dhe makina virtuale (VM) e cila interpreton dhe
ekzekuton aplikacionet. Makina Virtuale mund të jetë JVM e plotë ose një nëngrup i saj. Për CLDC dhe CDC libraritë
me klasa janë një nëngrup i J2SE API të cilit i shtohen edhe disa API të tjera specifike për J2ME si p.sh GCF.
Profilet: Profilet plotësojnë konfigurimet me API të një niveli të lartë të cilat janë më specifike për një grup të
caktuar pajisjesh. Një API e një profili zakonisht përbëhet nga funksione për zhvillimin e aplikacionit, ndërfaqes së
përdoruesit, për kujtesën ose për suport në rrjet. Vini re që profilet mund të ndërtohen sipër njëri tjetrit.
Konfigurimi së bashku me një ose më shumë profile krijon një mjedis ekzekutimi të kompletuar J2ME.
Paketat Opsionale: Me anë të paketave opsionale mjedisi i ekzekutimit zgjerohet me API që shërbejnë për
funksionalitete specifikë si p.sh lidhja me bazat e të dhënave, metodat e komunikimit, grafikë etj. Një paketë
Programim Mobile Leksion 4 � Programimi Mobile në Java
3
opsionale mund të jetë e pavarur nga konfigurimi (d.m.th suportohet edhe nga CLDC edhe nga CDC) ose mund të
jetë e dedikuar vetëm për një konfigurim specifik.
Shembuj paketash opsionale:
CDLC � PDA, Mobile Media, Mesazhe Wireless, Mobile 3D, Vendndodhje, Bluetooth, Shërbime Web.
CDC � RMI, JDBC, Grafikë e avancuar Swing dhe Java 2D.
Fatkeqësisht paketat opsionale mund ta bëjnë të vështirë zhvillimin e aplikacioneve sepse mund të ndodhë që të
duhet një listë e gjatë paketash opsionale për të suportuar plotësisht programin.
Figurë 3 - Platforma J2ME 2. Pajisjet më pak të afta: Konfigurimi CLDC
Për momentin ekzistojnë dy versione CLDC:
CLDC 1.0 i cili është lëshimi i parë i specifikimit CLDC.
CLDC 1.1 i cili është version i përmirësuar i 1.0.
CLDC ofron një mjedis ekzekutimi Java (JRE) bazë, por grupi i klasave bazë zakonisht është i vogël dhe ka nevojë që
të përmirësohet nga klasa shtesë. Në fakt CLDC nuk ka ndonjë API të integruar për menaxhimin e ndërfaqes me
përdoruesin, nuk implementon ndonjë model I/O dhe ka mangësi në arritjen e sigurisë. Për më tepër nuk
përcakton se si menaxhohen aplikacionet gjatë ciklit të tyre jetësor (Me cikël jetësor në këtë kontekst nuk i
referohemi procesit të ndërtimit të programit por procesit të ekzekutimit të tij deri në mbyllje) Për këtë arsye CLDC
zakonisht shoqërohet me profilet përkatës siç është për shembull MIDP (Mobile Information Device Profile).
MIDP (Mobile Information Device Profile)
Profili MIDP i shtohet konfigurimit CLDC për të mbushur funksionalitetet që mungojnë. MIDP në fakt është një grup
API-sh dhe librarish që ofrojnë funksionalitete si ndërfaqe përdoruesi, lidhje në rrjet, ruajtje të dhënash etj.
Aktualisht ekzistojnë dy versione MIDP të cilët implementohen në pajisje reale:
MIDP 1.0 është lëshimi i parë i profilit dhe përfshin ndërfaqe përdoruesi (nivel jo i avancuar) dhe siguri në
rrjet.
MIDP 2.0 ka përshtatshmëri kthimi me MIDP 1.0 dhe ka funksione shtesë si ndërfaqe më të avancuar.
Multimedia, lojëra etj.
Aktualisht është specifikuar edhe gjenerata e tretë e MIDP me emrin JSR271. Ky specifikim bazohet në MIDP 2.0
dhe ka përshtatshmëri kthimi me të. Një aplikacion që zhvillohet sipas profilit MIDP quhet MIDlet. Këto lloj
aplikacionesh nuk përdorin një metodë statike main për pikë hyrëse sikurse ndodh në aplikacionet tradicionalë
Programim Mobile Leksion 4 � Programimi Mobile në Java
4
desktop. Pika hyrëse e një aplikacioni MIDlet është një klasë që trashëgon nga
java.microedition.midlet.MIDlet. Klasa MIDlet ka të përcaktuara disa metoda abstrakte që thirren kur
gjendja e MIDlet-it ndryshon. Për shembull kur nis një MIDlet thirret metoda startApp e tij. Më vonë do të
tregojmë edhe një shembull kodi burim të një MIDleti-i.
Aplikacionet MIDP në pajisje menaxhohen nga AMS (Application Management Software). AMS mund të nisë, të
pezullojë ose të përfundojë një aplikacion duke thirrur metodat e ciklit jetësor të klasës së tij main. MIDlet
gjithashtu mund të njoftojë AMS nëse gjendja e tij ndryshon. Metodat e ciklit jetësor të një aplikacioni MIDlet
tregohen në Tabelën 1. Secila prej këtyre metodave mund të riimplementohet për të specifikuar më tej sjelljen e
tyre.
Metoda Përshkrimi startApp() Thirret nga AMS kur MIDlet fillon të ekzekutohet nga e para ose kur rimëkëmbet nga
një gjendje e pezulluar. destroyApp() Thirret nga AMS kur MIDlet përfundon. pauseApp() Thirret nga AMS kur MIDlet pezullohet notifyDestroyed() Thirret nga MIDlet. I kërkon AMS që ta shkatërrojë vetë MIDlet-in. notifyPaused() Thirret nga MIDlet. I kërkon AMS që ta pezullojë vetë MIDlet-in. resumeRequest() Thirret nga MIDlet-i i pezulluar(p.sh nga një thred në background). I tregon AMS se
MIDlet-i do të dalë nga gjendja e pezulluar dhe të bëhet sërish aktiv. Tabelë 1- Metodat e ciklit jetësor të MIDlet
Një ose më shumë MIDlet-e së bashku me të gjithë skedarët dhe klasat e tjera që i duhen aplikacionit paketohen
në një suitë MIDlet. Një suitë MIDlet përbëhet nga një skedar JAR dhe një skedar JAD. Skedari JAR është skedari që
duhet të dërgohet në telefon për të instaluar aplikacionin. CDC është plotësisht i përshtatshëm me CLDC.
Emri Përshkrimi PDA Optional Package
Është dizenjuar për pajiset PDA dhe produktet PALM. Këtyre pajisjeve iu shton API si PIM (Personal Information Managers.)
Mobile Media API
Suporton kontrolle për audio/video streaming. Përdorimi i saj varet nga aftësitë e pajisjes prandaj është shumë e rëndësishme që një aplikacion që përdor këtë API të kontrollojë fillimisht aftësitë multimediale të pajisjes. Përveçse është fleksible është edhe e zgjerueshme, p.sh është e mundur që të shtohen protokolle të rinj streaming audio/video që nuk janë të përfshirë në pajisje.
Wireless Messaging API
Suporton dërgimin e mesazheve wireless, përfshirë edhe mesazhet SMS. Janë të vlefshëm dy versione sot për sot: WMA 1.0 dhe WMA 2.0. Versioni i fundit përfshin edhe aftësi për MMS. Kjo API bazohet në GCF. Është e përgjithshme dhe mund të zgjerohet nga prodhuesit e pajisjeve. Këta zgjerime quhen specifikime përshtatës dhe njihen tre të tëllë: GSM SMS Adapter, GSM Cell Broadcast Adapter dhe CDMA IS-637 SMS Adapter.
Location API Suporton gjurmimin e vendndodhjes së pajisjeve Wireless. J2ME Web Suporton shërbimet Web që lidhen me procesimin e XML.
Programim Mobile Leksion 4 � Programimi Mobile në Java
5
Services API Bluetooth API
Suporton komunikimin me protokollin Bluetooth.
Security and Trust API
I lejon një telefoni Java që të ndërveprojë me kartën e tij smart të sigurisë.
Mobile 3D Graphics API
Suporton grafikat 3D.
SIP API for J2ME
Ofron suport për protokollin SIP (Session Initiation Protocol) i cili përdoret përgjithësisht për multimedia dhe aplikacionet VoIP.
Tabelë 2 - Paketa opsionale për MIDP
3. Pajisjet më shumë të afta: Konfigurimi CDC
CDC është i ngjashëm me CLDC por më i fuqishëm. Ka suport të plotë për gjuhën Java dhe për JVM. CDC përfshin
më shumë API nga J2SE se sa CLDC. Në fakt CDC është plotësisht i përshtatshëm me CLDC. Nëse multi platforma
është shumë e rëndësishme për aplikacionin duhet që niveli i prezantimit të jetë i ndarë nga niveli i kontrollit,
komunikimit, dhe niveli i aksesimit të të dhënave. Duke ndryshuar vetëm nivelin e prezantimit (ose të UI) është
shumë më e lehtë të ndërtohen aplikacione me platformë të kryqëzuar; gjithsesi testimi është faktor çelës për
suksesin e këtyre aplikimeve.
Profili Bazë (Foundation Profile)
Ky profil shton API për komunikim, siguri, kompresim, kohëshënues, dhe menaxhim ngjarjesh. Ky profil nuk ka API
për krijimin e GUI.
Profili Bazë Personal(Personal Basic Profile)
Ky profil ka API për suport bazë grafik dhe për JavaBean. Suporti grafik trashëgohet nga J2SE 1.4 dhe rrjedhimisht
aplikacionet e shkruar për PBP v1.0 mund të ekzekutohen fare mirë edhe në J2SE.
Profili Personal
PP është i vendosur mbi Profilin Bazë. Ndryshimi midis PBP dhe PP është fakti që në Profilin Personal ka më shumë
komponente heavyweight.
4. Suporti për rrjetat
J2ME ofron ndërfaqe rrjeti për zhvillimin e aplikacioneve wireless dhe shfrytëzon aftësitë e këtyre pajisjeve për tu
lidhur në rrjet sipas teknologjive të ndryshme të rrjetit wireless. Suporti për lidhjen e pajisjeve në rrjet kryhet nga
GCF hierarkia e së cilës tregohet në Figurën 4.
Figurë 4 - GCF
Programim Mobile Leksion 4 � Programimi Mobile në Java
6
Qëllimi kryesor i GCF është që të përcaktojë një arkitekturë rrjeti sa më të përgjithshme dhe të lejojë akses për
tiparet që lidhen me protokollet. GCF i ofron përdoruesit një grup të vetëm abstragimesh për të menaxhuar disa
protokolle. GCF përdoret edhe nga CLDC edhe nga CDC por ka disa ndryshime në protokollet që suportojnë. Disa
nga llojet e lidhjeve që mund të krijohen janë HttpConnection, UDPDatagramConnection, SipConnection. Pika
hyrëse e aplikacioneve për në GCF është ndërfaqja Connector e cila gjendet në paketën
javax.microedition.io package. Në fakt objektet që krijohen me GCF implementojnë ndërfaqen
Connector ose ndonjë prej klasave të tjera që trashëgojnë prej saj. Ndërfaqja ka disa metoda për hapjen e
lidhjeve. Për të hapur një lidhje formati është si më poshtë: Connector.open( �< protocol >:<address >;<parameters>� ) ; Protocol:Protokolli që do të përdoret për lidhjen. Protokolli përdoret nga GCF për të gjetur klasën e saktë që do të
përdoret.
Address:Adresa në rrjet e pikës fundore të lidhjes. Klasat Connection që suportojnë funksionalitete server të
lejojnë të specifikosh vetëm portën e lidhjes, p.sh socket://:80 krijon një lidhje socket në server në portën 80
të localhost.
Parameters:Në lidhje mund të përcaktohen në mënyrë opsionale disa parametra ekstra. P.sh lidhja
SipConnection të lejon të shtosh parametra transporti. Parametrat gjithmonë specifikohen si listë me çifte
name = value të cilët ndahen nga njëri-tjetri me pikëpresje. P.sh: SipConnection sc = ( SipConnection )Connector.open (�sip:+47−555−1234567; postd = [email protected]; user=phone�);
5. Teknologjia e standardizimit në Java
E gjithë teknologjia Java që kemi diskutuar deri tani dhe që do diskutojmë më vonë kalon përmes procesit JCP (Java
Community Process). Ky proces lindi në 1998 si një proces i hapur për pjesëmarrje me anë të të cilit pritej të
zhvillohej dhe të rishikohej teknologjia Java. Procesi mbikëqyret nga EC(Executive Committee). Ekzistojnë dy
komitete ekzekutive: një për J2SE dhe J2EE, dhe një për J2ME. Është detyrë e EC që të mbledhë, zhvillojë dhe të
aprovojë JSR(Java Specification Request). Rezultati i këtij procesi përbëhet nga tre artefakte:
Specifikimi: Është API përfundimtare, përmban klasat dhe manualin që i shpjegon përdoruesit se si ta përdorë këtë
teknologji.
TCK(Test Compatibility Kit): Përfshin testet që duhet të kalojë një specifikimin.
RI(Reference Implementation): Është implementim i specifikimit i cili i lejon përdoruesit që të fillojnë të punojnë
me të. Gjatë përdorimit të RI duhet të merret në konsideratë që ai nuk është i optimizuar nga pikëpamja e
performancës nëse nuk ka kaluar testet TCK dhe në se është kështu mund të përdoret si prototip vetëm për të
mësuar teknologjinë.
Një tip i veçantë i specifikimeve JSR janë të ashtuquajturit specifikime roadmap. Këta specifikime përbëhen nga
disa JSR por kanë edhe specifikime të tjerë shtesë. Të tillë janë JTWI(Java Technology for Wireless Industry) dhe
Mobile Service Architecture.
JTWI(Java Technology for Wireless Industry)
Figura 5 tregon se cilat JSR përfshihen në JTWI. Përveç faktit që JTWI përfshin këto teknologji, në këtë specifikim
roadmap sqarohen kërkesa mbi cilësitë e specifikimeve. Të tilla janë p.sh numri minimum i thredeve dhe
kohëshënuesve, kodimi i karaktereve, emrat e brezave kohorë, përshtatësit për mesazhet (për WMA), tipet e
protokolleve MMAPI.
Programim Mobile Leksion 4 � Programimi Mobile në Java
7
Figurë 5 - Teknologjitë Java të përfshira në JTWI
Mobile Service Architecture MSA u finalizua në Dhjetor 2006 si zhvillim i JTWI. Në këtë specifikim janë shtuar shumë më tepër paketa
opsionale, siç tregohet në Figurën 6. Përveç MSA dhe MSA Subset ekziston gjithashtu MSA Advanced Specifikation.
Si konfigurim për MSA mund të përdoret edhe CDC. Pajisjet mobile mund të suportojnë të gjithë MSA ose vetëm
një pjesë të teknologjive të përfshira në të.
Figurë 6 - (a) MSA Subset (b) MSA
Programim Mobile Leksion 4 � Programimi Mobile në Java
8
6. Mjedisi zhvillues
IDE-të më të njohura për zhvillimin e aplikacioneve në J2ME janë Eclipse, Carbide.j, dhe NetBeans. Këto IDE ofrojnë
një mjedis të mirë për të shkruar, testuar dhe për të gjetur gabimet e një aplikacioni mobile duke përdorur një
emulgator para se programi të instalohet në një pajisje të vërtetë. Për të programuar në NetBeans me J2ME është
e nevojshme që paraprakisht në kompjuter të jenë të instaluar:
Java SE Development Kit (JDK) 5.0.6 e tutje.
NetBeans IDE
NetBeans Mobility Pack për CLDC dhe/ose CDC.
Paketat duhet të instalohen sipas radhës së mësipërme. Gjithashtu ekziston një opsion për shkarkimin e NetBeans
IDE së bashku me JDK-në.
Shtimi i një librarie të re në Netbeans
Një pjesë e mirë e librarive vijnë si pjesë e platformës që përdor programuesi. Ndërkohë mund të shtohen edhe
librari të tjera shtesë me anë të Library Manager i cili gjendet në menunë Tools të NetBeans. Për të shtuar një
librari klikoni butonin New Library, caktoni një emër për librarinë dhe klikoni Ok. Më tej shtoni informacionin për
librarinë e re: informacionin classpath, informacionin për kodin burim, dhe informacionin java doc.
Figurë 7 - Shtimi i një librarie të re në NetBeans
Shtimi i librarive me anë të Library Manager është gjithmonë i nevojshëm kur duhet të përdoret një API ose librari
që nuk gjendet në platformën bazë.
Programim Mobile
9
7. Shembull: Krijimi i një aplikacioni MIDlet
Figurë
Figurë
Dy hapat e tjerë kanë të bëjnë me konfigurimin e pajisjes emulator për sa i përket tipit dhe pamjes së saj.
Leksion 4 � Programimi Mobile ne Java e n
Shembull: Krijimi i një aplikacioni MIDlet
Figurë 8 - Krijimi i një aplikacioni mobile MIDlet Hapi 1
Figurë 9 - Krijimi i një aplikacioni mobile MIDlet Hapi 2
Dy hapat e tjerë kanë të bëjnë me konfigurimin e pajisjes emulator për sa i përket tipit dhe pamjes së saj.
Programimi Mobile në Java
Dy hapat e tjerë kanë të bëjnë me konfigurimin e pajisjes emulator për sa i përket tipit dhe pamjes së saj.
Programim Mobile Leksion 4 � Programimi Mobile në Java
10
Më pas paketën <default package> të projektit mund të shtohen MIDlet-e. Më poshtë tregohet kodi burim i një
MIDlet-i të thjeshtë dhe pamja se si duket në emulator.
import javax.microedition.lcdui.*; import javax.microedition.midlet.*; public class HelloWorld extends MIDlet { Display display ; Form form ; public void startApp() { display = Display.getDisplay(this); form = new Form("Helloworld example"); form.append("Hello World!"); display.setCurrent(form); } public void pauseApp() { } public void destroyApp(boolean unconditional) { notifyDestroyed( ); } }
Pasi shkruhet kodi në MIDlet fillimisht projekti kompilohet (Run - > Build Main Project) dhe më pas ekzekutohet
(Run - > Run Main Project).
Hedhja e MIDlet-it në telefon
Pasi projekti kompilohet, NetBeans krijon Suitën MIDlet për projektin e cila gjendet në folderin HelloWorld/dist. Në
polder gjenden dy skedarë HelloWorld.jad dhe Helloworld.jar. Skedari i dytë është arkivi që ka të gjithë skedarët
që i duhen aplikacionit që të punojë. Rrjedhimisht për të instaluar MIDlet-in në telefon ky arkiv duhet të
transferohet fillimisht në telefon. Në disa raste të veçantë duhet të transferohet edhe skedari .jad. Pasi dërgohet
skedari në telefon, fillohet instalimi duke hapur këtë skedar.
8. Shembull: Krijimi i aplikacioneve CDC
Për krijimin e një aplikacioni CDC duhet që ndër opsionet për krijimin e aplikacioneve të zgjidhet CDC Application. Paraprakisht duhet të jetë instaluar një platformë e përshtatshme CDC në IDE siç është p.sh �Sun Java Toolkit 1.0 for Connected Device Configuration�. Në varësi të platformës së zgjedhur mund të kërkohen informacione
Programim Mobile Leksion 4 � Programimi Mobile në Java
11
konfigurimi të ndryshëm për projektin, por emri i projektit dhe klasa e tij main duhet të konfigurohen pavarësisht nga platforma e zgjedhur. Klasa Main është klasa ku do të fillojë ekzekutimi i programit. Klasa Main që gjenerohet nga Netbeans është një frame AWT (trashëgon nga java.awt.Frame). Njësoj si në aplikacionet jo mobile për një frame AWT ekzistojnë dy opsione vizualizimi: Source dhe Design. Në pamjen Desing është e mundur që të vendosen komponente njësoj si në aplikacionet AWT për desktop. Më poshtë tregohet kodi burim për një aplikacion të thjeshtë CDC: public class HelloWorld extends java.awt.Frame {
public HelloWorld(){ initComponents();
} private void initComponents ( ){
label1 = new java.awt.Label(); addWindowListener (new java.awt.event.WindowAdapter(){
public void windowClosing(java.awt.event.WindowEvent evt){ exitForm(evt);
} }); label1.setAlignment(java.awt.Label.CENTER); label1.setText(�HelloWorld�); add(label1, java.awt.BorderLayout.CENTER); pack();
} private void exitForm(java.awt.event.WindowEvent evt){
System.exit(0); }
public static void main(String args[]){ java.awt.EventQueue.invokeLater(new Runnable(){
public void run(){ new HelloWorld().setVisible(true);
} }) ;
} private java.awt.Label label1;
} 9. Shembuj aplikacionesh të tjerë
9.1. Wireless Messaging API: Dërgimi i SMS
WMA Api bazohet në GCF dhe shërben për të dërguar mesazhe tekst dhe binarë. Më poshtë tregohet kodi i një
aplikacioni të thjeshtë që dërgon SMS. Përbëhet vetën nga një skedar i cili ka MIDlet-in përgjegjës për dërgimin e
të dhënave. import javax.microedition.midlet.∗; import javax.microedition.io.∗; import javax.wireless.messaging.∗; public class SMS extends MIDlet {
String text=�SMS exampple test�; String address=�sms://+123456789�; MessageConnection clientConn; public void startApp ( ){
try{ clientConn =(MessageConnection)Connector.open(address); TextMessage Tmsg = (TextMessage)clientConn.newMessage(MessageConnection.TEXT MESSAGE); Tmsg.setPayloadText(text); clientConn.send(Tmsg);
Programim Mobile Leksion 4 � Programimi Mobile në Java
12
} catch(Exception EX){
System.out.println(�Error : �+EX); }
} public void pauseApp(){} public void destroyApp(boolean unconditional){}
} Përveç numrit të telefonit është e mundur të specifikohet edhe porta sipas formatit: �sms://�+�address�+�:�+ �port� 9.2. Mobile Multimedia API: Audio Player
Në këtë shembull ilustrohet përdorimi i MMAPI. Tregon se si mund të krijohet një audio player i thjeshtë duke përdorur një skedar mp3. Por telefonat celularë mund të suportojnë edhe formate të tjerë audio si au, tone, wave etj. import java.io.InputStream; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.media.*; import java.io.IOException; public class AudioPlayer extends MIDlet{ public void startApp(){ Player p ; InputStream resource; try{ resource = getClass().getResourceAsStream("/files/3b.mp3"); p = Manager.createPlayer(resource,"audio/mpeg"); p.start(); } catch(IOException ioe) { System.out.println("error:"+ioe); } catch(MediaException EX) { System.out.println("error:"+EX); } } public void pauseApp() {} public void destroyApp ( boolean unconditional ) { } }
Top Related