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
u hình
CLCD-( Connected Limited Device Configuration)
Hin trng
MIDP- Mobile
Information
DeviceProfile
Các API khác
2
ng cu hình : ng cu hình ca CLDC nh ngha giao din ngôn ng Java c bn
cho phép chng trình java chy trên thit b di ng. ây là mt tp các API nh ngha lõi ca
ngôn ng J2ME . Ngi lp trình có th s dng các lp và phng thc ca các API này tuy nhiên
các API hu dng hn c cha trong tng hin trng.
ng hin trng: Tng này cung cp các API hu dng hn cho ngi lp trình. Mc ích
a hin trng là xây trên lp cu hình và cung cp nhiu th vin ng dng hn. MIDP nh ngha
các API riêng bit cho thit b di ng. Cng có th có các hin trng và các API khác ngòai MIDP
c dùng cho ng dng, cng có th có mt hin trng nh ngha các API cho vic to các ng
ng Bluetooth.
Hin nay, MIDP có hai phiên bn là MIDP 1.0 và MIDP 2.0 và cung cp:
- Các lp và các kiu d liu
- tri tng Display
- tr Form và giao din ngi dùng
- tr Timer và Alert
- tr Record Management System( RMS) cho vic lu tr d liu.
Các tính nng ni bt ca MIDP 2.0 so vi MIDP 1.0:
- Nâng cp tính nng bo mt, h tr giao thc HTTPS, kim sóat vic kt ni máy di ng
i server.
- Thêm các API h tr Multimedia.
- rng các tính nng ca Form
2. MIDlet
Các ng dng J2ME c gi là MIDlet ( Mobile Information Device Applet). MIDlet là mt
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.*;
import javax.microedition.midlet.*;
import
javax.microedition.midlet.MIDletStateChangeException;
public class TextBoxMIDlet extends MIDlet implements
CommandListener {
private Display display;
private TextBox textBox;
private Command quitCommand;
public TextBoxMIDlet() {
}
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);
textBox=new TextBox("Soan Thao:","",100,0);
textBox.addCommand(quitCommand);
textBox.setCommandListener(this);
display.setCurrent(textBox);
}
public void
commandAction(Command choice, Displayable
displayable) {
if(choice==quitCommand){
destroyApp(false);
notifyDestroyed();
}
}
}
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
Command("Thóat",Command.SCREEN,1);
themCommand = new
Command("Thêm",Command.BACK,1);
fr=new Form("Form: ");
fr.append("Muc 1");
fr.addCommand(quitCommand);
fr.addCommand(themCommand);
fr.setCommandListener(this);
display.setCurrent(fr);
}
public void commandAction(Command choice,
Displayable displayable) {
if(choice==quitCommand){
destroyApp(false);
notifyDestroyed();
}
if(choice==themCommand){
fr.append("\nMuc moi");
}
}
}
3.1.3 List
p List là mt Screen cha danh sách các la chn, ngi s dng có th tng tác vi List
và chn mt hay nhiu item.
5
package Edu.listbox;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import
javax.microedition.midlet.MIDletStateChangeExcepti
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,
Displayable displayable) {
if(choice==quitCommand){
destroyApp(false);
notifyDestroyed();
}
if(displayable == ls){
if( choice ==ls.SELECT_COMMAND)
{
switch( ls.getSelectedIndex()){
case 0:
/////..........
break;
case 1:
//////.........
break;
case 2:
//////.........
break;
}
}
}
}
}
6
3.2 ha mc thp
ha mc thp là lp con ca lp Canvas. Lp này cung cp các phng thc ha cho
phép v lên màn hình hay vào mt m hình cùng vi các phng thc x lý s kin bàn
phím. Lp này dùng cho các ng dng trò chi cn u khin v màn hình.
Canvas và Graphics là hai lp ch yu ca các hàm API cp thp. Canvas là mt khung cho
phép ngi lp trình có th v lên thit b trình bày cng nh vic x lý s kin. Còn lp Graphics
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
javax.microedition.lcdui.*;
import
javax.microedition.midlet.*;
import
javax.microedition.midlet.
MIDletStateChangeException;
public class KeyCodes extends
MIDlet {
private Display display;
private KeyCodeCanvas
canvas;
public KeyCodes() {
display=
Display.getDisplay(this);
canvas = new
KeyCodeCanvas(this);
}
public void
destroyApp(boolean
unconditional) {
}
protected void pauseApp() {
}
protected void startApp() throws
MIDletStateChangeException {
display.setCurrent(canvas);
}
public void exitMIDlet(){
destroyApp(false);
notifyDestroyed();
}
}
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
keyCode) {
if (keyCode ==
getKeyCode(RIGHT)){
x=x+10;
}
if (keyCode ==
getKeyCode(LEFT)){
x=x-10;
}
if (keyCode == getKeyCode(UP)){
y=y-10;
}
if (keyCode ==
getKeyCode(DOWN)){
y=y+10;
}
repaint();
}
}
8
4. p trình Bluetooth
thut bluetooth c dùng truyn thông gia n thai di ng vi n thai di ông,
hoc gia n thai di ng và mán tính.
Có 3 phng thc truyn thông c cài t trong k thut bluetooth:
- OBEX - Object Exchange: dùng chuyn d liu dng file, hình nh.
- L2CAP- Logical Link Control and Adaptation Protocol: Dùng chuyn các gói d liu
gia client và server.
- RFCOMM- Radio Frequency COMMunication: Dùng chuyn các lung d liu n
gin.
Sun Java cung cp th vin hàm API bluetooth: Bluetooth JSR82 API package và bao gm tt c
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)
{
System.err.println( "BluetoothStateException: " + e.getMessage() );
}