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

Đồ án tốt nghiệp Khoa Công nghệ thông tin Xây dựng ứng dụng MobileGIS

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.81 MB, 80 trang )

B Giáo Dc và ào To
Trng i Hc M Tp.HCM
Khoa Công Ngh Thông Tin
KHÓA LUN TT NGHIP
 tài:
Xây Dng ng Dng MobileGIS.
GVHD : TS. Phan t Phúc
SVTH : Cao Xuân Bo Lc
MSSV : 10400071

TP.HCM – Nm 2009
Khóa lun tt nghip Xây dng ng dng MobileGis
i

Li cám n

Em xin cám n quý thy cô trong khoa Công ngh thông tin trng i hc
M đã tn tình dy bo em nhiu kin thc b ích trong sut thi gian hc tp ti
trng. Kính chúc thy cô luôn di dào sc khe và thành công trong cuc sng.
c bit, em xin chn thành cám n đn thy Phan t Phúc, và công ty
Dolsoft trong thi gian va qua đã tn tình hng dn chúng em trong sut thi
gian thc hin đ tài này. ã h tr to cho em điu kin, c hi và tích ly nhiu
kin thc sut trong thi gian thc hin đ tài, cng nh đóng góp nhiu ý kin
quý báu, qua đó, đ em có th hòan thành đc tt đ tài nay.
Mc dù đã hòan thành đ tài, nhng chc chn đ tài vn còn nhiu thiu
điu thiu sót. Em mong nhn đc s góp ý ca quý thy cô, anh ch và các bn.
Mt ln na, em xin chân thành cám n!

TP H chí minh, tháng 1 nm 2009
Ngi thc hin



Cao Xuân Bo Lc
Khóa lun tt nghip Xây dng ng dng MobileGis
ii
Mc lc
CHNG 1: GII THIU
1
1.1. Khái quát v công ngh di đng: 1
1.2. Gii thiu đ tài: 1
1.3. Đi tng và phm vi nghiên cu chính: 3
CHNG 2: TÌM HIU V CHUN J2ME
5
2.1. Gii thiu v java 5
2.1. Kin trúc j2me 6
2.2. Các thành phn chính trong j2me 8
2.2.1. Confiuration 8
2.2.2. Profiler. 10
2.2.3. Optional package. 10
2.3. Mobile Information Device Profile (MIDP) 11
2.3.1. Đnh nghĩa: 11
2.3.2. Yêu cu phn cng: 11
2.3.3. Yêu cu phn mm: 11
2.3.4. Nhng hn ch 11
2.3.5. Nhng tính năng MIDP cung cp 12
CHNG 3: LP TRÌNH ĐIN THOI VI MIDP
14
3.1. MIDP là gì? 14
3.1.1. Đnh nghĩa 14
3.1.2. Thành phn c bn. 14
3.1.3. Chu kì sng. 15

3.1.4. Đóng gói chng trình 15
3.2. Giao din. 16
3.2.1. Đ ha mc cao 17
3.2.2. Đ hc mc thp. 17
3.3. Âm thanh 18
3.4. MIDP là gì? 18
3.4.1. S kin hành đng 18
3.4.2. S kin phím. 18
Khóa lun tt nghip Xây dng ng dng MobileGis
iii
3.5. Lu tr d liu. 19
3.5.1. Record Management System 19
3.5.2. Hn ch. 20
3.5.3. Tc đ truy xut 21
3.5.4. C ch lung 21
CHNG 4: LP TRÌNH MNG
22
4.1. Khái quát. 22
4.2. Khái quát v dch v Web (Webservice), Soap và WSDL 23
4.2.1. Webservice. 23
4.2.2. SOAP và WSDL 23
4.3. Webservice và Soap. 23
CHNG 5: ĐNH V THIT B DI ĐNG
25
5.1. Mng đin thoi GSM 25
5.2. Thit b đnh v GPS 26
5.2.1. Thit b tích hp GPS. 26
5.2.2. Thit b dùng kèm vi BT-GPS 27
¬ Khái quát 27
¬ Hin thc. 27

CHNG 6: PHÂN TÍCH THIT K NG DNG
30
6.1. Kho sát hin trng 30
6.2. Phân tích và xác đnh yêu cu. 30
6.3. Thit k ng dng 31
6.3.1. V bn đ. 31
6.3.2. Di chuyn bn đ 32
6.3.3. Phóng to, thu nh 33
6.3.4. Tìm đng đi ngn nht gia hai đim. 33
6.3.5. Hng dn đng đi 35
6.3.6. Tìm đa đim xung quanh 36
6.3.7. Kt ni vi thit b GPS 37
6.3.8. Chn đi tng trên bn đ 38
6.3.9. Thêm đa đim cá nhân trên bn đ. 38
Khóa lun tt nghip Xây dng ng dng MobileGis
iv
6.3.10. Hng dn s dng 39
6.3.11. Lu thông tin làmvic 39
6.3.12. Np thông tin làm vic c 40
6.3.13. S đ giao din thit k chính ca màn hình. 41
6.1. Đc t các gói lp trong ng dng 43
6.1.1. Data Package 43
6.1.2. GPRS Package 47
6.1.3. GPS Package. 48
6.1.4. Library Package 51
6.1.5. Sound Package 52
6.1.6. MobileGIS Package. 52
CHNG 7: CI TIN VÀ TI U HÓA
59
7.1. Ni dung 59

