Nó cung c p các thành ph n nh text box, form, list và alert.. Các item có th là datafield, TextField, ImageItem... Các ph ng th c: - void setColorint red, int green, int blue - void draw
Trang 1P TRÌNH TRÊN THI T BI DI NG
1 Gi i thi u Java và ng d ng l p trình trên thi t b di ng
1.1 Gi i thi u v Java
Vào nh ng n m 1990, Java c ra i t d án xanh và ban u c xây d ng kii m sóat các thí b dân d ng và m t s thi t b c m tay Java c xây d ng ch y u d a trong b công c phát tri n (Java Development Kit – JDK) nh là th vi n chu n trong ó ch a trình biên d ch, trình thông d ch,… ây chính là n n t ng cho vi c phát tri n ng d ng Java Hi n nay các nhà phát tri n ã xây d ng nhi u nhánh m i cho Java nh :
J2EE ( Java 2 Platform Enterprise Edition): Phiên b n dành cho máy ch l n v i s c
nh x lý và dung l ng b nh l n
J2SE ( Java 2 Platform Standard Edition): Phiên b n chu n ch y trên các máy PC và laptop
J2ME ( Java 2 Platform Micro Edition): là phiên b n rút g n c a Java cho các thi t di
ng gi i h n v b nh và b x lý
1.2 ng d ng l p trình trên thi t b di ng b ng J2ME
c tiêu c a c a J2ME là cho phép ng i l p trình vi t các ch ng trình ng d ng ng l p
i thi t b di ng, không c n quan tâm n ph n c ng J2ME c xây d ng b ng các t ng khác nhau gi u i vi c th c hi n ph n c ng kh i nhà phát tri n Sau ây là các t ng c a j2ME c xây d ng trên CLDC:
ng ph n c ng thi t b : ây là thi t b di ng v i c u hình ph n c ng c a nó nh b nh ,
c x lý Các thi t b di ng khác nhau có th có các b x lý khác nhau v i các mã l nh khác nhau M c tiêu c a J2ME là cung c p m t chu n cho t t c các l ai thi t b di ng khác nhau
ng máy o Java: Khi mã ngu n Java c biên d ch nó c chuy n i thành mã
bytecode Mã bytecode này sau ó c chuy n thành mã ngôn ng máy c a thi t b di ng T ng máy o java bao g m KVM ( K virtual Machine) là b biên d ch mã bytecode có nhi m v chuy n
mã bytecode c a ch ng trình Java thành ngôn ng máy ch y trên thi t b di ng t ng này cung
p m t s chu n hóa cho các thi t b di ng ng d ng J2ME sau khi ã biên d ch có th h at
ng trên b t k thi t b di ng nào có J2ME KVM
Ph n c ng thi t b Máy o Java
u hình CLCD-( Connected Limited Device Configuration)
Hi n tr ng MIDP- Mobile Information DeviceProfile
Các API khác
Trang 2ng c u hình : ng c u hình c a CLDC nh ngh a giao di n ngôn ng Java c b n cho phép ch ng trình java ch y trên thi t b di ng ây là m t t p các API nh ngh a lõi c a ngôn ng J2ME Ng i l p trình có th s d ng các l p và ph ng th c c a các API này tuy nhiên các API h u d ng h n c ch a trong t ng hi n tr ng
ng hi n tr ng: T ng này cung c p các API h u d ng h n cho ng i l p trình M c ích
a hi n tr ng là xây trên l p c u hình và cung c p nhi u th vi n ng d ng h n MIDP nh ngh a các API riêng bi t cho thi t b di ng C ng có th có các hi n tr ng và các API khác ngòai MIDP
c dùng cho ng d ng, c ng có th có m t hi n tr ng nh ngh a các API cho vi c t o các ng
ng Bluetooth
Hi n nay, MIDP có hai phiên b n là MIDP 1.0 và MIDP 2.0 và cung c p:
- Các l p và các ki u d li u
- tr i t ng Display
- tr Form và giao di n ng i dùng
- tr Timer và Alert
- tr Record Management System( RMS) cho vi c l u tr d li u
Các tính n ng n i b t c a MIDP 2.0 so v i MIDP 1.0:
- Nâng c p tính n ng b o m t, h tr giao th c HTTPS, ki m sóat vi c k t n i máy di ng
i server
- Thêm các API h tr Multimedia
- r ng các tính n ng c a Form
2 MIDlet
Các ng d ng J2ME c g i là MIDlet ( Mobile Information Device Applet) MIDlet là m t
p java m r ng c a l p tr u t ng javax.microedition.midlet.MIDlet và th c thi các ph ng th c startApp(), pauseApp(), và destroyApp()
an ch ng trình t i thi u c a 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 Ph ng th c exMIDlet là hàm constructor
o Ph ng th c startApp( ) : c g i b i b qu n lý ng d ng khi MIDlet c
kh i t o hay khi MIDlet tr v tr ng thái t m d ng
o Ph ng th c pauseApp( ) : c g i b i b qu n lý ng d ng m i khi ng d ng
n c t m d ng
o Ph ng th c destroyApp( ): c g i khi thoat kh i MIDlet
3 h a trong J2ME
Các l p MIDP cung c p hai m c h a: h a m c th p và h a m c cao h a m c cao dùng cho v n b n hay form h a m c th p dùng cho các ng d ng games
Trang 33.1 h a m c cao
h a m c cao là l p con c a l p Screen Nó cung c p các thành ph n nh text box, form, list và alert
3.1.1 TextBox
p Textbox cho phép ng i dùng nh p và s an th o v n b n Ng i l p trình có th
nh ngh a s ký t t i a, gi i h n d li u nh p ( s , m t kh u, imail,…) và hi u ch nh
i dung c a textbox
import
javax.microedition.midlet.MIDletStateChangeException;
CommandListener {
}
}
}
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);
}
displayable) {
if(choice==quitCommand){
notifyDestroyed();
} }
}
3.1.2 Form
Form là l p h u d ng nh t c a các l p Sreen b i vì nó cho phép ch a nhi u item trên cùng m t màn hình Các item có th là datafield, TextField, ImageItem
Trang 4package Edu.Form;
import
javax.microedition.midlet.MIDletStateChangeExceptio n;
CommandListener {
}
{
}
}
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);
}
Displayable displayable) {
if(choice==quitCommand){
notifyDestroyed();
}
if(choice==themCommand){
fr.append( "\nMuc moi" );
} }
}
3.1.3 List
p List là m t Screen ch a danh sách các l a ch n, ng i s d ng có th t ng tác v i List
và ch n m t hay nhi u item
Trang 5package Edu.listbox;
import
javax.microedition.midlet.MIDletStateChangeExcepti on;
CommandListener {
}
unconditional) {
}
}
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);
}
Displayable displayable) {
if(choice==quitCommand){
notifyDestroyed();
}
if(displayable == ls){
if( choice ==ls.SELECT_COMMAND) {
/////
//////
//////
} }
} }
}
Trang 63.2 h a m c th p
h a m c th p là l p con c a l p Canvas L p này cung c p các ph ng th c h a cho phép v lên màn hình hay vào m t m hình cùng v i các ph ng th c x lý s ki n bàn
phím L p này dùng cho các ng d ng trò ch i c n u khi n v màn hình
Canvas và Graphics là hai l p ch y u c a các hàm API c p th p Canvas là m t khung cho phép ng i l p trình có th v lên thi t b trình bày c ng nh vi c x lý s ki n Còn l p Graphics cung c p các i t ng v
3.2.1 L p Canvas
p Canvas là m t l p tr u t ng, ta ph i t o các canvas c a riêng v trên l p m r ng này và l p Canvas cung c p ph ng th c:
- paint (Graphics g) th c hi n v lên canvas
- repaint() th c hi n v l i các hình ã hi n th trên màn hình
M i l p canvas t ng nh n s ki n c a phím b ng cách s d ng các ph ng th c:
- void keyPressed (int keyCode): c g i khi m t phím c nh n
- void keyReleased( int keyCode): c g i khi m t phím c th
- void keyRepeated( int keyCode): c g i khi m t phím b gi
- int getKeyCode(int gameAction): L y m t mã phím ph n h i l i hành ng game xác nh trên thi t b
- String getKeyName (int keyCode): L y tên c a phím có giá tr mã phím là keyCode
- int getGameAction(int keyCode): L y m t hành ng game liên quan n mã phím c
nh n
- void pointerDragged( int x, int y): c g i khi rê chu t n t a x, y m i
- void pointerPressed ( int x, int y) : c g i khi nh n chu t t i t a x, y
- void pointerReleased ( int x, int y): c g i khi th chu t t i t a x, y
3.2.2 L p Graphics
i t ng Graphics có th c s d ng v : hình vuông, hình ch nh t, cung tròn,
ng th ng, ký t , nh, v n b n trên i t ng Canvas
Các ph ng th c:
- void setColor(int red, int green, int blue)
- void drawArc(…): v cung tròn
- void drawRect(…): v hình ch nh t
- void drawString(…): V chu i
- void drawImage(…): v nh
Trang 7package Edu.KeyCodes;
import
javax.microedition.lcdui.*;
import
javax.microedition.midlet.*;
import
javax.microedition.midlet.
MIDletStateChangeException;
MIDlet {
canvas;
display=
Display.getDisplay(this);
canvas = new
KeyCodeCanvas(this);
}
public void
destroyApp(boolean
unconditional) {
}
}
MIDletStateChangeException {
display.setCurrent(canvas);
}
notifyDestroyed();
}
}
CommandListener{
y=getHeight()/2;
{
this.midlet= midlet;
quitCommand = new
Command( "Thóat" , Command.SCREEN, 1);
addCommand(quitCommand);
}
getHeight());
}
Displayable d) {
if (c== quitCommand){
midlet.exitMIDlet();
} }
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();
} }
Trang 84 p trình Bluetooth
thu t bluetooth c dùng truy n thông gi a n th ai di ng v i n th ai di ông,
ho c gi a n th ai di ng và mán tính
Có 3 ph ng th c truy n thông c cài t trong k thu t bluetooth:
- OBEX - Object Exchange: dùng chuy n d li u d ng file, hình nh
- L2CAP- Logical Link Control and Adaptation Protocol: Dùng chuy n các gói d li u
gi a client và server
- RFCOMM- Radio Frequency COMMunication: Dùng chuy n các lu ng d li u n
gi n
Sun Java cung c p th vi n hàm API bluetooth: Bluetooth JSR82 API package và bao g m t t c các ph ng th c truy n thông nói trên
t ng d ng bluetooth bao g m hai ph n: server dùng t o d ch v bluetooth và ph n client
t n i n server và th c hi n truy n thông
Ph n server:
M i m t thi t b bluetooth bao g m m t i t ng thi t b c c b mà nó giúp cho vi c truy n thông gi a các thi t b Trong JSR82 ph ng th c LocalDevice.getLocalDevice() tr v i t ng này
m c k t n i bluetooth ph i s d ng chu i URL b ng ph ng th c Connector.open(URL)
và ph ng th c này tr v lu ng chuy n d li u StreamConnectionNotifier
d ng hai ph ng th c openOutputStream() ho c openInputStream() g i ho c nh n d
li u
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() );
}
Trang 9Ph n Client:
t o c client s d ng các ph ng th c sau tìm thi t b bluetooth và tìm d ch v c trên nó:
void deviceDiscovered(RemoteDevice btDevice, DeviceClass od)
void servicesDiscovered(int transID, ServiceRecord[] records)
Sau khi k t n i c thi t b bluetooth s d ng các ph ng th c write () và read() g i và
nh n d li u
catch (BluetoothStateException e)
{
System.err.println( "BluetoothStateException: " + e.getMessage() );
}
catch (IOException ex)
{
ex.printStackTrace();
}
catch(Exception e)
{
public void SearchAvailDevices()
{
try
{
//First, get the local device and obtain the discovery agent.
m_LclDevice = LocalDevice.getLocalDevice();
m_DscrAgent= m_LclDevice.getDiscoveryAgent();
m_DscrAgent.startInquiry(DiscoveryAgent.GIAC,this);
}
catch (BluetoothStateException ex)
{
System.out.println("Problem in searching the Bluetooth devices");
ex.printStackTrace();
}
}
public void deviceDiscovered(RemoteDevice btDevice, DeviceClass cod)
{
try
{
// Device information
System.out.println("Major Device Class and information : " +
cod.getMajorDeviceClass() +
" Minor Device Class: " +
cod.getMinorDeviceClass());
System.out.println("Bluetooth Address of the device: " +
btDevice.getBluetoothAddress());
System.out.println("Friendly Name: " +
btDevice.getFriendlyName(true));
// Now its our responsibility to search its services
UUID uuidSet[] = new UUID[1];
uuidSet[0] = RFCOMM_UUID;
Trang 105 Phát tri n ng d ng MIDlet
5.1 Chu n b các ph n m m
Eclipse 3.1
Sun Wireless Toolkit
EclipseME Plugin for Eclipse
5.2 Cài t
c 1: Cài các ph n m m Eclipse và Wireless Toolkit
c 2: Cài t EclipseME plugin
int searchID = m_DscrAgent.searchServices(null,uuidSet,
btDevice,this); }
catch (Exception e)
{
System.out.println("Device Discovered Error: " + e);
}
}
public void servicesDiscovered(int transID, ServiceRecord[] records) {
for (int i = 0; i < records.length; i++)
{
m_strUrl = records[i].getConnectionURL(ServiceRecord.
AUTHENTICATE_ENCRYPT, false);
System.out.println(m_strUrl);
//we have found our service protocol
if(m_strUrl.startsWith("btspp"))
{
m_bServerFound = true;
m_bInitClient=true;
break;
}
}
Trang 11c 3:
c 4:
c 5:
Trang 12c 5:
c 6:
Trang 13c 7:
c 8:
Trang 14c 9:
c 10:
Trang 15c 11:
c 12:
c 13:
Trang 16c 14:
c 15:
Trang 17c 16:
c 17:
Trang 18c 18:
c 19:
Trang 195.3 óng gói ch ng trình
Trang 205.4 Cài t ch ng trình lên n th ai di ng
Sau khi óng gói ch ng trình s d ng trình PC Suite cài t ch ng trình lên n th ai
di ng
6 t lu n
- c u ã tìm hi u ki n trúc t ch c l p trình J2ME trên thi t b di ng
- ng v i m i k thu t l p trình trên thi t b di ng xây d ng c các an mã J2ME
ng ng
Tài li u tham kh o:
4 Bluetooth – Link manager and J2ME programming, Kjell Jorgen Hole