Xem mẫu
- P 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:
Hi n tr ng Các API khác
MIDP- Mobile
Information
DeviceProfile
u hình
CLCD-( Connected Limited Device Configuration)
Máy o Java
Ph n c ng thi t b
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.
1
- ng 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 am 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.
2
- 3.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.
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à 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.
3
- 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à 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.
4
- 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;
}
}
}
}
}
5
- 3.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.
6
- 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){
package Edu.KeyCodes; midlet.exitMIDlet();
import }
javax.microedition.lcdui.*; }
import protected void keyPressed(int
javax.microedition.midlet.*; keyCode) {
import if (keyCode ==
javax.microedition.midlet. getKeyCode(RIGHT)){
MIDletStateChangeException; x=x+10;
public class KeyCodes extends }
MIDlet { if (keyCode ==
private Display display; getKeyCode(LEFT)){
private KeyCodeCanvas x=x-10;
canvas; }
public KeyCodes() { if (keyCode == getKeyCode(UP)){
display= y=y-10;
Display.getDisplay(this); }
canvas = new if (keyCode ==
KeyCodeCanvas(this); getKeyCode(DOWN)){
} y=y+10;
public void }
destroyApp(boolean
unconditional) { repaint();
} }
}
7
- 4. 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() );
}
8
- catch (BluetoothStateException e)
{
System.err.println( "BluetoothStateException: " + e.getMessage() );
}
catch (IOException ex)
{
ex.printStackTrace();
}
catch(Exception e)
{
Ph 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.
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;
9
- 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;
}
}
5. 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
10
- c 3:
c 4:
c 5:
11
- c 5:
c 6:
12
- c 7:
c 8:
13
- c 9:
c 10:
14
- c 11:
c 12:
c 13:
15
- c 14:
c 15:
16
- c 16:
c 17:
17
- c 18:
c 19:
18
- 5.3 óng gói ch ng trình
19
- 5.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:
1. http://www.codeguru.com/java
2. http://www.benhui.net
3. http://www.diendantinhoc.org
4. Bluetooth – Link manager and J2ME programming, Kjell Jorgen Hole
20
nguon tai.lieu . vn