7.2. Ti u hóa kích thc chng trình. 59
7.2.1. Nguyên tc. 60
7.2.2. Obfuscator 61
7.3. Ti u hóa tc đ. 62
7.3.1. Khái quát. 62
7.3.2. Nguyên tc. 62
7.3.3. Công c h tr 63
7.4. Ti u hóa vic s dng b nh. 64
7.4.1. Nguyên tc. 64
7.4.2. Công c h tr 65
CHNG 8: TNG KT ĐÁNH GIÁ
66
8.1. Kt qu đt đc. 66
8.1.1. Kin thc đt đc 66
8.1.2. Chng trình 66
8.2. Đánh giá chng trình 66
8.2.1. u đim. 66
8.2.2. Khuyt đim 67
8.3. Hng phát trin. 67
Khóa lun tt nghip Xây dng ng dng MobileGis
1
CHNG 1: GII THIU
1.1. Khái quát v công ngh di đng:
Công ngh thông tin ngày nay, đóng vai trò quan trng trong đi sng hng
ngày ca chúng ta. Vic ng dng công ngh thông tin vào các lnh vc vào
trong đi sng giúp cho công vic đc tin hành mt cách thun li, nhanh
chóng và hiu qu hn. Cùng vi phát trin ca công ngh thông tin, nhiu công
ngh mi ra đi nh BlueTooth, ADSL, Wireless, Mobile, WAP … làm cho
công ngh thông tin càng tr nên gn gi thân thit vi con ngi. Và mt trong
chúng, là công ngh di đng.

 thi đim hin nay, trên th gii cng nh  Vit Nam, khi th trng đin
thoi di đng đang tr nên sôi đng hn bao gi ht. Ta có th thy, không ging
nh nhng chic đin thai trc đây ch đn gin nhim v là thoi, mà chic
đin thoi ngày nay còn thc hin nhiu chc nng khác nh: gi nhn mail, truy
cp Internet, xem phim, nghe nhc, chi game, … qua đó, chic đin thoi dn
tr nên quen thuc vi con ngi và tr thành mt phn không th thiu trong
cuc sng hin đi ca chúng ta ngày nay.
Mt khác, do các nhà sn xut đin thoi di đng nm bt đc nhu cu ca
gii tr là u chung sn phm công ngh cao, luôn cho ra đi nhng loi sn
phm đin thoi di đng hin đi vi nhng tính nng đa dng và ni tri hn
trc. Song hành vi s phát trin ca phn cng, là nhu cu phát trin phn
mm ng dng trên đin thoi di đng, nhm phc v tt hn cho ngi s dng
đin thoi. Phn mm cho các thit b di đng cng rt đa dng, t nhng ng
dng mang tính gii trí nh game, xem phim, chat đn nhng ng dng làm vic
nh t đin, word, dit virus, gi nhn mail … Vì vy, ngày càng có nhiu sinh
viên các trng đi hc, tham gia nghiên cu tìm hiu công ngh di đng vi
mong mun tìm đc cho mình mt c hi vic làm tt sau này.
1.2. Gii thiu đ tài:
Trong nhng nm gn đây, khi mà hot đng sn xut phn mm trên đin
thoi di đng phát trin khá mnh m, vi s ra đi ca nhiu phm mm hu ích
trên đin thoi di đng . Mà trong đó phi k đn là phn mm bn đ trên đin
thoi đi đng đã và đang thu hút nhiu ngi s dng vi nhng tin ích thit
thc mà nó mang đn.
Khóa lun tt nghip Xây dng ng dng MobileGis
2
Tuy nhiên, đ tài v phát trin mt ng dng bn đ trên đin thoi di đng có
th nói là không mi m gì. Vì trong my nm qua, đã có nhiu khóa lun ca
các sinh viên ngành CNTT nghiên cu, tìm hiu v đ tài này. Là nhng đ tài
xây dng bn đ dng Vector, thng b hn ch v mt d liu, ch th hin bn
đ ca mt thành ph nào đó, do d liu chính thng đi kèm vi chng trình,

nm trc tip trên đin thai. Do đó, khi mun cp nht thêm thông tin d liu
trên bn đ, ngi dùng phi ti v phin bn mi v và cài đt.
 tránh tình trng này, ta xây dng phn mm hot đng theo c ch Client-
Server.  đó chng trình thành 2 phn c bn:
- Phn d liu nm  phía Server.
- Phn chng trình nm  phía Client.
ây là mt phng pháp đc s dng khá ph bin, khi d liu ca chng
trình có kích thc ln, mang tính toàn cu. Ví d nh chng trình goolge map
ca hng google, s dng nh v tinh đ hin th bn đ.
Tuy nhiên, đy là chng trình do ngi nc ngoài làm, Vì vy, vi nguyn
vng xây dng mt chng trình thun vit do ngi Vit làm em chn đ tài
“Xây dng ng dng MobileGIS”. Mc tiêu là xây dng mt phn mm trên
đin thai th hin bn đ chi tit ca tng vùng min Vit Nam, và tài nguyên
đc ly trc tip trên mng do công ty Vit bn đ cung cp ( Webservices ).
Chng trình hoàn chnh s có th chy
trên nhiu loi đin thoi khác nhau, và thc
hin nhng chc nng c bn nh sau:
Ü Xem bn đ.
Ü Xác đnh v trí hin ti ca ngi dùng
trên bn đ.
Ü Tìm đng đi ngn nht gia hai đim.
Ü Hng dn đng đi.
Ü Tìm kim các đa đim xung quanh nh
ch, trng hc, khách sn.


