1
P TRÌNH TRÊN THIT BI DI NG
1. Gii thiu Java và ng dng lp trình trên thit b di ng
1.1 Gii thiu v Java
Vào nhng nm 1990, Java c ra i t d án xanh và ban u c xây dng kiim
sóat các thí b dân dng và mt s thit b cm tay. Java c xây dng ch yu da trong b
công c phát trin (Java Development Kit – JDK) nh là th vin chun trong ó cha trình
biên dch, trình thông dch,… ây chính là nn tng cho vic phát trin ng dng Java. Hin
nay các nhà phát trin ã xây dng nhiu nhánh mi cho Java nh:
J2EE ( Java 2 Platform Enterprise Edition): Phiên bn dành cho máy ch ln vi sc
nh x lý và dung lng b nh ln.
J2SE ( Java 2 Platform Standard Edition): Phiên bn chun chy trên các máy PC và
laptop.
J2ME ( Java 2 Platform Micro Edition): là phiên bn rút gn ca Java cho các thit di
ng gii hn v b nh và b x lý.
1.2 ng dng lp trình trên thit b di ng bng J2ME
c tiêu ca ca J2ME là cho phép ngi lp trình vit các chng trình ng dng ng lp
i thit b di ng, không cn quan tâm n phn cng. J2ME c xây dng bng các tng
khác nhau giu i vic thc hin phn cng khi nhà phát trin. Sau ây là các tng ca
j2ME c xây dng trên CLDC:
ng phn cng thit b: ây là thit b di ng vi cu hình phn cng ca nó nh b nh,
c x lý. Các thit b di ng khác nhau có th có các b x lý khác nhau vi các mã lnh khác
nhau. Mc tiêu ca J2ME là cung cp mt chun cho tt c các lai thit b di ng khác nhau.
ng máy o Java: Khi mã ngun Java c biên dch nó c chuyn i thành mã
bytecode. Mã bytecode này sau ó c chuyn thành mã ngôn ng máy ca thit b di ng. Tng
máy o java bao gm KVM ( K virtual Machine) là b biên dch mã bytecode có nhim v chuyn
mã bytecode ca chng trình Java thành ngôn ng máy chy trên thit b di ng. tng này cung
p mt s chun hóa cho các thit b di ng ng dng J2ME sau khi ã biên dch có th hat
ng trên bt k thit b di ng nào có J2ME KVM.
Phn cng thit b
Máy o Java
p java m rng ca lp tru tng javax.microedition.midlet.MIDlet và thc thi các phng thc
startApp(), pauseApp(), và destroyApp().
an chng trình ti thiu ca MIDlet:
import javax.microedition.midlet.*;
public class exMIDlet extend MIDlet {
public exMIDlet( ) { }
public void startApp( ) { }
public void pauseApp( ) { }
public void destroyApp( boolean unconditional ) { }
}
Trong ó :
o Phng thc exMIDlet là hàm constructor .
o Phng thc startApp( ) : c gi bi b qun lý ng dng khi MIDlet c
khi to hay khi MIDlet tr v trng thái tm dng.
o Phng thc pauseApp( ) : c gi bi b qun lý ng dng mi khi ng dng
n c tm dng.
o Phng thc destroyApp( ): c gi khi thoat khi MIDlet.
3. ha trong J2ME
Các lp MIDP cung cp hai mc ha: ha mc thp và ha mc cao. ha mc
cao dùng cho vn bn hay form. ha mc thp dùng cho các ng dng games.
3
3.1 ha mc cao
ha mc cao là lp con ca lp Screen. Nó cung cp các thành phn nh text box, form,
list và alert.
3.1.1 TextBox
p Textbox cho phép ngi dùng nhp và san tho vn bn. Ngi lp trình có th
nh ngha s ký t ti a, gii hn d liu nhp ( s, mt khu, imail,…) và hiu chnh
i dung ca textbox.
package Edu.TextBox;
import javax.microedition.lcdui.*;
}
}
}
3.1.2 Form
Form là lp hu dng nht ca các lp Sreen bi vì nó cho phép cha nhiu item trên
cùng mt màn hình. Các item có th là datafield, TextField, ImageItem.
4
package Edu.Form;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import
javax.microedition.midlet.MIDletStateChangeExceptio
n;
public class FormMIDlet extends MIDlet implements
CommandListener {
private Display display;
private Form fr;
private Command themCommand;
private Command quitCommand;
public FormMIDlet() {
}
public void destroyApp(boolean unconditional)
{
}
protected void pauseApp() {
}
protected void startApp() throws
MIDletStateChangeException {
display = Display.getDisplay(this);
quitCommand = new
on;
public class listbox extends MIDlet implements
CommandListener {
private Display display;
private List ls;
private Command chonCommand;
private Command quitCommand;
public listbox() {
}
public void destroyApp(boolean
unconditional) {
}
protected void pauseApp() {
}
protected void startApp() throws
MIDletStateChangeException {
display = Display.getDisplay(this);
quitCommand = new
Command("Thóat",Command.SCREEN,1);
chonCommand = new
Command("Chon",Command.BACK,1);
ls=new List(null, Choice.IMPLICIT, new
String[]{ "Muc chon 1", "Muc chon 2", "Muc chon 3"
}, new Image[]{null, null, null });
ls.addCommand(quitCommand);
ls.addCommand(chonCommand);
ls.setCommandListener(this);
display.setCurrent(ls);
}
public void commandAction(Command choice,
cung cp các i tng v.
3.2.1 Lp Canvas
p Canvas là mt lp tru tng, ta phi to các canvas ca riêng v trên lp m rng
này và lp Canvas cung cp phng thc:
- paint (Graphics g) thc hin v lên canvas.
- repaint() thc hin v li các hình ã hin th trên màn hình.
Mi lp canvas tng nhn s kin ca phím bng cách s dng các phng thc:
- void keyPressed (int keyCode): c gi khi mt phím c nhn
- void keyReleased( int keyCode): c gi khi mt phím c th.
- void keyRepeated( int keyCode): c gi khi mt phím b gi.
- int getKeyCode(int gameAction): Ly mt mã phím phn hi li hành ng game xác nh
trên thit b
- String getKeyName (int keyCode): Ly tên ca phím có giá tr mã phím là keyCode
- int getGameAction(int keyCode): Ly mt hành ng game liên quan n mã phím c
nhn.
- void pointerDragged( int x, int y): c gi khi rê chut n ta x, y mi.
- void pointerPressed ( int x, int y) : c gi khi nhn chut ti ta x, y
- void pointerReleased ( int x, int y): c gi khi th chut ti ta x, y.
3.2.2 Lp Graphics
i tng Graphics có thc s dng v: hình vuông, hình ch nht, cung tròn,
ng thng, ký t, nh, vn bn trên i tng Canvas.
Các phng thc:
- void setColor(int red, int green, int blue)
- void drawArc(…): v cung tròn.
- void drawRect(…): v hình ch nht
- void drawString(…): V chui.
- void drawImage(…): vnh.
7
package Edu.KeyCodes;
import
}
}
class KeyCodeCanvas extends Canvas implements
CommandListener{
private Command quitCommand;
private KeyCodes midlet;
private int x=getWidth()/2,
y=getHeight()/2;
public KeyCodeCanvas(KeyCodes midlet)
{
this.midlet= midlet;
quitCommand = new
Command("Thóat", Command.SCREEN, 1);
addCommand(quitCommand);
setCommandListener(this);
}
protected void paint (Graphics g){
g.setColor(255, 255, 255);
g.fillRect(0, 0, getWidth(),
getHeight());
g.setColor(0, 0, 0);
g.drawArc(x, y,30, 30, 0, 360);
}
public void commandAction (Command c,
Displayable d) {
if (c== quitCommand){
midlet.exitMIDlet();
}
}
protected void keyPressed(int
các phng thc truyn thông nói trên.
t ng dng bluetooth bao gm hai phn: server dùng to dch v bluetooth và phn client
t ni n server và thc hin truyn thông.
Phn server:
Mi mt thit b bluetooth bao gm mt i tng thit b cc b mà nó giúp cho vic truyn
thông gia các thit b. Trong JSR82 phng thc LocalDevice.getLocalDevice() tr vi tng
này.
mc kt ni bluetooth phi s dng chui URL bng phng thc Connector.open(URL)
và phng thc này tr v lung chuyn d liu StreamConnectionNotifier.
dng hai phng thc openOutputStream() hoc openInputStream() gi hoc nhn d
liu.
URL c xác nh: URL = "btspp://localhost:" + UUID +
";name=rfcommtest;authorize=true";
Trong ó UUID có th là : OBEX, L2CAP, RFCOMM
m_strUrl= "btspp://localhost:" + RFCOMM_UUID + ";
name=rfcommtest;authorize=true";
// m_StrmConn = BTFACADE.waitForClient(SERVICE_NBR);
try
{
m_LclDevice = LocalDevice.getLocalDevice();
m_LclDevice.setDiscoverable(DiscoveryAgent.GIAC);
m_StrmNotf = (StreamConnectionNotifier)Connector.open(m_strUrl);
//Now it will start waiting for the client connection
m_StrmConn = m_StrmNotf.acceptAndOpen();
m_bInitServer = true;
m_Output = m_StrmConn.openOutputStream();
m_Input = m_StrmConn.openInputStream();
}
catch (BluetoothStateException e)
{