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

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


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

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.

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

Ü 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

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à

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

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.

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

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ó


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.


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).

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


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status