Chng trình này nu đc thc hin tt s
tr thành mt ng dng ha ích, thit thc và tin dng đi vi nhiu ngi, đc
bit là các bn tr trong vic đi li.
Khóa lun tt nghip Xây dng ng dng MobileGis

3
1.3. i tng và phm vi nghiên cu chính:
Hin nay có rt nhiu la chn đ vit ng dng cho đin thoi di đng, có th
k đn 5 môi trng phát trin ph bin nht: Java 2 Platform Micro Edition
(J2ME), BREW, Sysmbian OS, Openwave và Microsoft Windows CE 3.0. Xem
hình sau.


Trong đó phi k đn đu tiên J2ME, đc cho là nn tng phát trin ng dng
ph bin nht. Vì ban đu Java đc thit k đ chy trên các thit b có b nh
hn ch và thách thc v nng lc x lý. Ngoài ra, J2ME còn có kh nng kt hp
vi các “đi th” BREW, Symbian OS và Openwave. Mt khác, thách thc ln
nht ca J2ME và cng chính là u đim, là s nht quán cho nhiu loi thit b.
Hu ht các hãng sn xut TD hàng đu đu ng h Java, và Java còn nhn
đc s ng h rng rãi ca các nhà cung cp dch v di đng.
Nói đn lp trình trên đin thoi di đng, chúng ta có th hình dung đc
nhng tr ngi ln trong quá trình phát trin ng dng là:
- Nng lc ca b vi x lý trên đin thoi là rt yu.
- Dung lng b nh là rt nh.
- Tc đ đng truyn mng ( GPRS ) rt hn ch.

Và đ thc hin nhng yêu cu chính đc nêu trong phn gii thiu, trong
lun vn này, em s tp trung tìm hiu nhng vn đ chính sau:
Ü Công ngh Java, mà trng tâm chính là nghiên cu, tìm hiu v J2ME.
Khóa lun tt nghip Xây dng ng dng MobileGis
4
Ü Các k thut lp trình trên đin thai vi J2ME.
Ü Các vn đ liên quan đn mng trong J2ME( truy cp Webservices, ti
nh trên mng).
Ü Cách xác đnh v trí ca đin thoi.

Ü Cách ti u hóa kích thc và tc đ ca chng trình.
Khóa lun tt nghip Xây dng ng dng MobileGis
5
CHNG 2: TÌM HIU V CHUN J2ME
2.1. Gii thiu v java.
Vào nhng nm 1990, java đc ra đi t d án xanh ( Green Project ) và ban
đu đc xây dng đ kim soát các thít b dân dng nh TV, VCR, đèn, đin
thoi 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, giúp đ, tài liu, … ây chính là nn tng cho
vic phát trin ng dng Java.
Tuy nhiên, ngày nay Sun nhn ra rng vic to ra mt nn tng chung đ chy
trên tt c môi trng là điu không th thc hin đc,do đó công ty đã quyt
đnh chia công ngh java ca mình thành 3 phiên bn, mi phiên bn đc ng
dng trong mt lnh vc riêng bit, các phiên bn đó là:
Ü Java 2 Platform, Enterprise Edition (J2EE
TM
) phc v cho các nhu cu
v thng mi phc v khách hàng, các vn đ phân phi, các vn đ v
nhân s. Phiên bn này dành cho các máy ch ln ( server ) vi sc mng
x lý và dung lng b nh ln.
Ü Java 2 Platform, Standard Edition (J2SE
TM
) đc cung cp cho các th
trng máy tính đ bàn, máy tính gia đình hay máy tính vn phòng. Các
máy tính này, mc dù không mnh bng các máy ch nhng vn mnh hn
nhiu so vi các thit b di đng.
Ü Java 2 Platform, Micro Edition (J2ME
TM
) là mt phiên bn rút gn ca

java cho các thit b di đng gii hn v b nh và b x lý. J2ME đc
chia thành 2 loi: mt loi cho các thit b cao cp ( Máy PDA , ) và mt
loi cho các thit b cp thp hn ( đin thai di đng và PDA vi khang
512 KB b nh ).
Hình v sau minh ha các phiên bn hin có ca java và lnh vc ng dng ca
chúng, bt đu t bên trái là các nn tng cao cp sang bên phi là các nn tng
cp thp hn.

Khóa lun tt nghip Xây dng ng dng MobileGis
6

Kin trúc java
2.1. Kin trúc j2me.
Mc tiêu ca J2ME là cho phép ngi lp trình vit các ng dng đc lp vi
thit b di đng, không cn quan tâm đn phn cng tht s.  đt đc mc tiêu
này, J2ME đc xây dng bng các tng (layer) 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

