Tải bản đầy đủ (.pdf) (20 trang)

Tài liệu lập trình trên thiết bị di động docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.03 MB, 20 trang )

1
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:
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
2
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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.
3
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.
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à 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.
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  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.
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
 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() );
}

×