Kin trúc j2me
Mi tng  trên tng hardware là tng tru tng hn cung cp cho lp trình
viên nhiu giao din lp trình ng dng (API-Application Program Interface) thân
thin hn.
Ü Tng phn cng thit b ( Device Hardware Layer ): ây chính là thit
b di đng tht s vi cu hình phn cng ca nó v b nh và tc đ x lý.
D nhiên tht ra nó không phi là mt phn ca J2ME nhng nó là ni xut
Khóa lun tt nghip Xây dng ng dng MobileGis
7
phát. Các thit b di đng khác nhau có th có các b vi x lý khác nhau vi
các tp 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 loi thit b di đng khác nhau.
Ü Tng máy o Java ( Java Virtual Machine Layer ):
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
c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 hot đng trên bt k thit b di đng nào có KVM. Vai
trò ca máy o Java hay KVM là dch mã bytecode đc sinh ra t chng
trình Java đã biên dch sang ngôn ng máy. Chính KVM s chun hóa
output ca các chng trình Java cho các thit b di đng khác nhau có th
có b vi x lý và tp lnh khác nhau. Không có KVM, các chng trình
Java phi đc biên dch thành tp lnh cho mi thit b di đng. Nh vy
lp trình viên phi xây dng nhiu đích cho mi loi thit b di đng.
Ü Tng cu hình ( Configuration Layer ): Tng cu hình ca CLDC đnh
ngha giao din ngôn ng Java (Java language interface) c bn cho phép
chng trình Java chy trên thit b di đng. Cung cp các hàm API c bn
là nhân ca J2ME. Lp trình viên có th s dng các lp và phng thc
ca các API này tuy nhiên tp các API hu dng hn đc cha trong tng
hin trng (profile layer).
Ü Tng hin trng ( Profile Layer ):Tng hin trng hay MIDP (Hin trng
thit b thông tin di đng-Mobile Information Device Profile) cung cp tp
các API hu dng hn cho lp trình viên. Mc đích ca hin trng là xây
dng 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 ngoài MIDP đc dùng cho ng dng. Ví d, có th có
hin trng PDA đnh ngha các lp và phng thc hu dng cho vic to các ng
dng PDA (lch, s hn, s đa ch,…). 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 dng Bluetooth. Thc t, các hin trng k trên và

tp các API đang đc xây dng. Chun hin trng PDA là đc t JSR - 75 và
Khóa lun tt nghip Xây dng ng dng MobileGis
8
chun bluetooth API là đc t JSR - 82 vi JSR là vit tt ca Java Specification
Request.
2.2. Các thành phn chính trong j2me.
2.2.1. Confiuration.
Trong môi trng J2ME, mt ng dng đc vit cho mt profile riêng
bit nào đó. Profile này li đc m rng t mt configuration. Vì th tt c
các đc đim ca mt configuration s đc gi li trong profile có th
đc s dng bi ng dng vit cho profile này.
Mt configuraion đnh ngha mt nn Java cho các thit b có các đc
tính tng t nhau( nh s lng b nh, tc đ x lý, kiu kt ni mng).
Mt configuration s xác đnh.
- Các tính nng ca ngôn ng Java đc h tr.
- Các tính nng ca máy o Java đc h tr.
- Th vin chun và các API.

Do đây là đc t nên các nhà sn xut thit b nh Samsung, Nokia…
bt buc phi thc thi đy đ các đc t do Sun quy đnh đ các lp trình
viên có th da vào môi trng lp trình nht quán và thông qua s nht
quán này, các ng dng đc to ra có th mang tính đc lp thit b cao
nht có th. Ví d nh mt lp trình viên vit chng trình game cho đin
thoi Samsung thì có th sa đi chng trình ca mình mt cách ti thiu
nht đ có th chy trên đin thai Nokia. Qua đây ta thy khu hiu “Write
Once, Run Everywhere” ca Java đã không còn đúng na, nhng ta cng
phi đánh giá cao s n lc ca Sun trong vic to ra mt môi trng phn
mm chung cho vô s chng loi thit b di đng có trên th trng. Hin
nay Sun đã đa ra 2 dng Configuration.
¬ CLDC - Connected Limited Device Configuration.

CLDC đc thit k đ nhm vào th trng các thit b cp thp
(low-end), các thit b này thông thng là máy đin thai di đng
và PDA vi khong 512 KB b nh. Vì tài nguyên b nh hn ch
nên CLDC đc gn vi Java không dây (Java Wireless ), dng nh
cho phép ngi s dng mua và ti v các ng dng Java, ví d nh
là Midlet
Khóa lun tt nghip Xây dng ng dng MobileGis
9
¬ CDC - Connected Device Configuration.
CDC đc đa ra nhm đn các thit b có tính nng mnh hn
dòng thit b thuc CLDC nhng vn yu hn các h thng máy đ
bàn s dng J2SE. Nhng thit b này có nhiu b nh hn (thông
thng là trên 2Mb) và có b x lý mnh hn. Các sn phm này có
th k đn nh các máy PDA cp cao, đin thoi web, các thit b
gia dng trong gia đình.

C hai dng cu hình trên đu cha máy o Java ( Java Virtual
Machine) và tp hp các lp ( class ) Java c bn đ cung cp mt môi
trng cho các ng dng J2ME. Tuy nhiên, chú ý rng đi vi các thit b
cp thp, do hn ch v tài nguyên nh b nh và b x lý nên không th
yêu cu máy o h tr các tính nng ging máy o ca J2SE. Ví d, các
thit b thuc CLDC không có phn cng h tr các phép tính toán du
phy đng, nên máy o thuc CLDC không đc h tr kiu float và
double.

CLDC CDC
Ram >=32K, <=512K >=256K
Rom >=128k, <=512k >=512k
Ngun Nng Lng Có Gii hn (ngun pin) Không gii hn
Network Chm Nhanh

Bng so sánh CLDC và CDC
Hình v sau minh ha quan h gia CLDC, CDC và Java 2 Standard
Edition ( J2SE ). Theo đó chúng ta thy mt phn ln các chc nng trong
CLDC và CDC có đc do k tha J2SE. Mi lp đc k tha t J2SE
phi ging hoc gn ging vi lp tng ng trong J2SE. Thêm vào đó,
CLDC và CDC có mt s đc tính khác đc thit k cho các thit b nhúng
mà J2SE không có ( nh các thành phn giao din ).
Khóa lun tt nghip Xây dng ng dng MobileGis
10

Quan h gia J2ME và J2SE
¬ S khác nhau gia ngôn ng Java trên CLDC vi Java thông thng.
- Kh nng x lý s thc
: Các phép toán trên s thc thng cn nhiu
thi gian x lý hn. Ngoài ra, phn ln các thit b không có phn cng
h tr cho vic tính toán s thc, do đó CLDC không h tr s thc.
- Finalization
: trong các lp đc vit bng J2SE, chúng ta thng đnh
ngha mt phng thc có tên là finalize(). Phng thc này s đc
gi trc khi b thu gom rác ( garbage collector ) thu gom đi tng.
Phng thc này là ni chúng ta đt các mã lnh đ gii phóng tài
nguyên đã s dng. Tuy nhiên, CLDC không h tr phng thc
finalize().
- Các lp k tha t J2SE
: CLDC yêu cu khong 160 KB đ chy máy
o java và các th vin c bn. Do đó, ch có mt s lp trong J2SE là
đc gi li trong CLDC.
2.2.2. Profiler.

Là m rng Configuration bng cách thêm vào các class đ b tr các

tính nng cho tng thit b chuyên bit. C 2 Configuration đu có nhng
profile liên quan và t nhng profile này có th dùng các class ln nhau.
n đây ta có th nhn thy do mi profile đnh ngha mt tp hp các
class khác nhau, nên thng ta không th chuyn mt ng dng Java vit
cho mt profile này và chy trên mt máy h tr mt profile khác. Cng
vi lý do đó, bn không th ly mt ng dng vit trên J2SE hay J2EE và
chy trên các máy h tr J2ME.
2.2.3. Optional package.

Là các API có th s dng trong nhiu thit b hay mt h các thit b.
Mt J2me option package là mt tp các API nm trên mt profile. Mt
Khóa lun tt nghip Xây dng ng dng MobileGis
11
optional package thng cha các chc nng đc lp vi các thit b. Mc
đính chính ca các optional package này là cho phép b sung các API trên
các profiles. Mt thit b có th h tr nhiu optional package khác nhau.
2.3. Mobile Information Device Profile (MIDP).
2.3.1. nh ngha:

Là Profile đc đnh ngha dành riêng cho các thit b di đng và là
thành phn chính trong J2ME. MIDP cung cp các chc nng c bn cho
hu ht các dòng thiêt b di đng ph bin nht nh các máy đin thoI di
đng và các máy PDA. Tuy nhiên MIDP không phi là cây đa thn cho
mi lp trình viên vì nh chúng ta đã bit, MIDP đc thit k cho các máy
di đng có cu hình rt thp. Có th nói MIDP là profile ni ting nht bi
vì nó là kin thc c bn cho lp trình Java trên các máy di đng (Wireless
Java).
2.3.2. Yêu cu phn cng:

- Màn hình có kích thc ti thiu là 96 x 54 pixel.

- Có ít nht mt trong các thit b nhp sau: bàn phím, màn hình cm ng.
- Ít nht 128 KB đ chy các thành phn ca MIDP.
- Ít nht 8 KB đ chy các ng dng cha d liu.
- Ít nht 32 KB đ chy Java.
- Kt ni mng không dây.
2.3.3. Yêu cu phn mm:

Do h điu hành thay đi tùy theo mi loi thit b, nên MIDP không qua
khc khe trong các yêu cu phn mm.
- H điu hành trên thit b cung cp kh nng x lý ngai l, x lý ngt,
và phi chy đc máy o Java.
- H tr v nh Bitmap.
- H tr đc và ghi d liu t b nh.
2.3.4. Nhng hn ch.

- Phép tính du phy đng (floating point): Phép tính này đòi hi rt nhiu
tài nguyên CPU và phn ln các CPU cho các thit b di đng không h
tr phép tính này, do đó MIDP cng không có.
- B np lp (Class Loader).
Khóa lun tt nghip Xây dng ng dng MobileGis
12
- H tr t khóa finalize() nh trong J2SE: Vic “dn dp“ tài nguyên
trc khi nó b xóa đc đy v phía các lp trình viên.
- H tr hn ch thao tác bt li.
- Phn ln các th vin API cho Swing và AWT không th s dng đc
trong MIDP.
- Không h tr các tính nng qun lý file và th mc: ây có th làm bn
ngc nhiên nhng thc t là các thit b J2ME không có h tr các thit
b lu tr thông thng nh  cng v.v. Tuy nhiên, điu đó không có
ngha là bn phi mt đi mi d liu quan trng mi khi tt máy, Sun đã

cung cp mt chc nng khác tng đng gi là Record Management
system (RMS) đ cung cp kh nng lu tr cho các thit b này.
2.3.5. Nhng tính nng MIDP cung cp.

- Các lp và kiu d liu: Phn ln các lp mà các lp trình viên Java quen
thuc vn còn đc gi li ví d nh các lp trong gói java.util nh
Stack, Vector và Hastable cng nh Enumeration.
- H tr đi tng Display: úng nh tên gi mt chng trình MIDP s
h tr duy nht mt đi tng Display là đi tng qun lý vic hin th
d liu trên màn hình đin thoi.
- H tr Form và các giao din ngi dùng.
- H tr Timer và Alert.
- Cung cp tính nng Record Management System (RMS) cho vic lu tr
d liu.
Ngoài ra vào tháng 11 nm 2003 Sun đã tung ra MIDP 2.0 vi hàng
lot tính nng khác đc cung cp thêm so vi bn 1.0. Nhng ci tin ni
bt so vi MIDP 1.0.
- Nâng cp các tính nng bo mt nh: Download qua mng an toàn hn
qua vic h tr giao thc HTTPS. Kim soát vic kt ni gia máy di
đng và server: ví d nh các chng trình không th kt ni ti server
nu thiu s chp thun ca ngi s dng.
- Thêm các API h tr Multimedia. Mt trong nhng ci tin hp dn nht
ca MIDP 2.0 là tp các API media ca nó. Các API này là mt tp con
ch h tr âm thanh ca Mobile Media API (MMAPI).
Khóa lun tt nghip Xây dng ng dng MobileGis
13
- M rng các tính nng ca Form. Nhiu ci tin đã đc đa vào API
javax.microedition.lcdui trong MIDP 2.0, nhng các thay đi ln nht
(ngoài API cho game) là trong Form và Item.
- H tr các lp trình viên Game bng cách tung ra Game API: Có l Sun

đã kp nhn ra th trng đy tim nng ca các thit b di đng trong
lnh vc Game. Vi MIDP 1.0 thì các lp trình viên phi t mình vit
code đ qun lý các hành đng ca nhân vt cng nh qun lý đ ha.
Vic này s làm tng kích thc file ca sn phm cng nh vic xut
hin các đon mã b li. c hng li nht t Game API trong MIDP
2.0 không ch là các lp trình viên Game mà còn là các lp trình viên cn
s dng các tính nng đ ha cao cp. Ý tng c bn ca Game API là
vic gi đnh rng mt màn hình game là tp hp các layer (lp). Ví d
nh: trong mt game đua xe thì màn hình nn là mt layer, con đng là
mt layer và chic xe đc xem nh đang nm trên layer khác. Vi
Game API nhà phát trin còn đc cung cp các tính nng nh qun lý
các thao tác bàn phím.
- H tr kiu nh RGB: mt trong nhng ci tin hp dn cho các nhà phát
trin MIDP là vic biu din hình nh di dng các mng s nguyên,
cho phép MIDlet thao tác vi d liu hình nh mt cách trc tip.

Khóa lun tt nghip Xây dng ng dng MobileGis
14
CHNG 3: LP TRÌNH IN THOI VI MIDP
3.1. MIDP là gì?
3.1.1. nh ngha.

Các ng dng J2ME đc gi là MIDlet( Mobile Information Device
Applet). Các MIDlet đc to ra da trên ca tp các lp MIDlet c bn
javax.microedition.midlet.MIDlet nên nó đc điu khin bi trình qun lý
ng dng ca MIDP.
3.1.2. Thành phn c bn.


1) Phát biu import đc dùng đ include các lp cn thit t các th vin

CLDC và MIDP.
2) Phn chính MIDlet đc đnh ngha nh là lp m rng ca lp MIDlet.
3) Hàm khi to, đc thc thi mt ln khi MIDlet khi to ln đu tiên,
hàm khi to ch đc gi li khi MIDlet thoát ra và khi đng li
chng trình.
4) startApp(): đc b qun lý ng dng gi khi MIDlet đc khi to hay
tr v trang thái tm dng.
5) pauseApp(): đc b qun lý ng dng gi khi ng dng tm dng.
6) destroyApp(): đc b qun lý ng dng gi khi thoát MIDlet.

Khóa lun tt nghip Xây dng ng dng MobileGis
15
3.1.3. Chu kì sng.

Chu kì sng ca mt MIDlet
Khi ngi dùng yêu cu khi đng ng dng MIDlet, b qun lý ng
dng s thc thi MIDlet (thông qua lp MIDlet). Khi ng dng thc thi, nó
s đc xem là đang  trng thái tm dng. B qun lý ng dng gi hàm
to và hàm startApp(). Hàm startApp() có th đc gi nhiu ln trong sut
chu k sng ca ng dng. Hàm destroyApp() ch có th gi t trng thái
hot đng hay tm dng.
3.1.4. óng gói chng trình.

Các lp đã biên dch ca ng dng MIDlet đc đóng gói trong mt tp
tin JAR (Java Archive File). ây chính là tp tin JAR đc download
xung đin thoi di đng.
Tp tin JAR cha tt c các tp tin class t mt hay nhiu MIDlet, cng
nh các tài nguyên cn thit. Hin ti, MIDP ch h tr đnh dng hình .png
(Portable Network Graphics). Tp tin JAR cng cha tp tin kê khai
(manifest file) mô t ni dung ca MIDlet cho b qun lý ng dng. Nó

cng phi cha các tp tin d liu mà MIDlet cn. Do đó tp tin JAR là toàn
b ng dng MIDlet, MIDlet có th load và gi các phng thc t bt k
lp nào trong tp tin JAR, trong MIDP, hay CLDC và không th truy xut
các lp không phi là b phn ca tp tin JAR hay vùng dùng chung ca
thit b di đng.
Tp tin kê khai (manifest.mf) và tp tin JAD (Java Application
Descriptor) mô t các đc đim ca MIDlet. S khác bit ca hai tp tin này
là tp tin kê khai là mt phn ca tp tin JAR còn tp tin JAD không thuc
tp tin JAR. u đim ca tp tin JAD là các đc đim ca MIDlet có th
Khóa lun tt nghip Xây dng ng dng MobileGis
16
đc xác đnh trc khi download tp tin JAR. Nói chung, cn ít thi gian
đ download mt tp tin vn bn nh hn là download mt tp tin JAR.
Ni dung ca tp tin JAR:
- Manifest-Version // Phiên bn tp tin Manifest.
- MIDlet-Name // Tên b MIDlet (MIDlet suite).
- MIDlet-Version // Phiên bn b MIDlet.
- MIDlet-Vendor // Nhà sn xut MIDlet.
- MIDlet- for each MIDlet // Tên ca MIDlet.
- MicroEdtion-Profile // Phiên bn hin trng.
- MicroEdtion-Configuration // Phiên bn cu hình.
3.2. Giao din.
Mt ng dng MIDlet ch có mt đi tng th hin Display. i tng
này dùng đ ly thông tin v đi tng trình bày. Ví d màu đc h tr, và
bao gm các phng thc đ yêu cu các đi tng đc trình bày. i tng
Display cn thit cho b qun lý vic trình bày trên thit b điu khin thành
phn nào s đc hin th lên trên thit b.
Ta có th chia các lp MIDP thành 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 trò chi, phi v lên màn hình.


Giao din đ ha trong MIDP.
C hai lp đ ha mc thp và mc cao đu là lp con ca lp Displayble.
Trong MIDP, ch có th có mt lp displayable trên màn hình ti mt thi
đim. Có th đnh ngha nhiu màn hình nhng mt ln ch hin th đc mt
màn hình.
Khóa lun tt nghip Xây dng ng dng MobileGis
17

3.2.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. Ta ít điu khin sp xp các thành phn trên màn
hình. Vic sp xp tht s ph thuc vào nhà sn xut.
- Form là mt khung cha các thành phn, mà mi thành phn đc tha k
t lp Item.
- List cha mt dãy các la chn đc th hin mt trong ba dng. Cho phép
nhiu la chn hay ch đc phép chn mt ging ChoiceGroup. Dng th
3 là là dng không tng minh. Các List không tng minh đuc dùng đ
th hin mt thc đn các chn la.
- TextBox cho phép nhp nhiu dòng. Thành phn TextBox và TextField có
nhng ràng buc ging nhau trong vic ch đnh loi ni dung đc phép
nhâp vào. Ví d ANY, EMAIL, URI…
- Mt Alert đn gin là mt hp thoi rt nh. Có 2 loi Alert:
o Modal: là loi hp thoi thông báo đc trình bày cho đn khi ngi
dùng n nút đng ý.
o Non-modal: là loi hp thoi thông báo ch đc trình bày trong mt s
giây nht đnh.
3.2.2.  ha mc thp.


Mc dù các hàm API cp cao cung cp mt tp đy đ các thành phn đ
xây dng giao din ng dng ngi dùng. Tuy nhiên các thành phn cp
cao không cung cp phng tin đ v trc tip lên thit b th hin. Vì
thiu kh nng này nên các ng dng đc to ra s gp nhiu gii hn. Ví
d hu ht các nhà phát trin game di đng da trên kh nng v các đng
thng và các hình dng nh là mt phn tích hp quá trình phát trin.
Nu các hàm API cp cao cho phép chúng ta to ra giao din cho các ng
dng theo chun, thì các hàm API cp thp cho phép chúng ta có th th
hin các ý tng ca mình.
Canvas và Graphics là 2 lp trái tim ca các hàm API cp thp. Canvas
là mt khung v cho phép ngi phát trin có kh nng v lên thit b trình
bày cng nh là vic x lý s kin. Còn lp Graphics cung cp các công c
tht s đ v nh drawRoundRect() và drawString().
Khóa lun tt nghip Xây dng ng dng MobileGis
18
3.3. Âm thanh.
Trong phiên bn MIDP 1.0, các lp trình viên trên đin thai di đng gp khó
khn trong vic x lý âm thanh, vì MIDP 1.0 không h tr vic x lý âm thanh
nên các nhà sn xut phi cung cp thêm các hàm API chuyên dng cho vic này.
ây là c gng ca nhà sn xut đ ci tin cht lng các đin thai tuy nhiên
nó li gây khó khn đi vi lp trình viên khi phi to ra nhiu phiên bn khác
nhau cho tng lai máy ca th.
 phiên bn MIDP 2.0, điu này đã đc SUN c gng khc phc bng vic
h tr 2 b th vin API:
- MIDP 2.0 Sound API.
- Mobile Media API ( MMAPI ).
Vic chia thành hai b API, ny sinh t thc t là nhng thit b đang có mt
s rt tài nguyên-ch. Nó có th không đc kh thi đ h tr mt lot các loi
hình đa phng tin, chng hn nh video, trên mt s đin thoi di đng. Tuy
nhiên, không phi tt c các MIDP 2.0 h tr đy đ Mobile Media API. Và

trong đ tài này, gn tin trong vic lp trình, em ch yu s dng gói th vin
này.
3.4. MIDP là gì?
3.4.1. S kin hành đng.

Khi mt đi tng xy ra trên thit b di đng, mt đi tng Command
gi thông tin v s kin đó. Thông tin này bao gm loi hành đng thc thi,
nhãn ca mnh lnh và đ u tiên ca chính nó. Trong J2ME, các hành
đng nói chung đc th hin di dng các nút trên thit b.
Nu có quá nhiu hành đng đc hin th trên thit b, thit b s to ra
mt thc đn đ cha các hành đng.
Trong MIDP thì các lnh đc biu din bng lp Command và đc
x lý thông qua giao tip CommandListener hoc ItemCommandListener.
- CommandListerner dùng cho các thành phn nh Form, List, và
TextBox và Canvas.
- ItemCommandListener dùng cho các thành phn item trong Form.
3.4.2. S kin phím.

Ta có th d dàng kim soát thao tác phím trên đi tng canvas. Khi
ngi dùng nhn mt phím trên đin thai, mt s kin đc lp tc gi
Khóa lun tt nghip Xây dng ng dng MobileGis
19
cho ng dng, ng dng s nhn s kin, phân tích phím nhn và x lý
hành đng tng ng.
i tng Canvas cung cp các phng thc sau:
- void keyPressed(int keyCode).
- void keyReleased(int keyCode).
- void keyRepeated(int keyCode).
- boolean hasRepeatEvents().
- String getKeyName(int keyCode).

3.5. Lu tr d liu.
MIDP không s dng h thng file đ lu tr d liu. Thay vào đó MIDP
lu toàn b thông tin vào non-volatile memory bng h thng lu tr gi là
Record Management System (RMS).
3.5.1. Record Management System.

RMS là h thng đc t chc và qun lý di dng các record (bn
ghi). Mi bn ghi (sau này gi là Record) có th cha bt k loi d liu
nào, chúng có th là kiu s nguyên, chui ký t hay có th là mt nh và
kt qu là mt Record là mt chui (mng) các byte. Nu bn mã hoá d
liu ca bn di dng nh phân (binary), bn có th lu tr d liu bng
Record sau đó đc d liu t Record và khôi phc li d liu ban đu. Tt
nhiên kích thc d liu ca bn không đc vut quá gii hn qui đnh
ca thit b di đng. RMS lu d liu gn nh mt c s d liu, bao gm
nhiu dòng, mi dòng li có mt s đnh danh duy nht:
Mt tp các bn ghi (sau này gi là RecordStore) là tp hp các Record
đc sp xp có th t. Mi Record không th đng đc lp mà nó phi
thuc vào mt RecordStore nào đó, các thao tác trên Record phi thông qua
RecordStore cha nó. Khi to ra mt Record trong RecordStore, Record
đc gán mt s đnh danh kiu s nguyên gi là Record ID. Record đu
tiên đc to ra s đc gán Record ID là 1 và s tng thêm 1 cho các
Record tip theo. Cn chú ý rng Record ID không phi là ch mc (index),
các thao tác xóa Record trong RecordStore s không gây nên vic tính toán
li các Record ID ca các Record hin có cng nh không làm thay đi
Record ID ca các Record đc to mi, ví d: khi ta xóa record id 3 khi
thêm mt record mi s có id là 4. Data là mt dãy các byte đi din cho d
Khóa lun tt nghip Xây dng ng dng MobileGis
20
liu cn lu. c t MIDP không đnh ngha chuyn gì xy ra khi đt đn s
ID bn ghi ti đa, điu này ph thuc vào ng dng.

Tên đc dùng đ phân bit các RecordStore trong b các MIDlet
(MIDlet suite). Cn chú ý khái nim MIDlet suite là tp các MIDlet có
chung không gian tên (name space), có th chia s cùng tài nguyên (nh
RecordStore), các bin tnh (static variable) trong các lp và các MIDlet
này s đc đóng gói trong cùng mt file .jar khi trin khai. Nu ng dng
ca bn ch có mt MIDlet thì các RecordStore đc s dng cng phân
bit ln nhau bng các tên. Tên ca RecordStore có th dài đn 32 ký t
Unicode và là duy nht trong mt MIDlet suite.

Nh trong hình, các MIDlet có th có nhiu hn mt tp lu tr bn ghi,
chúng ch có th truy xut d liu lu tr bn ghi cha trong b MIDlet ca
chúng. Do đó, MIDlet 1 và MIDlet 2 có th truy xut d liu trong Record
Store 1 và Record Store 2 nhng chúng không th truy xut d liu trong
Record Store3. Ngc li, MIDlet 3 ch có th truy xut d liu trong
Record Store 3 và không th truy xut d liu d liu trong Record Store 1
và Record Store 2.
3.5.2. Hn ch.

Dung lng vùng nh (non-volatile memory) dành riêng cho vic lu
tr d liu trong RMS thay đi tùy theo thit b di đng. c t MIDP yêu
cu rng các nhà sn xut thit b di đng phi dành ra vùng nh có kích
thc ít nht 8K cho vic lu tr d liu trong RMS. c t không nêu gii
hn trên cho mi Record. RMS cung cp các API đ xác đnh kích thc

×