You are on page 1of 89

HC VIN CNG NGH BU CHNH VIN THNG

C S TI THNH PH H CH MINH
---------------------------------------------

N TT NGHIP H I HC
Ngnh : Cng Ngh Thng Tin H : Chnh quy
Nin kha : 2005-2010

ti :

THIT K PHN MM TM KIM TRN


BN S CA GOOGLE MAPS DA
TRN NN TNG ANDROID DNH CHO
IN THOI DI NG

Gio vin hng dn : Ninh Xun Hi


Sinh vin thc hin : V c Mnh
M s sinh vin : 405170038

Nm 2009
C S THNH PH H CH MINH c Lp T Do Hnh Phc

Thnh ph H Ch Minh, ngythng nm 200

PHIU NHN XT N TT NGHIP H I HC


(Dnh cho ngi hng dn Biu 2)
1. Tn ti tt nghip : Thit k phn mm tm kim trn bn s ca Google
maps da trn nn tng Android dnh cho in thoi di ng .
M ti : 09405170031
2. H tn sinh vin thc hin : V c Mnh Lp : D05THA1
Ngy sinh : 04/11/1987 MSSV:405170038
Tng qut v s liu cc kt qu thc hin:
S trang:..S chng (phn):..
S bng s liu:.. S hnh v:
S ti liu tham kho: Phn mm s dng:..
Hin vt (sn phm phn mm, phn cng):
3. Nhng u im chnh ca n tt nghip:
4.1.Ni dung thc hin:.


4.2.Kt qu sn phm:..


4.3.Kh nng p dng:..


4.4.Hnh thc trnh by:


4. Nhng thiu st chnh ca n tt nghip:



5. ngh : c bo v B sung thm bo v Khng c bo v
6. nh gi chung: im s :./10; im ch:

Xc nhn ca B mn/ Khoa Gio vin hng dn


C S THNH PH H CH MINH c Lp T Do Hnh Phc

Thnh ph H Ch Minh, ngythng nm 200

PHIU NHN XT N TT NGHIP H I HC


(Dnh cho ngi c duyt Biu 3)
1. Tn ti tt nghip:

M ti:...
2. H tn sinh vin thc hin:Lp:
Ngy sinh:...MSSV:..
3. Tng qut v s liu cc kt qu thc hin:
S trang:..S chng (phn):
S bng s liu:.. S hnh v:
S ti liu tham kho: Phn mm s dng:..
Hin vt (sn phm phn mm, phn cng):....
4. Nhng u im chnh ca n tt nghip:
4.1.Ni dung thc hin:..

4.2.Kt qu sn phm:...

4.3.Kh nng p dng:

4.4.Hnh thc trnh by:.

5. Nhng thiu st chnh ca n tt nghip:


ngh : c bo v B sung thm bo v Khng c bo v

6. 3 cu hi sinh vin tr li trc Hi ng:


a) ..
..
b) ..
..
c) ..
..
1. nh gi chung: im s: ../10; im ch:.

Xc nhn ca B mn/ Khoa Gio vin c duyt


Li cm n
Sau nhng nm hc ti trng, em c hc v
tip thu nhiu kin thc mi t s ch bo tn tnh ca cc
Thy C, c sng trong tnh thng, tnh cm tru
mn ca bn b. y l khong thi gian ny ngha.
ti thc tp tt nghip nh du mt bc ngoc mi trong
cuc i em.

Em xin chn thnh cm n khoa cng ngh thng tin


II, Hc vin cng ngh bu chnh vin thng c s ti TP.
H Ch Minh to iu kin em hon thnh tt ti
thc tp tt nghip ny.

Em xin gi li cm n chn thnh n thy Ninh


Xun Hi , thy h tr cho em rt nhiu em hon thnh
ti thc tp tt nghip ny.

Em xin gi li cm n qu thy c trong hc vin tn


tnh ging dy, trang b cho ti nhng kin thc qu bu
trong sut qu trnh hc tp ti trng.

Mt ln na, em xin chn thnh cm n.

Sinh vin
V c Mnh
Mc Lc
Phn I : L thuyt
Chng I : Gii Thiu v nn tng Android ca Google2
1.1 Android l g ? 2
1.2 S ra i ca lin minh thit b cm tay m OHA.2
1.3 S pht trin ca Android...3
1.3.1 iu kin pht trin......3
1.3.2 Xu hng pht trin..5
Chng II : Tng quan cc thnh phn ca Android...7
1.1 Nhng c trng ca v kin trc ca Android......7
1.1.1 Nhng c trng ca Android.......7

1.1.2 Tng quan kin trc ca Android......7

1.2 Cc quy tc c bn ca ng dng trong Android...9

1.2.1 Khi qut cc thnh phn ng dng ca Android.......10

1.2.2 Activities v Tasks..14

1.2.3 Processes v Threads...16

1.2.4 Vng i ca Android.19


Chng III : Trnh by mt s cng c lp trnh trn Android.........30
1.1 Ci t b cng c Android SDK v plugin (ADT) cho Eclipse....30
1.2 Tng quan cc cng c c dng trong b Android SDK...30
1.2.1 Khi qut cc cng c trong Android SDK.....33
1.2.2 Android Emulator36
1.2.2.a Tng quan Emulator...37
1.2.2.b Khi ng v dng Emulator.37
1.2.2.c AVDs v Emulator.38
1.2.2.d iu khin Emulator..39
1.2.2.f Lm vic vi cc Disk Image ca Emulator..40
1.2.2.g Kt ni mng trn Emulator...43
1.2.2.h S dng Console Emulator47
1.2.2.i S dng cc Skin Emulator56
1.2.2.j Chy nhiu Emulator mt lc58
1.2.2.k Ci t ng dng trn Emulator.58
1.2.2.l M phng SD Card60
1.2.2.m Khc phc cc vn Emulator.60
1.2.2.n Gii hn cc kh nng m phng ca Emulator Android..60
1.3 Hello World , Android.60
Phn II: Thit k phn mm tm kim trn bn s ca Google........65
Chng I: Gii thiu v dch v v tr v bn trong android65
1.1 Dch v v tr.65
1.2 Th vin bn ngoi ca google maps..65
1.3 Cu trc d liu ca bn s trn google maps.67
Chng II: Chi tit cch ly d liu bn s ca google maps..67
2.1 ng k api key v hin map n gin vi mt MapActivity..67
2.2 Tm v tr v ng i trn google maps75
2.3 M phng GPS trn emulator 76
Phn kt lun72
Phn tham kho...73
Danh mc hnh v
S Hnh Tn Hnh Trang
Hnh 1.1 Logo i din cho Android 2
Hnh 1.2 Cc thnh phn trong lin minh OHA 3
Hnh 1.3 Mt s nn tng lp trnh di ng 5
Hnh 1.4 in thoi HTC Dream (G1) 6
Hnh 2.1 S cc thnh phn chnh ca h iu hnh Android 8
Hnh 2.2 S lp IBinder 18
Hnh 2.3 Biu minh ha vng i lp Activity 22
Hnh 2.4 Vng i ca Service 27
Hnh 3.1 Hp thoi Environment Variables 31
Hnh 3.2 Hp thoi New Project 61
Hnh 3.3 Hp thoi New Android Project 62
Hnh 3.4 Giao din thc thi ca ng dng Hello World 64
Hnh 3.5 Dng keytool ly m MD5 65
Hnh 3.6 To AVD cho d n 66
Hnh 3.7 To d n AppMapView 67
Hnh 3.8 Giao din thc thi ca AppMapView 71
Cc thut ng
Activitiiy Lp khi to giao din trn Android
Android Emulator B m phng ca Android
Broadcast receivers Cc my thu gi tin qung b
Caches B nh m
Callback Cuc gi li
Category Chuyn mc
Client Khch hang
Code M ngun ca ng dng
Console emulator M phng bng iu khin
Dalvik My o ca android
Dalvik executable C ch thc thi o
Disable V hiu kh nng
Disk image Mt Vng nh trn a cng c th cha d liu
Emulator Networking M phng mng ca android
Enable Kch hot mt kh nng
Ethernet Interface Giao din cng ngh mng LAN
Filter B lc
Firewall Tng La bo v
Flash Memory B nh my tnh khng kh bin (c th xa i v ghi li)
Foreground Mt trc
Gateway Address a ch mng ca cng
Global Ton cu
Guest Khch
Intent Lp thnh phn kch hot
Interface Loopback Giao din cc b o
Java Virtual Machine My o java
Lifecycle Vng i
Lifetime Thi gian hot ng
Multicast truyn thng (pht/chuyn) a hng
Netspeed Tc mng
Network redirections S dng cc ch dn mng
Port redirection Cng chuyn hng
Redirection Chuyn hng
Router Thit b cho php gi cc gi d liu dc theo mng
Service Mt lp ca android cung cp cc dch v.
Task Nhim v
Thread Tin trnh
Thread safe Mt phng thc lu gi cc thread khi c khi c nhiu thread
QEMU Mt cng c m ngun m c chc nng m phng v o ha
QWERT L kiu trnh by bn phm ph bin nht

T vit tt
3G Third-generation technology Cng ngh truyn thng th
h th ba
ADT Android Development Tools Mt cng c pht trin
android
AIDL Android Interface Description Mt cng c ca android sdk
Language
ARM Acorn RISC Machine Cu trc vi x l 32-bit
AVD Android Virtual Devices Thit b o cu hnh cho
nhng ng dng android
BSD BerKeley Software Distribution Tn ca mt h iu hnh dn
xut t UNIX
DNS Domain Name System H thng phn gii tn min
DPI Dot Per Inch n v ch s lng im trn
mt inch vung
EDGE Enhanced Data Rates for GSM Mt cng ngh di ng c
Evolution nng cp t GPRS
EGPRS Enhanced GPRS Mt cng ngh di ng c
nng cp t GPRS
GPRS General Packet Radio Service Dch v v tuyn gi tng hp
c pht trin trn nn tng
cng ngh thng tin di ng
ton cu (GSM)
GPS Global Positioning System H thng nh v ton cu
GSM Global System for Mobile H thng thng tin di ng
Communication ton cu th h th 2 (2G)
ICMP Internetwork Control Message Giao thc hot ng trn layer
Protocol 2 - Internetwork trong m
hnh TCP/IP
IDL Interactive Data Language Ngn ng tng tc d liu
IGMP Internet group management Giao thc qun l nhm
protocol Internet
J2ME Java 2 platform Micro Edition Nn tng java ,phin bn thu
nh ca Sun Microsystems
LBS Location Based Service Dch v da trn v tr
MIDlet Mobile Information Device Cc ng dng ca J2ME
Applet
Modem Modulator and Demodulator Thit b iu ch sng tn hiu
NAT Network Address Translation C ch dch i a ch mng
NDK Native Development Kit Gi pht trin cho Android h
tr ngn ng c/c++
NMEA National Marine Electronics nh ngha tng hp in t
Association v d liu
OHA Open Handset Alliance Lin minh thit b cm tay m
OSX Mac OS X Dng h iu hnh ha c
quyn ca Apple
Ping Packet Internet Grouper Cng c cho mng my tnh
s dng trn cc mng
TCP/IP
RPC Remote Procedure Call Mt m rng ca li gi hm
SDK Software development kit Gi phn mm pht trin
Tcp Transmission Control Protocol Giao thc iu khin truyn
vn
Udp User Datagram Protocol Mt giao thc truyn ti ct
li bn cnh TCP trong b
giao thc TCP/IP
UMTS Universal Mobile Mng di ng th h th 3
Telecommunications System
Li M u
Vi tc pht trin rt nhanh hin nay ca th trng di ng v mi mt nh
thng tin , thit b , ng dng v cc dch v dng nh vn cha tha mn ngi
s dng chnh v vy s ra i lin tc ca cc nn tng pht trin di ng l cn thit v
hp l , c bit l cc nn tng m ngun m s gip cho gim gi thnh cc thit b ,
ng dng thn thin hn vi ngi dng d pht trin v pht trin rt nhanh.Trong ti
ny s tm hiu v nn tng Android , mt nn tng m ang pht trin rt nhanh v n
mang y yu t thun li nh mnh m, thn thin, d pht trin v hon ton min
ph.
Chng I : Gii Thiu v nn tng Android ca google
1.1 Android l g ?

Hnh 1.1: Logo i din cho android


Nn tng android hay cn gi l h iu hnh android ca Google n bao gm mt
h iu hnh da trn m ngun m Linux OS (Kernel 2.6) ,(midware) phn mm trung
gian v cc ng dng c bn.
Chng ta c th hiu n 1 cch n gin android l h iu hnh m ngun m
dnh cho thit b cm tay.
Mt s h tr ca android cho cc thit b :
Mn hnh cm ng
3GWifire
Trnh duyt da trn webkit
Tin nhn (SMS) theo lung
nh dng MPEG-4, H.264, MP3, AACB tng tc ha 3D
1.2 S ra i ca lin minh thit b cm tay m OHA
D n xy dng nn tng ngun m cho nhng chic in thoi Android ca
Google tuy cn ang pht trin nhng to nn kh nhiu s quan tm v t m ca
nhng ngi yu thch cng ngh,nhng li n thi xung quanh nhng t v cng ngh
in thoi i loi Gphone hay Google Phone vi nhng chc nng him c xut hin
t cui nm 2004 tn kh nhiu giy mc ca gii bo ch, truyn thng.
Trong bui gii thiu v Android vo cui nm 2007, lnh o ca Google ng
Eric Schmidt cho bit Google lp t chc Open Handset Alliance (OHA mt t chc
a quc gia) bao gm 34 thnh vin vi cc cng ty hng u v cng ngh v di ng
ton cu nh Qualcomm, Intel, Motorola, Texas Instruments v LG Electronics, cc nh
mng nh T-Mobile, Sprint Nextel, NTT DoCoMo v China Mobile. nhm tp trung
xy dng mt chic in thoi di ng tt hn da trn h iu hnh Android mt h
iu hnh m ngun m dng cho tt c cc thit b cm tay.

Hnh 1.2: Cc thnh phn trong lin minh OHA


Vi nt v T chc Open Handset Alliance (OHA):OHA c xy dng t nhng
t chc pht trin in thoi di ng bao gm cc cng ty cung cp dch v in thoi di
ng, sn xut thit b cm tay, sn xut phn mm, dng c bn dn, v cc cng ty kinh
doanh. T chc ny ang m ca cho tt c cc cng ty khc nhau v ngi s dng c
th chn mt trong cc nh cung cp dch v tt hn thng qua OHA vi tnh nng sn c
ca h iu hnh m Android.
1.3 S hng pht trin ca android
1.3.1 iu kin pht trin
Trn bc ng to dng nn tng, pht trin th Google Android cng gp
khng t k ngng ng. Trong s , i th mnh nht ca n v phng din m
ngun m l LiMo. D rng c hai h iu hnh LiMo v Android u pht trin da trn
nhn Linux nhng chng khng ging nhau m c s khc bit rt ln. LiMo c h tr
t qu LiMo (qu ny c hnh thnh bi cc hng ln Motorola, NEC, NTT DoCoMo,
Orange, Panasonic, Samsung v Vodafone). Nn c hai nn tng u c nhng ng
trm ti chnh mnh lm i tc nhng Android c chnh Google ng ra pht trin
trong khi LiMo hon ton khng c mt cng ty c th no ng ra bo tr chnh.
Google gii thiu cho ngi dng b cng c pht trin phn mm Android
SDK 1.0. y l cng c gi lp thit b o trn my tnh pht trin ng dng vi cc
hm API h tr cho nhng ngi mi lp trnh trn cc thit b di ng s dng nn tng
Android thng qua ngn ng lp trnh Java,cng theo l s ra i ca android-market
ni cc lp trnh vin rao bn cc ng dng ca mnh , n cng ging nh app-store ca
apple .
Android c li th ln so vi a s h iu hnh dnh cho di ng ang pht trin
mnh trn th trng nh osx(iphone), symbian ,.. l n mt h iu hnh m v hon
ton min ph nn cc lp trnh vin rt d dnh pht trin n v gi thnh cng r hn c
v mt thit b ln ng dng.Mt im na cng rt quan trng l n c pht trin
v hu thun mnh t Google v lin minh OHA.
Cc ng dng ca android pht trin trn ngn ng lp trnh java c th k ra 3
im li th l :
Tn dng c tnh ph bin ca java i vi cc lp trnh vin v vic sn
xut cc thit b .
i th ln nht ca android trn th trng l OSX(Iphone) khng s dng
java
Cc ng dng vit ra s c gi thnh r hn.
Nhng s dng ngn ng java cng c im bt li l cc ng dng s chy chm
hn so ng dng chy trn nn c/c++.Chnh v vy google cho ra phin bn android
NDK mi 1.5 h tr lp trnh bng ngn ng l c/c++.
Hnh 1. 3 : Mt s nn tng lp trnh di ng

1.3.2 Xu hng pht trin


Hin ti android ang pht trin rt nhanh c v thit b ln ng dng :
V mt thit b th t cui nm 2008 HTC tung ra sn phm u tin chy h
iu hnh android c tn gi l Dream hay cn gi l G1 ,n na u nm
2009 th mt s cc nh sn xut ln tung ra cc sn phm s dng h iu
hnh android nh HTC-mobile, Samsung ,.. v c mt s khc ang chun b
tung ra sn phm ca mnh nh Motorola
Hnh 1.4 : HTC Dream (G1
V phn ng dng cng tng mt cch ng k trn android-market , nhm thc
y s pht trin ca android mi y google tung ra phin bn android-sdk 1.5
thay th cho phin bn android-sdk 1.1 c vi nhiu tnh nng ci tin hp dn
.Ngoi ra cn t chc cuc thi vit phn mm cho android trn ton th gii nh
gii ADC1 vo 17/3/2008 vi tng gi tr gii thng ln n 10 triu USD thu
ht hn 1700 sn phm tham d .S lng sn phm ot gii chim kh nhiu
lin quan n thng tin a l nh : BreakCrumbz(tm ng bng hnh
nh),Locale(ng dng t ng cu hnh thit b da theo v tr ta
lc),piggyback(ng dng ln lch l hnh hp ng xe).
C v nh dch v da trn v tr (Location Based Service) s l con t ch bi ca
Android cnh tranh vi iPhone. Khi c sn trong tay cc v kh cc mnh
nh Google Maps, Google Earth, th vic chin thng trn lnh vc LBS khng
phi l kh i vi Android. Bn cnh cng cn c nhiu dch v trc tuyn
min ph m google cung cp nh google docs,mail,google ladtitude...
Tip sau l phin bn android-sdk 1.6 vi tn m Donut ni bt trong cc chc
nng mi l cng c tm kim gip ngi dng in thoi c th tm kim thng tin
trong chnh my ca mnh, mt im na l Donut c chc nng nhn dng ch vit
tay ca ngi dng trn mn hnh cm ng ri chuyn thnh nhng k t chun nh
vy vic vit tin nhn d dng hn bao gi ht v mi y nht l bn 2.0 tn m
Eclair vi nhiu s thay i v mng x hi , giao din , b sdk mi cho cc nh lp
trnh. Trong mt vi nm ti ngoi in thoi di ng ra android cn hng n cc
thit b khc na nh netbook,laptop,PC,.N u c th thch ng hot ng .
Chng II : Tng quan cc thnh phn ca Android
1.1 Nhng c trng v kin trc ca Android
1.1.1 Nhng c trng ca android
Application framework (Nn tng ng dng ): h tr s dng li v thay th cc
thnh phn.
Dalvik virtual machine (My di ng o Dalvik ): Gi lp thit b di ng s dng
Android.
Integrated browser (Tch hp trnh duyt web) : cung cp m ngun m b pht
trin trnh duyt Webkit.
Optimized graphics (Tng tc ha ) : cung cp cc th vin ha 2D, 3D s
dng OpenGL ES 1.0 (ph thuc vo thit b phn cng).
SQLite : Cu trc d liu lu tr.
Media support (H tr a phng tin ): H tr phn ln cc nh dng m thanh,
hnh nh, video ph bin nh (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG,
GIF).
Cng ngh GSM GSM Telephony (ph thuc nn tng phn cng).
H tr Bluetooth, EDGE, 3G, and WiFi (ph thuc thit b phn cng).
H tr Camera, GPS, compass, and accelerometer (ph thuc thit b phn cng).
Rich development environment (Nhiu bin mi trng pht trin ) bao gm cc
thit b gi lp,Cng c bt li, kim sot b nh v n nh, v cc plugin ca
Eclipse IDE
1.1.2 Tng quan kin trc ca Android
Trc tin chng ta s xem s cc thnh phn chnh ca android gm :
Application , Application Framework , Libraries , Android Runtime , Linux Kernel.
Hnh 2.1 : S cc thnh phn chnh ca h iu hnh Android
Tng thnh phn chnh trong cu trc :
Application : android s cung cp mt tp hp ca cc ng dng li bao gm
emai client , chng trnh SMS , lp lch , bn , trnh duyt , danh b v
nhng ng dng khc na. Khi nh pht trin vit mt ng dng dnh cho
Android, anh ta thc hin cc on m trong mi trng Java. Sau , n s
c bin dch sang cc bytecode ca Java, tuy nhin thc thi c ng
dng ny trn Android th nh pht trin phi thc thi mt cng c c tn l dx.
y l cng c dng chuyn i bytecode sang mt dng gi l dex
bytecode. "Dex" l t vit tt ca "Dalvik executable" ng vai tr nh c ch
o thc thi cc ng dng Android. T gc nhn ca mt nh pht trin, Dalvik
trng ging nh my o Java (Java Virtual Machine) nhng nh cp
trn Dalvik thc thi dex bytecode ch khng phi Java bytecode. Hn th na
gi chng tn ti nhng im khc nhau v class file
Application Framework : cc lp trnh vin c y quyn truy cp cc khung
api s dng cc li ng dng . Kin trc ca nhng ng dng c thit k
n gin ha vic s sng li cc thnh phn.Bt k ng dng no cng c
th khai bo nhng kh nng ca n v nhng ng dng khc sau c th s
dng li nhng kh nng .Khi cc c ch ging nhau th s cho php ngi
s dng thay th cc thnh phn .
Nhng ng dng thit lp ln nhng dch v v h thng bao gm :
Content Provider - cung cp chc nng truy vn d liu gia cc ng dng
ca Android.
A Resource Manager - cung cp chc nng truy cp ti nguyn ngoi tr m
ngun .
A Notification Manager - cung cp chc nng ty chnh nhng cnh bo ln
mn hnh thanh status.
A Activity Manager - qun l vng i ca cc ng dng.
Libraries :
System C library Mt BSD thc thi ca h thng th vin C chun.
Media Libraries - da trn chun opencore ca packetvideos, th vin ny
h tr playback v recording ca nhng nh dng audio v video ph bin
,c c nh dnh nhng file nh tnh , bao gm cc nh dng : MPEG4,
H.264, MP3, AAC, AMR, JPG, and PNG.
Surface Manager qun l vic truy cp h thng ph v ghp nhng
ng ni ca nhng lp ha 2D v 3D t nhiu ng dng.
LibWebCore l mt cng c trnh duyt web hin i m nhng kh nng
ca n c c trnh duyt android v web nhng.
SGL cng c ha 2D nm pha di.
3D Libraries Mt s b sung da trn OpenGL ES 1.0 APIs , th vin ny
s dng c phn cng gia tc 3D.
FreeType bin i nhng font v nh bitmap.
SQLite cng c c s d liu mnh m v nh c dng cho tt c cc
ng dng.
Anroid Runtime : Android bao gm tp hp cc th vin li , n cung cp hu
ht cc chc nng sn c trong ngn ng java.
Linux kernel : Android da vo dch v h thng nhn ca phin bn linux 2.6
nh bo mt ,qun l b nh,qun l quy trnh ,ngn xp mng v cc kiu
driver.Nhn ny cng hot ng nh lp tru tng gia phn cng v phn
cn li ca ngn xp phn mm.
1.2 Cc quy tc c bn ca ng dng trong Android
Cc ng dng Android c vit bng cc ngn ng lp trnh Java. Vic bin son
m Java - cng vi bt k d liu no v cc tp tin theo yu cu ca ng dng c
gi li bi cng c appt trong gi phn mm android, mt file lu tr c nh du bi
mt file c ui *. Apk. file ny l mt phng tin truyn ti cho cc ng dng v ci t
n trn cc thit b di ng, l file ngi dng ti v cc thit b ca h. Tt c cc
m trong mt file *. Apk c coi l mt trong nhng ng dng
Theo mc nh, tt c cc ng dng chy trong x l Linux ca ring ca n.
Android bt u tin trnh khi c mt on code ca ng dng cn phi c
thc hin, v tin trnh tt khi n khng cn cn thit, v ngun ti nguyn h
thng c yu cu cho cc ng dng khc.
Mi tin trnh ring ca chng c my o Java (VM) ring, do , cc on
code ng dng chy tch bit khi cc code ca tt c cc ng dng khc.
Theo mc nh, mi ng dng u c cp mt User ID Linux duy nht.
Quyn c thit lp cho cc file ca ng dng ch c nhn thy bi user
.
C th sp xp cho hai ng dng chia s cng mt ID ngi dng, trong c
trng hp h s c th xem cc file ca nhau. bo tn ngun ti nguyn h thng, cc
ng dng c cng ID cng c th sp xp chy trong cng mt tin trnh Linux, chia s
cng mt VM.
1.2.1 Khi qut cc thnh phn ng dng ca android
Mt trong nhng c trng chnh ca android l mt ng dng c th s dng cc
thnh phn ca nhng ng dng khc. V d, nu nhu cu ng dng ca bn hin th
mt danh sch cc di chuyn hnh nh v cc ng dng khc pht trin mt thanh cun
ph hp v to cho n c sn sng i vi nhng ngi khc, bn c th gi thanh
cun lm cng vic, thay v bn phi t pht trin ca ring bn.Cc on code ca bn
khng kt hp cc on code ca cc ng dng khc hoc lin kt n n, thay vo , n
n gin ch khi ng cc on code ca cc ng dng khc khi cn s dng.
lm vic ny, h thng phi c kh nng bt u tin trnh ng dng khi bt k
phn no ca n cn s dng, v khi to cc i tng Java cho phn . V vy, khng
ging nh cc ng dng trn hu ht cc h thng khc, cc ng dng Android khng c
mt mc nhp cho tt c mi th trong cc ng dng (khng c hm main()). Thay vo
, chng c thnh phn ch yu l h thng c th khi to v chy khi cn thit. C bn
loi thnh phn:
Activities(android.app.Activity) - y l lp khi to giao din ng dng ni b
trn nn Android tng t nh MIDlet trong J2ME.Mt hot ng th hin mt
hnh nh giao din ngi dng cho mt s c gng tp trung ngi s dng
c th thc hin. V d, mt activitiy c th trnh by mt danh sch cc mc
ngi dng c th la chn hoc n c th hin th hnh nh cng vi cc ch
thich. Mt tin nhn vn bn ng dng c th c mt activity hin th mt danh
sch cc a ch lin lc gi tin nhn n mt activity th hai vit tin nhn
ny ng vi cc a ch lin lc, v cc activity khc xem xt li cc tin nhn
c hoc thay i ci t. Mc d chng lm vic cng nhau to thnh mt
giao din ngi dng lin nhau nhng mi activity c lp vi nhng activity
khc. Mi activity u trin khai thc hin nh l mt lp ph ca lp activity
c bn.
Service(android.app.Service): cung cp cc dch v lin quan n
client/service. Mt Service s chy ngm bn di, sau cc client (Activity)
s kt ni v truy xut cc hm trn dch thng qua Interface class.Mt service
khng c trc quan giao din ngi s dng nhng s chy ngm trong nn ca
giao din ngi dng .
Broadcast receiver (android.content.BroadcastReceiver): y l mt ng dng
chy ngm dng dc v cp nht thng tin trn UI, vi d nh cp nht s
thay i gi, pin...
Mt ci my thu broadcast s nhn v phn hi li nhng thng bo
broadcast. C rt nhiu broadcast bt ngun t code h thng nh broadcast
thng bo thay i mi gi, pin thp
Content Provider : cung cp chc nng truy vn d liu gia cc ng dng ca
Android.Mt content provider ch dn thit lp c s d liu ca mt ng dng
sn sng cho cc ng dng khc.d liu ny c th c lu trong file h thng
trong database ca SQLite. Bt c khi no c mt yu cu cn c x l bi
mt thnh phn, Android bo m rng cc tin trnh ng dng ca cc thnh
phn s c chy, n bt u nu cn thit v lun gi cho cc thnh phn
sn sng .
Thnh phn kch hot intents : Cc content provider c kch hot khi c
mt yu cu t mt ContentResolver . Ba thnh phn khc l activities,broadcast
v receivers c kch hot bi thng bo khng ng b gi t intents . Mt
intent l mt i tng m n gi nhng ni dung ca thng bo i vi cc
activity v service, i hi tn ca chng v nhng ch dn URI ca d liu thc
hin theo. V d, n c th truyn ti mt yu cu cho mt activity trnh by mt
hnh nh cho ngi s dng hoc cho php ngi dng chnh sa mt s vn bn.
i vi cc my thu broadcast , cc tn ca i tng Intent ang hot ng s
c cng b. V d, n c th thng bo cho ai quan tm rng cc my nh
c bm nt.
C Nhng phng thc ring cho tng kiu thnh phn kch hot :
Mt activity l c pht ng thng qua mt i tng intent l
Context.startActivity() hoc Activity.startActivityForResult.Nhng p ng
ca activity c th c quan st t nhng intent u m n c th c gi bi
phng thc getIntent().Android gi cc phng thc getIntent() ca activity
chuyn qua bt k intent k tip no.
Mt activity thng bt u ci k tip n.Nu ci kt qu mong mun c
gi tr li t hnh ng bt u ca n, n s gi startActivityForResult() thay
v startActivity().V d nu n bt u mt activity cho php ngi dng la
chn mt hnh nh,n c th mong i kt qu c tr li l nhng hnh nh
chn.Kt qu c tr li l mt i tng intent m n thng qua gi
phng thc onActivityResult() ca activity
Mt service c bt u thng qua i tng Content.startService(). Android
gi phng thc onStart() ca service v chuyn n qua mt i tng intent
Mt ng dng c th khi ng broadcast bng mt i tng intent thng qua
cc phng thc nh :
Context.sendBroadcast(),Context.sendOrderedBroadcast() v
Context.sendStickyBroadcast trong bt k bin no ca chng.Android
cung cp intent ti tt c cc broadcast nhn c m chng quan tm
bng cch gi phng thc onReceive().
Tt cc thnh phn : Mt content provider ang hot ng trong khi ch p
ng 1 yu cu t 1 ContentResolver , mt broadcast nhn kch hot ch khi p
ng mt thng bo broadcast khc .Nh vy r rng ta khng cn tt cc thnh
phn ny.
Android c cc phng thc tt cc dch v v cc hot ng trong mt cch
trt t :
Mt activity c th tt bng cch gi phng thc finish() ca n.Mt trong
nhng activity c th tt cc activity khc (n bt u vi
startActivityForResult()) l finishActivity().
Mt service c th c ngng li khi gi phng thc stopSelf() ca n hoc
gi Context.stopService().
Cc thnh phn c th c tt bi h thng khi chng khng cn s dng hoc
khi android cn ti thit b nh c thm nhng hot ng khc.
File Manifest : Trc khi android c th khi ng ng dng n phi bit cc
thnh phn ang c trong ng dng, v vy ng dng s khai bo cc thnh phn
trong file Manifest hin c ca gi vo trong gi ng dng android , file .apk
lu gi cc on code, ti nguyn, tp tin ca ng dng.
File manifest c cu trc l mt file xml lun c t tn l AndroidManifest.xml
cho tt c cc ng dng. Trong vic khai bo cc thnh phn , khi t tn bt k
mt th vin no ca ng dng phi da vo lin kt (bn cch th vin android
mc nh) v xc nh quyn truy cp bt k ng dng no d kin c cp php.
Nhim v chnh ca file manifest l thng bo cc thnh phn ca ng dng
android.
V d mt activity c th c khai bo nh sau :
<?xml version="1.0" encoding="utf-8"?>

<manifest . . . >

<application . . . >

<activity android:name="com.example.project.FreneticActivity"

android:icon="@drawable/small_pic.png"

android:label="@string/freneticLabel"
... >

</activity>

...

</application>

</manifest>

t tn lp ph ca activity chng thc hin hot ng ca activity.Cc icon v


label thuc tnh tr n file ti nguyn(resource) cha cc icon v label c th hin
th cho ngi s dng activity ny.
Cc thnh phn khc c khai bo mt cch tng t nh : <service> cho cc
phn t ca service , <receive> cho cc phn t ca broadcast receivers v
<provider> cho cc phn t ca content provider. Activities, Services, Content
Providers nu chng khng c khai bo trong manifest th s khng hin trong
h thng v khng bao gi c chy.Tuy nhin i vi broadcast receivers c th
c khai bo trong manifest hoc cng c th c to ra trong on code t
ng(nh i tng broadcast receivers) v ng k vi h thng bng cch gi
Context.registerReceiver().
Intent Filters(Cc b lc Intent) : Mt i tng intent nu c th nhm r rng
tn ca mt thnh phn android s tm thnh phn (da trn vic khai bo trong
file manifest) v kch hot n cn nu khng th android phi nh v mt thnh
phn tt nht c th p ng cho i tng intent ,bng cch so snh cc i
tng intent vo cc mc tiu tim nng ca cc b lc intent. Di y l mt m
rng ca cc v d trc cho bit thm v intent filters :
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel"
... >
<intent-filter . . . >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter . . . >
<action android:name="com.example.project.BOUNCE" />
<data android:type="image/jpeg" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
...
</application>
</manifest>
Filter u tin l kt hp ca action android.intent.action.MAIN v
category android.intent.category.LAUNCHER.
Filter th hai khai bo mt hnh ng ca activity c th c thc hin
trn mt kiu c bit ca d liu.
broadcast receiver c to ra v ng k trong code th intent filter
phi c to ra trc tip t i tng IntentFilter. Tt c cc thnh phn
khc(activity , service,content provider) c thit lp trong manifest.
1.2.2 Activitiies v Tasks
Nh nu trn , mt activity c th khi ng mt activity khc ,bao gm c
vic nh ngha mt ng dng khc.V d bn mun hin th cho ngi dng xem mt bn
ng ph ca mt s a im.C sn activity lm vic v vy tt c vic bn cn
lm l t i tng intent vi thng tin i hi v chuyn n vo startActivity().Bn
s hin th cho ngi xem , khi ngi s dng bm vo phm back th activity ca bn s
hin ln mn hnh. Android duy tr s tri nghim ca ngi dng ny bng cch gi cho
c hai hot ng trong cng mt task.
Mi task l mt stack ca cc activity, khng phi l lp hay cc phn t trong file
manifest, nh vy khng c cch no thit lp gi tr cho cc task c lp ca cc activity
.
Cc hnh vi c m t l ch cn mc nh cc hnh vi cho activity v task.
Nhng s cn c nhiu cch sa i hu ht tt c mi kha cnh ca n. S kt hp
cc activity vi task, v cc hnh vi ca mt activity trong mt task, c kim sot bi
s tng tc gia cc thit lp c trong i tng intent bt u cc activity v cc
thuc tnh thit lp trong activity ca cc phn t ca <activity> trong file manifest.
V vn ny, cc c Intent chnh l:
FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_RESET_TASK_IF_NEEDED
FLAG_ACTIVITY_SINGLE_TOP
Cc thuc tnh chnh c <activity> l :
taskAffinity
launch Mode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
Affinities and new tasks : Theo mc nh tt c cc activity trong ng dng u
c mt affinity khc nhau cho mi activity.
Cc ch khi ng : C 4 ch khi ng trong ch standard l ch
mc nh.
"standard"
"singleTop"
"singleTask"
"singleInstance"
Lm sch stack : Nu ngi dng b task trong mt thi gian di h thng s lm
sch task trong tt c cc activity tr activity gc. tng ny l sau mt thi
gian ngi dng c kh nng b di nhng g v ang lm trc khi tr v cng
vic no bt u mi. C vi thuc tnh ca activity m c th c s dng
iu khin hnh vi v sa i n :
Thuc tnh alwaysRetainTaskState Nu thuc tnh ny thit lp l true
gc activity ca mt task , mc nh m t cc hnh vi khng xy ra.Task gi li
tt c cc activity trong stack ca n thm ch sau mt thi gian di
Thuc tnh clearTaskOnLaunch - Nu thuc tnh ny thit lp l true
gc activity ca mt task ,stack ny c xa xung activity gc.y l cc i
lp ca alwaysRetainTaskState . Ngi dng lun tr v trng thi ban u ca
task thm ch sau mt s vng mt tc thi.
Thuc tnh finishOnTaskLaunch ging nh clearTaskOnLaunch nhng n
vn hnh trn mt activity n , khng phi l mt task ton vn v n c th lm
cho bt k mt activity no ri khi stack bao gm c activity gc .Khi thit lp l
true,activity ny vn cn mt phn ca task cho phin hin ti.Nu ngi
dng b n i v sau tr li task , th thuc tnh ny ko cn hin hu.
S bt u cc task : Mt activity c thit lp nh l mt mc im cho mt
task bng cch cho n mt intent filter vi "android.intent.action.MAIN" c xc
nh nh l hnh ng v "android.intent.category.LAUNCHER" nh l xc nh
loi
Kh nng th 2 rt quan trng : ngi dng phi c kh nng b li mt task
v sau tr li sau. V l do ny, hai ch khi ng lun lun nh du cc
activity nh l khi u mt task, "singleTask" v "singleInstance",ch nn s dng
cc activity khi c mt filter MAIN v launcher. V d, nhng g c th xy ra nu
thiu filter l: Mt Intent khi ng mt "singleTask" activity, bt u mt task
mi, v ngi s dng dnh mt cht thi gian lm vic vi task . Ngi s
dng sau bm phm HOME. Task c sp xp pha sau v b lm m i trn
mn hnh.
Mt kh khn tng t ch c FLAG_ACTIVITY_NEW_TASK. Nu
c ny lm cho mt activity bt u mt task mi v ngi s dng bm phm
HOME b li n, phi c mt s cch thc cho ngi s dng nh hng
tr li cho n mt ln na. Mt s n v (chng hn nh ngi qun l thng bo)
lun lun bt u cc activity mt task bn ngoi, chng lun lun t
FLAG_ACTIVITY_NEW_TASK trong cc intent m chuyn vo startActivity
(). Nu bn c mt activity c th ko theo c ca mt thc th bn ngoi m c
th s dng c ny.
i vi nhng trng hp bn khng mun ngi s dng c th quay tr
li mt hot ng, thit lp cc phn t <activity> ca finishOnTaskLaunch l
"true"th s xa sch cc stack trc .
1.2.3 Processes v threads
Khi cc thnh phn mt chc nng ng dng chy ln u tin, Android bt
u mt tin trnh Linux cho n vi mt thread n. Mc nh, tt c cc thnh
phn ca ng dng chy trong process v thread.
Tuy nhin, chng ta c th sp xp cho cc chc nng chy trong cc tin
trnh khc i, v c th sinh ra thm cc thread cho bt k tin trnh no.
Processes
Tin trnh cha cc thnh phn chy c iu khin bi cc tp tin r rng.
Thnh phn-<activity>, <servive>,<receiver> v <provider> mi thnh phn c
mt thuc tnh tin trnh c th ch nh mt thnh phn ang chy. Cc thuc tnh
ny c th thit lp mi thnh phn chy trong tin trnh ca chnh n, hoc mt
vi thnh phn chia s mt tin trnh trong khi cc thnh phn khc th khng.
chng cng c th c thit lp cc thnh phn ca cc ng dng cc chy trong
cng mt tin trnh-cung cp ng dng chia s Linux user ID ging nhau v c
thit k bi cng tc gi. Thnh phn <application> cng c tin trnh c trng,
cho ci t gi tr mc nh chp nhn tt c cc thnh phn.
Android c th quyt nh tt tin trnh ti mt s im , khi b nh b chm
v yu cu cc tin trnh khc . Cc thnh phn ng dng ang chy trong tin
trnh b hy. Mt qu trnh c khi ng li cho nhng thnh phn lm vic li
mt ln na.
Khi quyt nh chm dt tin trnh, Android c nh hng tng i quan
trng cho ngi dng. V d, n sn sng shut down mt process vi cc hot ng
m khng cn nhn thy trn mn hnh hn mt tin trnh vi cc hot ng nhn
thy c. Quyt nh c hoc khng chm dt mt tin trnh, do , ph thuc
vo cc thnh phn hot ng trong qu trnh.
Threads
Mc d bn c th hn ch ng dng trong mt tin trnh, s c iu tng
t khi cn sinh ra thread s dng. Bt c iu g khng hon thnh nhanh chng
s c a vo mt thread khc.
Thread c to ra trong code s dng chun d n Java Thread. Android
cung cp mt s lng cc lp qun l thread-Looper cho chy lp vng thng
ip bn trong mt thread, Handler x l tin nhn v lp HandlerThread thit
lp thread vi mt thng ip lp vng.
Cc th tc cuc gi t xa
Android c mt c ch th tc cc cuc gi t xa(RPCss)-ni mt phung
thc c gi cc b, nhng thc hin t xa ( trong mt tin trnh khc ), vi bt
k kt qu tr v cho ngi gi. iu ny i hi phng thc gi v tt c cc
cuc gi ca n tham d h iu hnh c th hiu c, n chuyn t t x l cc
b v khng gian a ch thnh x l t xa v khng gian a ch. Gi tr tr v phi
c chuyn sang v tr i din. Android cung cp tt c code lm vic .
Mt RPC interface c th ch bao gm c phng thc. Tt c c thc
hin ng b, thm ch nu khng c tr v gi tr.
Trong tm tt, cc c ch hot ng nh sau: Bn mun bt u bng cch
khai bo cc rpc interface m bn mun trin khai s dng IDL n. Cc cng c
AIDL to ra mt interface java nh ngha phi sn c c x l cc b v t xa.N
gm 2 lp bn trong v c hin th di s nh sau:

Hnh 2.2 : S lp IBinder


Bn trong cc lp c tt c cc m s cn thit qun l t xa th tc cc
cuc gi cho cc interface vi cc IDL. C hai bn ,trong cc lp thc thi ca
IBinder interface. Mt trong s c s dng cc b v bn trong ca h
thng; code bn vit c th b qua n. Mt ci khc, c gi l stub, m rng lp
Binder . Ngoi vic code bn trong ca IPC effectuating cc cuc gi, n cha cc
khai bo cho cc phng thc trong interface rpc bn khai bo. Bn s cho lp
ph stub thc thi nhng phng thc , nh c ch ra trong biu .
Thng thng, qu trnh xa s c qun l bi mt dch v (v mt dch
v c th thng bo cho h thng v qu trnh v cc kt ni vo cc qu trnh
khc). N s c c hai giao din tp tin c to ra bi cc cng c aidl v lp ph
stub trin khai thc hin cc phng php rpc. Khch hng ca cc dch v s ch
c file giao din c to ra bi cc cng c aidl.
Thit lp mt kt ni gia mt service v clients ca service : clients s
thc thi phng thc onServiceConnected() and onServiceDisconnected v th
chng c th c thng bo khi kt ni thnh cng ti remote service c thit
lp v khi n b qua . Chng sau s gi bindService() thit lp kt ni.
Phng thc onBind() ca service s thc thi chp nhn hoc loi b,
ph thuc vo intent n nhn c (cc intent c chuyn ti bindService()).Nu
kt ni ny c chp nhn , n s tr v trng hp ca lp ph stub.
Cc phng thc thread-safe
Trong mt vi bi cnh, cc bn thc hin cc phng php c th nhiu
hn mt thread v do phi c ghi vo c thread safe.
Nt chnh phng thc ny c th c gi t xa - nh trong c ch rpc
tho lun trong phn trc. Khi mt cuc gi trn mt phng thc trin khai
trong mt i tng IBinder bt u trong cng mt tin trnh nh l IBinder, cc
phng thc c thc hin ti thread ngi gi. Tuy nhin, khi ngun gc cc
cuc gi khc trong tin trnh khc, cc phng thc c thc hin trong mt
chui la chn t mt di thread m Android duy tr trong cng mt qu trnh nh
l IBinder; n khng phi thc hin trong thread chnh ca tin trnh. T cc dch
v c th c nhiu hn mt khch hng, nhiu hn mt di thread c th tham gia
vo cng mt phng thc IBinder cng mt lc.Do , c trin khai c
thread safe.
Tng t, mt nh cung cp ni dung c th nhn c d liu yu cu
bt ngun trong tin trnh khc. Mc d ContentResolver v cc lp
ContentProvider n chi tit v cch thc qun l truyn thng lin qu trnh nh
th no,phng thc ContentProvider p ng nhng yu cu - cc phng thc
truy vn (), chn (), xa (), cp nht (), v getType () - c gi l t mt di
thread trong ni dung ca nh cung cp tin trnh, khng phi thread chnh ca tin
trnh. T nhng phng thc ny c th c gi l t bt k thread no cng mt
lc, chng cng phi c trin khai thc hin c safe thread.
1.2.4 Vng i ca android
Cc thnh phn ng dng c mt lifecycle - bt u khi Android khi to chng
p ng intents thng qua mt kt thc khi cc trng c tiu hu. i khi chng c
th c hot ng , khng hot ng hoc trong trng hp cc hot ng hin th cho
ngi s dng hoc v hnh. Phn ny bn v cc lifecycle , cc activity, service,
broadcast receiver bao gm c trng thi c th xy ra trong khong thi gian hot
ng ca chng, cc phng php thng bo cho bn v chuyn tip gia cc trng thi
v hiu ng ca cc trng thi , v kh nng dn x l ,chng c th c chm dt v
tiu hu.
Activity lifecycle
Mt activity c 3 trng thi c bn sau :
Trng thi hot ng khi n c kch hot hoc mt trc mn hnh(
top ca stack hin ti). l activity trng tm ca cc hnh ng ngi
dng.
Trng thi tm dng nu n mt trng tm nhng vn hin th user.
l activity khc nh la pha trn ca n v activity khng bao trm
ton b mn hnh, do , mt s b tm dng activity c th hin th
thng qua. Mt activity tm dng l hon ton cn sng (n duy tr tt
c cc trng thi, cc thng tin v vn gn vi ca s qun l), nhng c
th b tt bi h thng trong tnh hung b nh xung cc thp.
Trng thi ngng li nu nh n hon ton b che m bi cc activity
khc. N vn cn gi li tt c cc trng thi v cc b phn thng tin.
Tuy nhin, n khng cn hin th cho ngi dng, do cc ca s b n
v n s thng b tt bi b nh h thng khi cn s dng ni khc.
Nu mt activity dng tm thi hoc dng hn, h thng c th ngt n ra
t b nh hoc yu cu n kt thc (gi phng thc finish ()). Khi n hin th mt
ln na cho user, n phi hon ton khi ng li v phc hi li trng thi c.
Mt activity chuyn t trng thi ny sang trng thi khc, n s c thay
i bng cch gi cc phng thc c bo v di :
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
Tt c cc phng thc ny gip bn c th ghi ln lm cng vic
thch hp khi c s thay i. Tt c cc hot ng phi trin khai onCreate()
thit lp khi to khi i tng khi to ln u tin. Cng c th trin khai
onPause() trao i d kiu thay i v mc khc chun b ngng tng tc vi
user.

Gi lp supperclass
Mt trin khai bt k phng thc lifecycle activity no lun lun ln u
tin gi kiu superclass. V d:
protected void onPause() {
super.onPause();
...
}
7 phng thc di y nh ngha ton b lifecycle ca mt activity. C ba
vng lp lng nhau m bn c th gim st thc hin chung :
Ton b thi gian sng ca mt activity s xy ra gia ln gi u tin gi
n onCreate () cho n mt ln gi kt thc gi n onDestroy (). Mt hot
ng thc hin tt c cc thit lp ban u ca trng thi "Global" trong
onCreate (), v gii thot tt c cc ti nguyn trong onDestroy (). V d,
nu n c mt thread chy pha sau ti d liu t mng, n c th to ra
thread trong onCreate () v sau ngng trong onDestroy ().
Thi gian sng thy c ca mt activity s xy ra gia mt cuc gi n
onStart () tng ng cho n khi mt cuc gi n onStop (). Trong thi
gian ny, ngi s dng c th xem cc hot ng trn mn hnh, tuy nhin
n c th khng c trong foreground v tng tc vi ngi s dng.
Gia hai phng php ny, bn c th duy tr c cc ti nguyn cn thit
hin th cc hot ng cho ngi dng. V d, bn c th ng k mt
BroadcastReceiver trong onStart () gim st cc thay i m tc ng ca
UI, v unregister n trong onStop () khi ngi s dng c th khng cn
nhn thy nhng g bn ang hin th. Cc phng thc onStart() v onStop
() c th c gi nhiu ln, nh l hot ng lun phin gia hin v n
vi ngi s dng.
Cc foreground lifetime ca mt activity s xy ra gia mt cuc gi n
onResume () tng ng cho n khi mt cuc gi n onPause (). Trong
thi gian ny, hot ng ny l pha trc ca tt c cc hot ng khc
trn mn hnh v c tng tc vi ngi s dng. Mt hot ng thng
xuyn c th chuyn i gia resume v pause - v d, onPause () c gi
l khi thit b i vo trng thi ng hoc khi mt activity mi c bt u,
onResume () khi activity result hoc mt intent mi c sinh ra. V vy,
code trong hai phng thc ny kh nh.
Di y l nhng biu minh ha cc lp vng v cc ng dn mt
activity c th mt gia cc trng thi. Cc hnh ovals ln l trng thi chnh m
activity c th xy ra, hnh ch nht vung gc i din cho gi cc phng
thc phn hi c th trin khai thc hin khi cc activity chuyn gia cc
trng thi.
Hnh 2.3 : Biu minh ha vng i ca activity
Bng sau m t chi tit cc phng thc v v tr ca n trong ton b lifecycle ca
activity:
Phng Thc M T Tt? K Tip
onCreate() c gi khi lp activity u tin No onStart()
c to ra. Dng thit lp giao
Phng Thc M T Tt? K Tip
tc c bn to views,kt ni d
liu ti danh sch.Phng thc ny
c chuyn qua cho gi i
tng ca trng thi activity trc
, nu trng thi c nm bt
th (xem Saving Activity State, ).
Lun c onStart theo sau.
c gi khi ng dng chuyn
sang onStop(), nhng mun
onRestart() No onStart()
khi ng li bng onStart.
Lun c theo sau bi onStart()
onResume()
hm ny c gi khi lp ng
onStart() No or
dng xut hin trn mn hnh.
onStop()
c gi sau khi onStart() hoc
onResume() No onPause()
ngi dng focus ng dng.
hm c gi khi h thng ang
focus n 1 activity trc .
onResume()
c onResume() theo sau nu
onPause() Yes or
activity tr v quay tr v trc,
onStop()
hoc onStop() nu n n vi ngi
dng.
hm c gi khi mt activity
khc c khi ng v focus.
c onRestart() theo nu activity onRestart()
onStop() ny tng tc tr li vi ngi Yes or
dng. onDestroy()
c theo bi onDestroy() nu
activity ny b i.
hm c gi trc khi ng dng
thot bng vic gi hm
Activity.Finish().
c gi trc khi activity no
b hy . y l li gi cui cng
m activity nhn c . N c th
onDestroy() Yes nothing
c gi c hai khi activity kt
thc hoc v h thng tm thi b
hy b ,trng hp ny activity ct
gi khng gian.Bn c th phn
bit gia hai kch bn vi phng
thc isFinishing()
Lu ct Tt? trong bng trn. N cho bit c hay khng h thng c th tt tin
trnh lu tr cc activity bt c lc no sau khi phng thc tr v, m khng cn thc
hin nhng dng khc ca code activity . Ba phng thc (onPause (), onStop (), v
onDestroy ()) c nh du "Yes". Bi v onPause () l u tin ca ba phng thc,
ch l mt bo m c gi khi tin trnh ny b tt - onStop () v onDestroy () c th
khng . V th, nn s dng onPause () vit d liu (chng hn nh ngi s dng sa
i) lu tr.
Phng thc c nh du "NO" trong ct Tt? bo v qu trnh lu tr cc
activity khng b tt k t thi im chng c gi.
Mt activity m khng dng k thut "tt" theo nh ngha ny c th vn c tt
bi h thng - nhng c th s ch xy ra trong hon cnh kh khn khi khng c ti
nguyn khc.
Saving activity state(Ct gi trng thi activity)
Khi h thng ch khng phi l ngi s dng shut down mt activity bo tn
b nh, ngi s dng mong i tr v activity v tm thy n trong cc trng thi trc.
nm bt trng thi trc khi activity ny b tt, bn c th thc hin mt
phng thc onSaveInstanceState () cho cc hot ng. Android gi phng thc ny
trc khi thc hin cc activity d b tn thng do b tiu hu - c ngha l, trc khi
onPause() c gi. N chuyn qua phng thc i tng Bundle m bn c th
ghi li trng thi chc nng ca hot ng nh l nhng cp gi tr tn. Khi bt u hot
ng li mt ln na, Bundle chuyn qua c hai n onCreate () v ti mt phng thc
c gi sau onStart (), onRestoreInstanceState (), cho mt hoc c hai trong s chng
c th ti to li trng thi.
Khng ging nh onPause () v cc phng thc tho lun trc,
onSaveInstanceState () v onRestoreInstanceState () khng phi l phng thc lifecycle.
N khng phi lun lun c gi . V d, cc cuc gi Android onSaveInstanceState ()
trc khi hot ng tr nn d b tn thng do b tiu dit bi h thng, nhng khng
c gi khi thc s b tiu dit bi hnh ng ngi s dng (nh l nhn phm BACK).
Trong trng hp , ngi s dng s khng mong i tr li hot ng, do ,
khng c l do chnh ng lu cc trng thi.
Bi v onSaveInstanceState () khng phi lc no cng c gi, bn nn s dng
n ch ghi li cc trng thi tm thi ca cc hot ng, khng phi lu d liu. S
dng onPause () cho mc ch thay th.
Coordinating activities(Phi hp cc activity)
Khi mt activity bt u mt trong nhng activity khc. Mt ci tm ngng v c
th dng li, trong khi mt ci khc khi ng. Thnh thong, bn c th cn phi phi
hp cc activity ny, vi activity khc
Th t ca lifecycle :
1. Cc activity hin ti ca phng thc onPause () c gi

2. Tip theo, bt u cc activity ca onCreate (), onStart (), v onResume ()


c gi l phng thc trong chui.

3. Sau , nu nh bt u activity khng cn nhn thy trn mn hnh, cc


phng thc onStop () c gi.

Service lifecycle
Mt dch v c th c s dng trong hai cch sau:
C th bt u v c cho php chy cho n khi mt ai dng n li
hoc t n dng li. Trong ch ny, n bt u bng cch gi
Context.startService () v dng li bng cch gi Context.stopService (). N c
th dng li chnh n bng cch gi Service.stopSelf() hoc
Service.stopSelfResult (). Ch c gi stopService() l ngn chn dch v
ny, bt k c bao nhiu ln startService () c gi.
N c th c lp trnh vn hnh bng cch s dng mt interface m n nh
ngha. Client thit lp mt kt ni cho cc i tng Dch v v s dng kt
ni cuc gi vo cc dch v. Kt ni c thit lp bng cch gi
Context.bindService(), v c ng li bng cch gi Context.unbindService
(). Nhiu client c th rng buc vo cng mt dch v. Nu cc dch v cha
c a ra, bindService() c th ty chn khi chy n.
Hai ch khng hon ton ring bit. Bn c th kt ni vo mt dch v
c bt u vi startService(). V d, mt dch v m nhc c th c bt u
bng cch gi startService() vi mt i tng nhn dng m nhc chi. Ch sau
ny, c th l khi ngi dng mun thc hin mt s kim sot i vi my nghe
nhc hoc nhn c thng tin v cc bi ht hin nay, mt hot ng thit lp mt
kt ni vo dch v bng cch gi bindService(). Trong trng hp nh th ny,
stopService() s khng thc s ngng cc dch v cho n khi cc rng buc cui
cng c ng li.
Ging nh mt activity, mt service c phng thc lifecycle c th trin khai
vic gim st cc thay i cc trng thi. Nhng n ang c t hn cc phng thc
hot ng - ch c ba - v chng l public, khng c bo v:
void onCreate()
void onStart(Intent intent)
void onDestroy()
Bng cch trin khai cc phng thc ny, ban c th gim st 2 vng lp lng
nhau ca lifetime h thng:
Entire lifetime(ton b thi gian sng) ca mt dch v s xy ra gia thi
gian onCreate () c gi v thi gian onDestroy() tr v. Ging nh mt
activity, mt dch v thit lp ban u trong onCreate (), v pht hnh tt c
ti nguyn cn li trong onDestroy (). V d, mt dch v nghe nhc c th
to ra cc thread, ni m nhc s c pht trong onCreate (), v sau
ngng bi trong onDestroy ().
Active lifetime(thi gian hot ng thc s) ca mt dch v bt u vi gi
n onStart (). Phng thc ny l t chc nh cc i tng c
thng qua n startService (). Cc dch v m nhc s m nh khm
ph m nhc chi, v bt u pht.
Khng c gi tr tng ng khi gi cc dch v ngng - khng c phng
thc onStop ().Phng thc onCreate () v onDestroy () c gi cho tt c cc
dch v, cho d n ang bt u bi Context.startService () hoc
Context.bindService (). Tuy nhin, onStart () c gi l ch cho cc dch v
bt u ca startService ().Nu mt dch v cho php nhng ngi khc rng
buc vo n, c thm cc phng thc gi cho n, thc hin:
IBinder onBind (Intent Intent)
boolean onUnbind (Intent Intent)
void onRebind (Intent Intent)
Di y l nhng biu minh ho vic gi cc phng thc cho mt dch
v. Mc d, n tng t dch v c to ra thng qua startService t nhng dch
v c to ra bi bindService (), hy ghi nh rng bt c dch v, khng c vn
nh n bt u, c th cho php khch hng c tim nng rng buc vo n,
do , bt c dch v no u c th nhn c onBind () v onUnbind () gi.

Hnh 2.4 : vng i ca service


Broadcast receiver lifecycle
Mt broadcast nhn c phng thc cuc gi n :
void onReceive(Context curContext, Intent broadcastMsg)
Khi mt thng ip broadcast n vi ngi nhn, Android gi phng thc
onReceive() v i chuyn qua i tng intent c cha cc thng ip. broadcast receiver
c coi l activity ch khi n c thc hin phng thc ny. Khi onReceive () tr li,
n khng l activity.
Mt tin trnh vi mt kch hot broadcast receiver c bo v khi b tt. Nhng
ch vi mt tin trnh khng hot ng c th tt cc thnh phn ca h thng vo bt k
lc no, khi b nh n tiu th l cn thit i vi ca tin trnh khc.
iu ny trnh by mt vn khi tr li mt thng bo broadcast th thi gian vn
tiu dng, do , nn c thc hin trong mt thread ring bit, cch xa nhng thread
chnh ni cc thnh phn khc ca interface ngi dng chy. Nu onReceive () sinh ra
cc thread v sau tr v, ton b qu trnh, bao gm cc thread mi, c phn xt
l khng hot ng (tr khi cc thnh phn ng dng ang hot ng trong tin trnh), t
n trong nguy c b tt. Cc gii php cho vn ny l dnh cho onReceive ()bt u
mt dch v v cho cc dch v lm cng vic, do , h thng bit rng vn cn hot
ng, cng vic ang c thc hin trong tin trnh.
Processes v lifecycles
Cc h thng Android c gng duy tr mt tin trnh ng dng cng lu cng tt,
nhng cui cng, n s cn phi loi b cc tin trnh c khi chy b nh thp. xc
nh cc tin trnh gi v tt, Android ,ni mi mt tin trnh trong mt
inportance hierachi da trn cc thnh phn hot ng trong n, v trng thi ca nhng
thnh phn. Cc tin trnh vi tm quan trng thp nht l loi b u tin, sau cc
phn k tip, v trn cng. C nm cp trong h thng. Di y l nhng danh sch
trnh by chng theo th t tm quan trng:
1. Mt tin trnh foreground l mt trong nhng qu trnh l nhng g cn thit
cho ngi s dng hin nay ang lm. Mt qu trnh c coi trong foreground nu c
bt k cc iu kin sau y :
l mt activity ang chy m ngi s dng tng tc c vi n(cc hot
ng ca i tng phng thc onResume () c gi).
N lu tr mt dch v rng buc vi cc activity tng tc vi ngi s dng.
N c mt i tng dch v thc hin mt trong cc lifetime callbacks
(onCreate (), onStart (), hoc onDestroy ()).
N c mt i tng BroadcastReceiver thc hin cc phng thc onReceive
() .
Ch c mt vi tin trnh foreground s tn ti bt k thi im no. N b tt ch
l mt cch cui cng nu b nh thp n khng th tip tc chy tt c. Thng thng,
, t n mt trng thi phn mnh b nh , tt mt s tin trnh foreground
cn thit gi cho ngi dng giao din p ng.
2. Tin trnh visible l mt trong nhng tin trnh m khng c bt k foreground
thnh phn, nhng vn cn c th nh hng n nhng g ngi dng thy trn mn
hnh. Mt qu trnh c coi l nhn thy nu mt trong cc iu kin sau y c:
Lu tr mt activity m khng c trong foreground, nhng vn cn hin th cho
ngi s dng (cc onPause () c gi l phng thc). iu ny c th
xy ra, v d, nu cc hot ng foreground l mt hp thoi m cho php cc
hot ng trc c nhn thy ng sau n.
Lu tr mt dch v b rng buc vo mt hot ng nhn thy c.
tin trnh Visible c xem l v cng quan trng v s khng b tt, tr khi lm
nh vy l cn thit gi tt c cc tin trnh foreground chy.
3. Tin trnh Service l mt trong nhng dch v hot ng c bt u vi
phng thc startService () m khng ri vo mt trong hai th loi cao hn. Mc d cc
tin trnh dch v khng c gn trc tip vo bt c iu g cho ngi dng thy, n
thng lm nhng g ngi s dng quan tm (v d nh chi mt trong nhng nn mp3
hoc ti d liu trn mng), v vy gi cho h thng ang chy tr khi n khng b
nh lu gi chng cng vi tt c cc foreground v nhn thy c cc tin trnh.
4. Tin trnh Background l mt qu trnh t chc hot ng khng th nhn thy
cho ngi s dng (cc hot ng ca i tng ca phng thc onStop () c gi ).
Nhng tin trnh khng c tc ng trc tip trn s tri nghim ca ngi dng, v c
th tt bt c lc no ti lp b nh cho mt foreground, nhn thy c, hoc dch v
x l. Thng thng c nhiu tin trnh background ang hot ng, do , chng c
lu gi trong mt LRU (t nht trong thi gian gn c s dng) trong danh sch bo
m rng qu trnh vi cc hot ng gn nht c xem bi ngi s dng cui cng
s c tt. Nu mt activity thc hin lifecycle mt cch chnh xc cc phng thc, v
hin nay nm bt cc trng thi, tt tin trnh ca n s khng c mt nh hng c hi
n s tri nghim ca ngi dng.
5. Tin trnh empty l mt trong nhng tin trnh m khng bt k thnh phn ng
dng no khi ng. Ch c l do g gi nh vy l mt qu trnh xung quanh nh mt
b nh cache ci thin thi gian khi ng ti mt thnh phn cn thit chy trong
n. H thng ny thng xuyn tt cc tin trnh cn bng tng th h thng ti nguyn
gia cc qu trnh caches v cc ht nhn caches.
Android sp xp mt tin trnh mc cao nht c th, da trn tm quan trng ca
cc thnh phn hin ang hot ng trong tin trnh. V d, nu tin trnh t chc mt
dch v lu tr v hin th cc hot ng, tin trnh ny s c xp hng nh l mt tin
trnh nhn thy c, khng phi l mt tin trnh dch v.
Ngoi ra, th hng ca mt tin trnh c th c tng ln bi v cc tin trnh ph thuc
vo n. Mt qu trnh l qu trnh phc v khc c th khng bao gi c xp hng
thp hn l tin trnh phc v. V d, nu mt nh cung cp dch v ni dung trong qu
trnh A l mt phc v khch hng trong qu trnh B, hoc nu mt dch v trong tin
trnh A l rng buc vi mt thnh phn trong tin trnh B, mt tin trnh s lun lun
c xem xt t nht l iu quan trng l tin trnh B.
Chng III : Trnh by mt s cng c lp trnh trn Android
1.1 B cng c pht trin android sdk v plugin (ADT) cho Eclipse
B cng c Android SDK bao gm mt tp hp cc cng c dng pht trin,
kim li code ng dng v thit k cc giao din ca ng dng. B m phng Android,
khi c khi ng n s hin th ton b giao din bao gm c cc nt bm v bn phm
QWERTY. N c th hot ng tt tng t nh thit b tht d cho cc mt vi gii hn
(v d nh khng nhn c cuc gi n). B m phng Android chy mt phin bn
c sa i ca mi trng gi lp m ngun m thuc Fabrice Bellard, c tn l
QEMU. Phin bn ny gi lp mt vi x l ARM v thc thi h iu hnh Linux.
Plugin ADT c pht trin dnh ring cho IDE Eclipse n m rng kh nng ca
eclipse cho php bn thit lp mt project android , to mt ng dng UI , thm vo cc
thnh phn c bn trong framework api ca android , kim li ng dng ca bn s dng
cng c sdk. Plugin thm d n Android Activity vo cu trc mu ca Eclipse. Khi
ng mt d n mi v plugin s xy dng cc tp tin Java nn tng, to ra nhng th
mc cn thit v nhng tp tin ngun nng ct. Plugin Eclipse qun l cc tin trnh bin
dch, chuyn i sang dex, m b m phng, v ti v. Bi v vic vit m Android cng
chnh l vit m Java, nn nh pht trin c th vn hnh nh th ang xy dng mt ng
dng Java thng thng. Cc tp tin ngun c vit bng XML cng d dng c qun
l bi trnh bin tp XML c sn trong Eclipse. Android gii thiu mt c im hon
ton mi khin cc nh pht trin phi ghi nh chnh l Activity. Vi Activity, bn c
th xc nh mt hay nhiu gc nhn. Mt gc nhn tng ng vi mt khu vc trn
mn hnh v qun l nhng thao tc din ra trn khu vc .
1.1.1 Ci t Android SDK v plugin (ADT) cho Eclipse
Sau khi download b cng c sdk v gii nn file .zip vo v tr d nh , file .zip
sau khi gii nn s c tn l android-sdk-<platform>-<release> v d bn down b sdk
phin bn 1.5_r3 cho windows th tn th mc c gii nn ra l android-sdk-windows-
1.5_r3 bn c th thay i ty theo thch.
Cc cng c cn chun b :
B cng c android sdk y ta s chn phin bn l android-sdk-1.5_r3
down trn android.com
B Eclipse 3.4(Ganymede) hoc Eclipse 3.3(Europa) hoc phin bn mi
nht.
Cc bc ci t :
1. y ta v d t tn th mc l Android cho d nh v t n
C:/Android sau ta cn tham chiu bin mi trng n th mc C:/Android/tools
Chut phi vo My Computer, trn menu chut phi, chn Properties, xut hin hp
thoi System Properties, trong hp thoi ny, chn tab Advanced, sau nhp chut
vo nt Environment Variables, xut hin hp thoi Environment Variables:

Hnh 3.1 : Hp thoi Environment Variables

Trn hp thoi Environment Variables, dch thanh cun trong mc System variables
tm bin Path. La chn vo Path, sau nhp chut vo nt Edit. Xut hin hp thoi
Edit System Variables.

Trn hp thoi Edit System Variables, thm gi tr ;C:\Android\Tools vo cui


Variable Value (ch du ;). Sau nhp OK thot.

C th kim tra cc gi tr PATH bng cch thc hin lnh PATH trn ca s lnh ca
Windows.

Ta t tham chiu ti th mc tools ca android sau ny ta c th chy cc dng lnh


trong tools ca android m khng cn cung cp y ng dn ti th mc tools
2. Sau y l hng dn ci t ADT v thit lp eclipse :
Nu bn c kt ni internet th lm y nh hng dn di :
Eclipse 3.3 (Europa) Eclipse 3.4 (Ganymede)

1. Khi Eclipse, sau chn Help > 1. Khi ng Eclipse, sau chn Help >
Software Updates > Find and Software Updates.
Install. 2. Trong hp thoi xut hin chn tab
2. Trong hp thoi va hin ra , chn Available Software .
Search for new features to install v 3. Click Add Site
click Next.
4. Nhp ng dn:
3. Click New Remote Site.
https://dl-
4. Trong hp thoi , nhp mt ci tn ssl.google.com/android/eclipse/
(v d Android Plugin) v nhp c
dn : Click OK.
https://dl- 5. Sau s hin ra danh sch plugin ,bn
ssl.google.com/android/eclipse/ chn Developer Tools v click
Install
Click OK.
6. Chuyn qua tab Installed Software bn
5. Click Finish. cnh . Chn Android DDMS v
6. Trong hp thoi k tip , chn Android Development Tools. Click
checkbox cho Android Plugin. Chn Next.
cng c t vo l : Android 7. c v chp nhn cc tha thun,sau
DDMS v Android Development click Finish.
Tools. Click Next.
8. Khi ng li Eclipse.
7. c v chp nhn cc tha thun,sau
click Next.
8. Trong ca s ci t pha di, click
Finish.
9. clicking Install All.
10. Khi ng li Eclipse.

Nu khng kt ni internet th bn download file .zip ca plugin ADT http://dl-


ssl.google.com/android/ADT-0.9.1.zip v v khng gii nn sau bn lm ging bc 1
v 2 trn bng hng dn trn ,n bc 3 th i vi Eclipse 3.3(Europa) bn click New
Archive Site v chn file ADT-0.9.1.zip cn i vi Eclipse 3.4(ganymede) bn click
Add Site sau chn Archive v chn file ADT-0.9.1.zip. Tip theo i vi c 2 phin
bn eclipse bn lm theo bng hng dn trn t bc 5 n ht.
By gi bn s ty chn u tin ti th mc ca android sdk :
1. Select Window > Preferences m bng preferences (Mac: Eclipse >
Preferences).
2. Chn Android.
3. Trong SDK Location bng thao tc chnh, click Browse nh v cho th mc
ca android sdk.
4. Click Apply, sau OK.
Vy l bn c th bt u vit ng dng android c ri.Phn sau y s hng dn bn
s dng mt s cng c trong b android sdk.
1.2 Tng quan cc cng c c dng trong b android sdk
Android SDK bao gm rt nhiu ty chn a dng cc cng c gip bn pht
trin ng dng di ng trn nn tng android.Trong quan trng nht l Android
Emulator v Plugin ADT cho Eclipse , nhng SDK ny cn gm nhiu nhng cng c
khc kim li , ng gi phn mm v ci t ng dng ca bn ln android emulator.
Android Development Tools Plugin (Plugin ADT dnh cho Eclipse) :

Plugin ny thm nhiu m rng mnh m cho Eclipse ,lm cho vic to vo kim
li cc ng dng ca bn d dng v nhanh hn.

Android Emulator

B m phng thit b di ng vi cng c ny bn c th dng thit k, kim li


v th nghim cc ng dng ca bn mt mi trng chy android thi gian
thc.

Android Virtual Devices (AVDs)

Thit b o cu hnh cho nhng ng dng m bn to .Trong mi mt cu hnh bn


c th ch nh nn tng android dng chy (v d nh 1.1 hay 1.5) , ty chn
phn cng , v cc skin emulator c s dng . Mi hm AVD l mt thit b c
lp vi kho lu tr ca ring n i vi d liu ngi dng ,

Bn c th to nhiu AVD m bn cn dng l nn tng no (android


1.1,android1.5, google map apis)

Mun to mt AVD bng dng lnh ta dng lnh :

android create avd n <name> -t <targetID> [-<option> <value>]


trong <name> l tn AVD , targetID l ID ca nn tng (android 1.1 l
2,android 1.5 l 3, google map apis l 3).

Di y l bng 1 s cu lnh dng thc thi AVD :


Thc thi Ty chn M t
list avds Danh sch tt c AVD (tn , nn tng,
skin , ng dn)
create avd -n <name> or Tn ca AVD
-t <targetID> L ID ca nn tng ,dng cho AVD mi
-c<path> or ng dn hoc kch thc ca Th nh
-c <size>[K|M] SD c to cng vi AVD
-f Ghi ln mt AVD nu trng tn
-p <path> ng dn nh v th mc cha file AVD
-s<name> or Skin dng cho AVD, c nhn bi tn
-s <width>-<height> hoc kch thc
delete avd -n <name> Xa AVD ca c ch nh
move avd -n <name> Tn ca AVD c chuyn i
-p <path> ng dn mi nh v cho AVD
-r <new-name> i tn AVD
update avds Cp nht li ng dn ca tt c nh h
thng

Hierarchy Viewer

Cng c Hierachy Viewer cho php bn kim li v ti u ha giao din ngi


dng . N cung cp mt s trnh by trc quan ca layout ca bn v kim sot s
phng i ca mn hnh hin ti vi mt li cc im nh .

Draw 9-patch

Cng c Draw 9-patch cho php bn d dnh to mt ha NinePatch s dng


cng c bin son WYSIWYG(What You See is What You Get) .

Dalvik Debug Monitor Service (ddms)

Cng c ny cho php bn qun l nhng tin trnh trong emulator hoc
thit b v gip vic kim li . Bn c th s dng n tt cc tin trnh , chn
mt tin trnh kim li , xem heap v thng tin ca cc thread ,
DDMS hot ng nh mt trung gian , n kt ni ti IDE ,ti cc ng dng
v chy trn thit b . Trn android mi ng dng chy trn mt tin trnh ca
chnh n,mi host c mt my o ca chnh n ,mi tin trnh th lng nghe t mt
trnh g li trn mt ci port khc nhau.

Khi khi ng , DDMS kt ni ti cng c adb v khi ng 1 dch v theo


di thit b gia ng dng v IDE , mi bn s thng bo cho DDMS khi c kt
ni hoc t kt ni , khi mt thit b kt ni th dch v theo di VM(my o)
c to ra gia adb v DDMS , s thng bo cho DDMS khi mt my o(VM)
trn thit b c khi ng hoc kt thc.

Khi m VM ang chy khi phc c ID tin trnh ca VM qua adb v m


mt kt ni ti trnh g li ca VM qua deamon adb trn thit b.

T gc nhn ca mt nh pht trin, Dalvik trng ging nh my o Java


(Java Virtual Machine), Dalvik thc thi dex bytecode ch khng phi Java
bytecode. Hn th na gi chng tn ti nhng im khc nhau v class file.

Android Debug Bridge (adb)

Cng c adb ny cho php bn ci t file .apk (ng dng) trn emulator hoc thit
b v truy cp emulator v thit b t nhng dng lnh. Bn cng c th dn ti
mt trnh kim li tiu chun cho cc code ng dng ang chy trn emulator hoc
thit b.

Android Asset Packaging Tool (aapt)

Cng c aapt cho php ban to file .apk cha cc tp nh phn v ti nguyn ca
ng dng android.Ngoi ra n cn cho php bn xem , to v cp nht nhng ti
liu (zip,jar,apk) n cng c th bin dch cc ti nguyn thnh ti nguyn nh
phn.

Bn s khng thng dng trc tip cng c ny nhng cc tp lnh xy


dng v cc Plugin IDE dng cng c ny gi cc file apk cu thnh ng
dng android.Mun bit thm v cch s dng th m mt thit b u cui dn
n tools/ v nh lnh : ./appt i vi linux v mac OSX v appt.exe i vi
windows.

Android Interface Description Language (aidl)

Cho php bn sinh ra code ca interprocess interface , v d nh nhng g dch v


c th s dng

sqlite3
Cho php bn truy cp file d liu SQLite c to v s dng bi ng dng,

Traceview

Cng c ny lm vic phn tch th , v li bn ghi d liu ca views .

mksdcard

Gip bn to mt vng lu tr d liu m ban dng vi emulator , m phng th


lu tr d liu gn ngoi (ging sdcard)

dx

y l cng c dng chuyn i bytecode sang mt dng gi l dex bytecode.


Dex l t vit tt ca Dalvik executable ng vai tr nh c ch o thc thi
cc ng dng Android.

UI/Application Exerciser Monkey

L chng trnh chy trn emulator ca bn hoc thit b v sinh ra nhng lung
gi ngu nhin ca s kin ngi dng nh click, va chm, nhn din c ch, bn
c th s dng chng trnh ny kim nghim hiu sut ng dng m bn pht
trin , vo mt hnh ng ngu nhin c nhc li.

android

Qun l cc AVD v sinh ra file ant m bn c th dng bin dch ng dng ca


bn.
Sau y ta s i vo trnh by chi tit mt s cng c quan trng nht l Emulator.
1.2.2 Android Emulator
SDK android bao gm mt b m phng thit b di ngmt thit b di ng o
m chy trn my tnh ca bn. M phng bn pht trin v kim tra cc ng dng
Android m khng cn s dng thit b vt l.

Android Emulator bt chc tt c cc c trng ca mt loi thit b di ng v c


phn cng v phn mm, ngoi tr rng n khng th nhn v t cc cuc gi in thoi
tht s. n cung cp mt s iu hng khc nhau v cc kha iu khin, m bn c th
n s dng chut hoc bn phm pht sinh cc s kin cho ng dng ca bn. n cng
cung cp mt mn hnh m ng dng ca bn c hin th, km vi bt k ng dng
Android khc ang chy.

bn kim tra ng dng d dng hn, Emulator h tr cc cu hnh AVD


(Android Virtual Device). Cc AVD bn nh r nn Android m bn mun chy
trn Emulator, cng nh cc ty chn phn cng v cc file nn Emulator m bn mun
s dng. mt khi ng dng ca bn ang chy trn Emulator, n c th s dng cc dch
v ca nn Android gi cc ng dng khc, truy cp mng, chi audio, video, lu v
truy vn d liu, thng bo chng n ngi dung, v din t chuyn tip v cc ch
ha.

Emulator cng bao gm kh nng sa li, nh mt console t ci m bn c th


log li u ra, Emulator cc ngt ng ng (nh thng ip SMS n hoc cc cuc gi
thoi) v Emulator hiu ng tr v cc k t b mt trn knh d liu.

1.2.2.a Tng quan Emulator

Android Emulator l mt ng dng da trn QEMU m cung cp mt thit b di


ng ARM o m bn c th chy cc ng dng Android ca bn. n chy mt ngn xp
h thng Android y , xung ti cp nhn, m bao gm mt b cc ng dng ci
t trc (nh l b quay s) m bn c th truy cp t ng dng ca bn. bn c th la
chn ci phin bn ca h thng Android bn mun chy trong Emulator bng cch
cu hnh AVD, v bn cng c th thay i nn thit b di ng v nh x cc phm. Khi
chy Emulator v ti thi gian chy, bn c th s dng cc lnh khc nhau v cc ty
chn iu khin cc hnh vi.

nh h thng Android c phn b trong SDK c cha m my ARM cho li


Linux Android, cc th vin cc b, Dalvik VM v cc gi file Android khc nhau (nh
cho framework Android v cc ng dng ci t trc). Cc lp Emulator QEMU cung
cp s dch nh phn ng ca m my ARM n h iu hnh v kin trc b x l ca
my trin khai ca bn.

Thm cc kh nng ty chn vo cc dch v nn QEMU, Android Emulator h tr


nhiu cc c trng phn cng c tim thy trn cc thit b di ng, bao gm:

mt CPU ARMv5 v n v qun l b nh tng ng (MMU)


mt mn hnh LCD 16bit
mt hoc nhiu bn phm ( mt bn phm da trn Qwerty v cc phm
Dpad/Phone lin quan)
mt chip m thanh vi kh nng vo v ra
cc phn vng b nh Flash (c Emulator thng qua cc file nh a trn
my trin khai)
mt modem GSM, bao gm mt Card SIM Emulator

Cc phn di y cung cp nhiu thng tin hn v Emulator v lm th no s


dng n cho pht trin ng dng Android.

1.2.2.b Khi ng v dng Emulator


Trong qu trnh pht trin v kim tra ng dng ca bn, bn ci t v chy ng
dng ca bn trong Android Emulator. Bn c th chy Emulator nh mt ng dng c
lp, t dng lnh hoc bn c th s dng n nh mt phn ca mi trng pht trin
Eclipse. Trong trng hp no cng vy, bn ch r cu hnh AVD ti v cc ty chn
ban u bn mun s dng, nh miu t trong ti liu ny.

Bn c th chy ng dng ca bn trn mt th hin n ca Emulator hoc da v


cc nhu cu ca bn. Bn c th khi ng nhiu th hin Emulator v chy ng dng ca
bn trn hn mt thit b c Emulator. Bn c th s dng cc lnh xy dng sn
Emulator cuc gi GSM hoc SMS gia cc th hin Emulator, v bn c th thit lp
nh hng mng m cho php Emulator gi d liu n mt ci khc. Ly thng tin ti
Telephony Emulation, SMS Emulation v Emulator Networking.

khi ng th hin ca Emulator t dng lnh, thay i th mc tools ca


SDK. Nhp vo lnh emulator nh sau:

Emulator avd <avd_name>

Ci ny khi to Emulator v ti cu hnh AVD (xem phn tip theo hiu r hn


v AVD). Bn s thy ca s Emulator xut hin trn mn hnh.

Nu bn ang lm vic vi Eclipse, ADT plugin cho Eclipse ci t ng dng ca


bn v khi ng Emulator t ng, khi bn chy v g ri ng dng. bn c th ch r
ty chn khi ng Emulator trong hp thoi Run/Debug, trong th Target. Khi Emulator
ang chy, bn c th a ra dng lnh nh miu t trong ti liu ny.

dng mt th hin Emulator, ch ng ca s Emulator.

1.2.2.c Emulator v cc thit b o ca Android

s dng Emulator, trc ht bn phi to mt hoc nhiu cu hnh AVD. Trong


mi cu hnh bn ch r mt nn Android chy trong Emulator v b ty chn phn
cng v giao din Emulator bn mun dung. V th khi bn chy Emulator, bn ch r cu
hnh AVD m bn mun ti.

ch r AVD bn mun ti khi khi ng Emulator, bn s dng tham s -avd,


nh ch ra phn trc.

Mi chc nng AVD nh mt thit b c lp, vi khng gian lu tr ring s


dng d liu, Card SD,. Khi bn chy Emulator vi mt cu hnh AVD, n t ng ti
d liu ngi dung v d liu Card SD t th mc AVD. Mc nh, Emulator lu d liu
ngi dung, d liu card SD v cache trong th mc AVD.

1.2.2.d iu khin Emulator


Bn c th s dng ty chn khi ng Emulator v dng lnh iu khin hnh
vi v thuc tnh ca chnh mi trng c Emulator.

Khi Emulator ang chy, bn c th tng tc vi thit b di ng Emulator nh


bn c mt thit b di ng tht s, ngoi tr rng bn s dng con tr chut ca bn
chm vo mn hnh v cc phm cc phm thit b Emulator.

Bng di y tm tt cc nh x gia cc phm Emulator v cc phm trn bn phm ca


bn.

Cc phm thit b Emulator Phm trn bn phm


Home HOME
Menu (left softkey) F2 or phm Page-up
Star (right softkey) Shift-F2 or Page Down
Back ESC
Call/phm dial F3
Hangup/ end call F4
Search F5
phm Power F7
phm tng m KEYPAD_PLUS, Ctrl-5
phm gim m KEYPAD_MINUS, Ctrl-F6
Camera button Ctrl-KEYPAD_5, Ctrl-F3
Chuyn i cc layout (ca example, portrait,
KEYPAD_7, F11
landscape)
Chuyn i cc layout k tip (v d, portrait,
KEYPAD_9, F12
landscape)
on/off mng F8
Bt tt code F9 (ch vi ty chn trng thi d)
Bt tt fullscreen mode Alt-Enter
Bt tt trackball F6
Enter trackball mode temporarily (while key
Delete
is pressed)
Dpad tri/trn/phi/di KEYPAD_4/8/6/2
Click gia Dpad KEYPAD_5
KEYPAD_MULTIPLY(*) /
gim/tng Onion alpha
KEYPAD_DIVIDE(/)
ch rng, s dng cc phm s, bn phi v hiu ha Numlock trn my tnh pht
trin.

1.2.2.e Lm vic vi cc disk image ca Emulator

Emulator s dng disk image c th ni c lu trn my pht trin Emulator


cc phn vng flash(hoc tng t) trn thit b thc t. v d, n s dng disk image
ang cha mt nhn Emulator c th, h thng Android, mt nh ramdisk v cc nh c
th ghi c cho d liu ngi dng v card SD Emulator.

chy ph hp, Emulator yu cu truy xut n mt b c th cc file disk


image. Mc nh, Emulator lun lun tm kim cc disk image trn vng lu tr ring ca
AVD ang s dng. nu khng c nh hin din khi Emulator chy, n to cc nh trong
th mc AVD da theo phin bn mc nh c lu trong SDK.

Ch : vng lu tr mc nh cho AVD trong ~/.android/avd trn OS X v Linux,

C:\Documents and settings\<user>\.android\ trn windows xp v

C:\user\<user>\.android\.android\ trn vista

bn s dng lun phin hoc ty chn phin bn ca cc file nh, Emulator


cung cp ty chn khi ng m ghi cc vng mc nh v cc file ca file nh. Khi
bn s dng ty chn, Emulator tm kim file nh theo tn nh hoc vng m bn ch r.
Nu khng nh ra nh, n quay li s dng cc tn v vng mc nh.

Emulator s dng 3 loi file nh: file nh mc nh, file nh thc thi v file nh
tm. cc phn di y miu t lm th no ghi vng/tn ca mi loi file.

Cc nh mc nh :

khi Emulator chy nhng khng tm mt nh d liu ngi dng trn khng gian
lu tr AVD hot ng, n to ra mt ci t mt phin bn mc nh bao gm trong SDK.
nh d liu ngi dng mc nh l ch c. cc file nh l ch c.

Emulator cung cp ty chn khi ng system<dir> bn ghi vng theo ci


m Emulator tm kim cho d liu ngi dng mc nh.

Emulator cng cung cp mt ty chn khi ng m bn ghi tn ca nh d


liu ngi dng mc nh, nh miu t trong bng di. khi bn s dng ty chn,
Emulator tm kim trong th mc mc nh, hoc trong mt vng ty chnh( nu bn ch
r system<dir>)

Tn M t Cc nhn xt
Override using -initdata <file>. Also see
userdata.img The initial user-data disk image
-data <file>, below.

Cc nh thi gian thc thi: d liu ngi dng v SD card:

Ti thi gian chy, Emulator c v ghi d liu trn 2 nh a: nh d liu ngi dng v
(ty chn) mt nh card SD. Ci ny Emulator phn vng d liu ngi dng v mi
trng lu tr t xa trn thit b thc.

Emulator cung cp mt disk image d liu ngi dng. Ti lc khi ng, Emulator to
ra nh mc nh nh mt bn sao ca nh d liu ngi dng h thng(user-data.img),
miu t trn. Emulator lu nh mi vi file ca AVD hot ng.

Emulator cung cp ty chn khi ng bn ghi cc tn v vng lu tr thc ca nh


thi gian thc thi ti, nh miu t trong bng di. khi bn s dng mt trong cc ty
chn, Emulator tm kim file c th trong th mc hot ng hin hnh, trong th mc
AVD hoc trong vng ty chnh( nu bn ch r mt ng dn ti filename).

Tn M t Cc nhn xt
Ghi s dng -data <filepath>, ni
<filepath> l ng dn nh, lin quan n
th mc hot ng.nu bn cung cp ch mt
Mt file nh m Emulator vit d filename,Emulator tm kim trong th mc
userdata-
liu ngi dng thi gian thc thi hin ti. nu file ti <filepath> khng c,
qemu.img
cho mt ngi dng duy nht Emulator to ra mt nh t userdata.img
mc nh, lu n di tn bn ch r, v tip
tc d liu ngi dng vi n ti lc
shutdown
Ghi s dng -sdcard <filepath>, ni
<filepath> l ng dn nh, lin quan ti
Mt nh biu din mt SD card
sdcard.img th mc hin chy. nu bn cung cp ch
c chn vo thit b Emulator
mt filename Emulator tm kim trong th
mc hin ti ang hot ng

nh d liu ngi dng:

Mi th hin Emulator s dng mt nh d liu ngi dng c th ghi c lu


d liu phin v ngi dng c th. V d n s dng cc nh lu mt d liu ng
dng ci t ngi dng, cc thit lp, c s d liu v cc file.
Ti lc khi ng, Emulator c gng ti nh d liu ngi dng c lu sut
phin trc. n tm kim file trong th mc hin chy, trong th mc AVD nh ni trn
v ti vng/tn ty chnh m bn ch r ti khi ng.

nu n tm mt nh d liu ngi dng, n ni nh v lm n sn sng vi


h thng cho c/vit d liu ngi dng.
nu n khng tm ra, n to mt nh bng cch sao chp nh d liu ngi
dng h thng(userdata.img), ch ra trn. Lc tt thit b, h thng vn cn
d liu ngi dng ti nh v th n s sn sng trong phin tip. ch rng
Emulator lu nh a mi ti vng/tn m bn ch trong data

Ch : bi v cc cu hnh AVD s dng trong Emulator, mi Emulator gi ly trong kho


ca chnh n. Khng cn s dng ty chn d ch mt khu vc lu tr th hin c th.

SD card:

Ty chn, bn c th to ra mt disk image c th ghi c m Emulator c th s


dng Emulator kho lu c th di chuyn trong thit b c th.Bn cng c th s dng
cng c Android t ng to mt nh SD card cho bn, khi to mt AVD.

Cc nh tm:

Emulator to 2 nh c th ghi ti lc khi ng m n xa lc ngun tt. nh l:

mt bn sao c th ghi ca nh h thng Android


nh phn vng /cache

Emulator khng cho php thay i tn nh h thng tm hoc gi n ti lc ngun


tt nh phn vng /cache c khi to rng, v c s dng bi trnh duyt cache
cc nh, cc trang web download. Emulator cung cp mt cache<file>, m ch r tn ca
file ti ci m gi nh /cache lc ngun tt. nu <file> khng tn ti, Emulator to ra mt
file trng . Bn c th disable s dng ca phn vng cache bng cch ch r ty chn
nocache

1.2.2.f Emulator Networking

Emulator cung cp kh nng mng linh hot m bn c th s dng ci t cc


mi trng kim tra v m hnh cho ng dng ca bn. phn di gii thiu kh nng v
kin trc mng ca m phng

khng gian a ch mng:

mi th hin ca Emulator chy di mt dch v router/firewall o m phn cch


n t cc giao din v thit lp mng ca my pht trin vi internet. Mt thit b
Emulator khng th thy my pht trin ca bn hoc cc thc th Emulator trn mng.
Thay v, n nhn thy n c kt ni thng qua Ethernet n router/firewall.

Router o cho mi th hin qun l 10.0.0/24 khng gian a ch mng- tt c c


qun l bi router trong hnh thc ca 10.0.2.<xx>, ni m <xx> l mt s.

Cc a ch bn trong khng gian ny c nh trc bi Emulator/router nh di y:

a ch mng M t
10.0.2.1 Router/gateway address
B danh c bit ca host loopback interface (v d , 127.0.0.1 trn
10.0.2.2
thit b pht trin ca bn)
10.0.2.3 DNS server u tin
10.0.2.4 / 10.0.2.5 /
Chn DNS server th 2 , th 3 , th 4 (nu cn)
10.0.2.6
10.0.2.15 M phng mng ring ca thit b/ethernet interface
127.0.0.1 M phng loopback interface ring ca thit b

Ch rng cc a ch ging nhau c s dng bi tt c th hin Emulator. c ngha


rng nu c 2 th hin chy trn my, mi my s c router ring v di n, mi ci c
mt a ch IP ca 10.0.2.15. th hin c cch bit bi mt th hin Emulator truyn
thng qua TCP/UDP.

Cng ch rng a ch 127.0.0.1 trn my pht trin ph hp vi giao din


loopback ca Emulator. nu bn mun truy cp cc dch v chy trn giao din loopback
ca my pht trin (a.k.a 127.0.0.1 trn my ca bn), bn nn s dng a ch 10.0.2.2

Cui cng, ch rng mi a ch nh trc ca thit b Emulator th ch r n


Android Emulator v s rt khc trn thit b thc( m cng ging l NAT-ed, di mt
router/firewall)

Cc gii hn mng cc b:

Mi th hin Emulator chy vi mt router o, nhng khng nh mt thit b thc


kt ni n mt router vt l, thit b o khng truy cp n mng vt l, thay vo n
chy nh mt phn ca ng dng bnh thng trn my pht trin ca bn. c ngha rng
n l ch vi cc gii hn mng nh nhau nh cc ng dng khc trn my bn.

truyn thng vi thit b Emulator c th b kha bi tng la ang chy trn


my bn

truyn thng vi thit b Emulator c th b kha bi router/firewall khc m


my bn kt ni.
Router o Emulator s c th iu khin tt c kt ni ra cc thng in/ kt ni
TCP v UDP trn t cch l thit b Emulator, cung cp mi trng mng my pht trin
cho php n lm th. Khng c gii hn xy dng sn trn s port hoc dy ngoi tr mt
b bt buc bi h iu hnh mng trn my bn. Ph thuc vo mi trng, Emulator
khng th h tr cc giao thc khc (nh ICMP, s dng cho ping) khng th h tr.
Hin ti Emulator khong h tr IGMP hoc multicast.

S dng cc ch dn mng:

truyn thng vi mt th hin Emulator vi router o ca n, bn cn thit lp


nh hng mng trn router o. cc client c th sau kt ni n mt port khch
(guest) c th trn router, trong khi router ch thng t port n port host thit b
Emulator.

ci t a ch mng, bn to ra mt nh x ca host v port guest/ cc a ch


trn th hin Emulator. c 2 cch ci t redirection mng: s dng lnh m phng
bng iu khin v s dng cng c adb.

Thit lp thng qua Emulator console:

Mi th hin Emulator cung cp mt giao din(console) iu khin m bn c th


kt ni n, s dng cc lnh m ch r th hin . Bn c th s dng lnh redir
thit lp a ch khi cn cho trng hp m phng.

u tin, xc nh s port console cho trng hp Emulator ch. V d, s port


console cho Emulator u tin chy l 5554, tip theo, kt ni n console ca th hin
Emulator ch, ch r port console ca n nh di y:

telnet localhost 5554

Mt khi kt ni, s dng lnh redir lm vic vi redirection. thm


redirection, s dng :

add<protocol>:<host-port>:<guest-port>

Ni <protocol> l hoc tcp hoc udp v <host-port> v <guest-port> thit lp nh


x gia my bn v h thng Emulator.

cho v d, cc lnh di y thit lp mt redirection m s iu khin tt c kt


ni tcp n host trn my pht trin ca bn trn 127.0.0.1:5000 v s chuyn chng
thng qua h thng Emulator 10.0.2.15:6000 :

redir add tcp:5000:6000


xa mt redirection, bn c th s dng lnh redir del. lit k tt c
redirection cho mt th hin c th, bn c th s dng redir list. Xem mc S dng
Console Emulator

ch rng s port b hn ch bi mi trng cc b. ci ny in hnh ngha l bn


khng th s dng s port host 1024 m khng c quyn qun tr. Cng vy, bn khng
th thit lp redirection cho mt port host m ang s dng bi tin trnh khc trn my
bn. trong trng hp , redir pht sinh thng ip li.

Ci t redirection thng qua ADB:

Cng c ADB(Android Debug Bridge) cung cp chuyn port, mt cch lun phin
cho bn thit lp redirection mng.

ch rng ADB khng yu cu bt k cch no xa mt redirection, ngoi tr kt thc


ADB server.

Cu hnh thit lp DNS ca Emulator:

Vo lc khi ng, cc emulator c danh sch cc my ch DNS l h thng ca


bn hin ang s dng. N sau lu li a ch IP ca my phc v ti a bn trn danh
sch ny v thit lp cc b danh cho h trn emulated a ch 10.0.2.3, 10.0.2.4, 10.0.2.5
v 10.0.2.6 khi cn thit.

S dng Emulator vi Proxy:

Nu emulator ca bn phi truy cp vo Internet thng qua mt my ch proxy,


bn c th s dng-http-proxy <proxy> la chn khi bt u emulator, thit lp
redirection thch hp. Trong trng hp ny, bn xc nh thng tin proxy trong <proxy>
trong mt trong cc nh dng: http:// <machineName>: <port> hoc http:// <username>:
<password> @ <machineName>: <port> cc ty chn -http-proxy p buc emulator s
dng proxy HTTP / HTTPS ch nh gi th cho tt c cc kt ni TCP. Redirection cho
UDP hin khng c h tr. Ngoi ra, bn c th nh ngha cc mi trng bin
http_proxy vo gi tr m bn mun s dng <proxy>. Trong trng hp ny, bn khng
cn phi xc nh mt gi tr cho <proxy> trong-http-proxy lnh - emulator kim tra cc
gi tr ca bin mi trng ti http_proxy khi ng v s dng gi tr ca n s t ng,
nu c xc nh. Bn c th s dng proxy-verbose-ty chn chn on cc vn
kt ni my ch.

Cc th hin Emulator lin kt:

cho php mt trong nhng th hin emulator giao tip vi nhau, bn cn


phi thit lp mng cn thit redirections nh minh ha di y.
Gi nh rng mi trng ca bn l

A l my pht trin
B l th hin u tin ca bn A
C l th hin th hai ca bn chy trn A

Bn mun chy mt my ch trn B, C m s kt ni, y l cch bn c th ci


t n:

1.Thit lp my ch trn B, nghe 10.0.2.15: <serverPort>

2. Trn console B, thit lp mt redirection t A: localhost: <localPort> n B:


10.0.2.15: <serverPort>

3.trn C, c client kt ni vo 10.0.2.2: <localPort> V d, nu bn mun chy mt


HTTP my ch, bn c th chn <serverPort> l 80 v <localPort> nh 8080:

B nghe 10.0.2.15:80
trn console B, s dng redir tcp: 8080:80
C kt ni vo 10.0.2.2:8080

Gi mt cuc gi thoi hoc SMS n Emulator khc:

Emulator t ng chuyn cuc gi thoi v thng ip SMS t mt th hin n


mt th hin khc. gi mt cuc gi thoi hoc tin nhn SMS, bn quay s s dng
cc ng dng v n dng tin nhn SMS (nu c) c ci t trn mt emulator
bt u mt cuc gi thoi Emulator th hin emulator khc :

1. Khi to cc ng dng quay s trn th hin emulator ban u.

2. khi mt s quay s, nhp s port console ca th hin bn mun gi. Bn c th


xc nh port console ca cc th hin mc tiu bng cch kim tra cc tiu ca
s, ni m port console c bo co nh l "Android Emulator (<port>).

3. n "Dial". Mt cuc gi mi xut hin trong th hin emulator ch.


gi mt tin nhn SMS thng bo n mt emulator, chy ng dng tin nhn
SMS (nu c). Ch r s console port ca cc trng hp m phng ch nh l a
ch tin nhn SMS, nhp tin nhn vn bn, v gi tin nhn. .

1.2.2.g S dng Console Emulator

Mi trng hp emulator ang chy bao gm mt tin ch console m cho php


bn t ng truy vn v kim sot cc mi trng thit b Emulator. V d, bn c th s
dng console t ng qun l cc port redirections v c im ca mng thoi v cc
s kin Emulator. truy cp console v nhp lnh, bn s dng telnet kt ni n s
port ca console.

kt ni n console ca bt k chy th hin emulator ti bt k thi im no,


hy s dng lnh ny:

telnet localhost <console-port>

Mt th hin emulator chim mt cp cng gn k: mt cng console v mt cng


ADB. Cc s port khc nhau bi 1, vi cc cng ADB c s cng cao hn. Console ca
th hin Emulator u chy trn mt my tnh s dng console cng 5554 v ADB cng
5555. Cc trng hp s dng cc cng ngy cng tng ca hai con s - v d, 5556/5557,
5558/5559, vv. Tnh n 16 th hin emulator c th chy mt tin ch console.

kt ni n mt emulator console, bn phi xc nh mt cng console hp l.


Nu nhiu th hin emulator ang chy, bn cn phi xc nh port ring ca emulator
bn mun kt ni vo. Bn c th tm thy cng console ca th hin c lit k trong
tiu ca ca s console. V d, y l tiu ca ca s, cho mt console c cng
5554 l: Android Emulator (5554)

Ngoi ra, bn c th s dng lnh adb devices, c th in mt danh sch cc th


hin emulator ang chy v s port console ca n.

Lu : emulator nghe cho cc kt ni vo cng 5554-5587 v ch chp nhn cc


kt ni t localhost. Mt khi bn c kt ni n console, th bn c th nhp help
[command] xem mt danh sch cc lnh console v tm hiu v lnh c th.
thot khi phin console, s dng ri b hoc thot..

Cc phn di y m t cc chc nng chnh ca console

Port redirection:

Bn c th s dng console thm v xo cc redirection port trong khi emulator


chy. Sau khi kt ni vi console, bn c th qun l redirections port theo cch ny:

redir <list|add|del>

Redir cc lnh h tr cc lnh con lit k trong bng di y.

Lnh M t Cc nhn xt

list Lit k port hin ti

add <protocol>:<host- Thm mt port redirection <protocol> phi l "tcp" or


port>:<guest-port> mi.
"udp"

<host-port> l s port m trn


host

<guest-port> l s port nh
tuyn d liu n emulator/ thit b

del <protocol>:<host- Xem trn cho ngha ca


Xa mt port redirection
port> <protocol> v <host-port>.

M phng cung cp v tr thng qua lnh Geo:

Console cung cp cc lnh cho php bn thit lp cc v tr bng lnh geo c


s dng bi thit b c Emulator. Bn c th s dng lnh geo gi mt sa cha
GPS n gin vo emulator, m khng cn phi s dng nh dng NMEA 1083. Vic s
dng cho cc lnh l:

geo <fix|nmea>

Cc lnh h tr lnh geo con lit k trong bng di y :

Lnh M t Cc nhn xt

fix<longitude> Gi mt v tr GPS n gin


Ch r tung v v
<latitude> [<altitude>] n th hin.

Gi mt NMEA 0183 n
<sentence> bt u vi '$GP'.
thit b Emulator, nu nh n
nmea <sentence> '$GPGGA' v '$GPRCM' hin
c gi t mt modem GPS
c h tr.
Emulator.
Bn c th s dng cc lnh geo ch v tr vng GPS ngay sau khi mt th hin
emulator chy. Cc emulator gi to ra mt a im nh cung cp dch v s gi n cho
cc ng dng GPS-bit ngay sau khi h bt u v a im ng k nghe. Bt k ng
dng c th truy vn nhng ngi qun l c c v tr hin ti v tr GPS cho cc
thit b bng cch gi:

LocationManager.getLastKnownLocation ( "gps")

Gi cc s kin:
Bn c th s dng lnh gi cho s kin khc nhau cho cc s kin emulator. cch s
dng lnh l:

event <send|types|codes|text>

Nhng s kin h tr cc lnh con c lit k trong bng di y :

Lnh M t Cc nhn xt

send Bn c th s dng cc tn dng


Gi mt hoc nhiu s kin
<type>:<code>:<value> text hoc interger cho <type> and
ti li ca android.
[...] <value>.

Danh sch tt c <type>


types chui cc b danh c h
tr bi cc lnh s kin

List all <codes> string aliases


supported by the event
subcommands for the
specified <type>.
codes <type>
Danh sch tt c <codes>
chui cc b danh c h
tr bi cc lnh s kin ca
ch dn <type>

M phng ca cc phm nhn


Tin nhn ny phi l mt chui
c gi n cc chui ch
dng UTF-8. Nhng k t khng
event text <message> dn ca cc k t nh mt tin
h tr s c hy b.
nhn

M phng cc c trng ca thit b ngun:

Bn c th s dng lnh power iu khin m phng trng ngun ca emulator


lc ny.cch s dng l:

power <display|ac|status|present|health|capactiy>

Nhng s kin h tr cc lnh con c lit k trong bng di y.


Lnh M t

display Pin mn hnh v b np in

Thit lp trng thi np AC


ac <on|off>
l on hoc off

Thay i trng thi ca


status<unknown|charging|discharging|not-charging|full>
ngun pin nh ch dn

Thit lp trng thi c hoc


present <true|false>
khng ca pin .

Thit lp trng thi health


health<unknown|good|overheat|dead|overvoltage|failure>
cho pin.

Gi nguyn pin tnh


power health <percent>
trng(0-100).

Trng thi mng:

Bn c th s dng console kim tra tnh trng mng v tc hin ti v c


im ca s chm tr. lm nh vy, kt ni n console v s dng netstatus. Di
y l mt v d v lnh ca n v u ra :

network status

M phng tr mng:

Cc emulator cho php bn Emulator cc cp tr mng, v vy m bn c th


th nghim ng dng ca bn trong mt mi trng in hnh ca cc iu kin thc t,
trong n s chy. Bn c th t mt hoc nhiu cp tr ti emulator khi ng
hoc bn c th s dng console thay i tr ng, trong khi cc ng dng ang chy
trong emulator.

thit lp tr ti emulator khi ng, s dng -netdelay ty chn vi mt gi


tr <delay>h tr , nh c lit k trong bng di y. Di y l mt s v d

emulator -netdelay gprs

emulator -netdelay 40 100


thc hin cc thay i ng i vi tr mng, trong khi cc emulator chy,
kt ni n console v s dng netdelay lnh vi gi tr h tr <delay> t bng di y.
network delay gprs

nh dng ca mng l mt trong nhng gi tr sau y (s l mili giy)

Bng m phng tr mng

Gi tr M t Nhn xt

gprs GPRS (min 150, max 550)

edge EDGE/EGPRS (min 80, max 400)

umts UMTS/3G (min 35, max 200)

none Khng tr (min 0, max 0)

M phng tr chnh xc n
<num>
(milliseconds).

M phng tr c ch nh
<min>:<max> trong phm vi (min, max
milliseconds).

M phng tc mng:

Cc emulator cng cho php bn m phng tc chuyn i mng khc nhau.


Bn c th thit lp mt mc chuyn i hoc mt gii hn ti lc emulator khi ng
hoc bn c th s dng console thay i tc trong khi cc ng dng ang chy
trong emulator.

thit lp tc mng ti emulator khi ng, s dng ty chn emulator


-netspeed vi mt gi tr <speed> c h tr, nh c lit k trong bng di y.
Di y l mt s v d:

emulator -netspeed gsm


emulator -netspeed 14.4 80
thc hin cc thay i ng tc mng, trong khi emulator chy, kt ni
n console v s dng netspeed vi gi tr h tr <speed> t bng di y.
network speed 14.4 80

nh dng ca mng <speed> l mt trong nhng iu sau y (s l kilobits)


Bng m phng tc mng

Gi tr M t Nhn xt
Gsm GSM/CSD (Up: 14.4, down: 14.4)
Hscsd HSCSD (Up: 14.4, down: 43.2)
Gprs GPRS (Up: 40.0, down: 80.0)
Edge EDGE/EGPRS (Up: 118.4, down: 236.8)
Umts UMTS/3G (Up: 128.0, down: 1920.0)
Hsdpa HSDPA (Up: 348.0, down: 14400.0)
Full Khng gii hn (Up: 0.0, down: 0.0)
Thit lp mt tc chnh xc
<num>
cho c download v upload
Thit lp nhng tc ring
<up>:<down>
cho upload v upload

M phng in thoi:
Cc Android emulator bao gm GSM Emulator modem cho php bn m phng
cc chc nng thoi trong emulator. V d, bn c th m phng cuc gi ti v (thit
lp /kt thc) kt ni d liu.h thng Android x l cuc gi m phng chnh xc nh
cc cuc gi thc. Cc emulator khng h tr cuc gi audio .Bn c th s dng console
truy cp vo cc chc nng thoi ca emulator. Sau khi kt ni vi console, bn c th
s dng :

gsm <call|accept|busy|cancel|data|hold|list|voice|status> gi cc chc nng thoi

Lnh gsm h tr lnh con lit k sau :

Lnh M t Cc nhn xt

M phng mt cuc gi
call
n t in thoi c s l
<phonenumber>
<phonenumber>.

Nhn cuc gi n t
Bn c th thay i 1 trng thi cuc gi
accept s<phonenumber> v thay
sang active ch khi nu trng thi hin
<phonenumber> i trng thi ca cuc gi
ti ca n l waiting hoc help
sang active

busy ng 1 cuc gi di ti s Bn c th thay i 1 trng thi cuc gi


<phonenumber> v thay sang busych khi trng thi hin ti ca
<phonenumber>
di trng thi sang busy n l waiting

Kt thc 1 cuc gi n
cancel
hoc gi i n/t
<phonenumber>
<phonenumber>.

<state> c h tr cc gi tr l :

unregistered khng c sn mng

home Trn 1 mng cc b, non-


roaming
Thay i trng thi ca kt roaming Trn 1 mng lang thang
data <state>
ni d liu <state>
searching Tm kim cc mng

denied ch cc cuc gi gp

off Ging nh 'unregistered'

on Ging nh 'home'

C th thay i trng thi 1 cuc gi sang


Thay i trng thi ca 1
hold help khi trng thi hin ti n l
cuc gi thnh help
waiting hoc active

Danh sch tt c cc cuc


list gi n v i cng vi
trng thi ca chng

voice <state> Thay i trng thi ca kt Supported <state> values are:


ni voice GPRS thnh
unregistered Khng c mng sn
<state>
home Trn mng cc b , non-
roaming

roaming -- Trn 1 mng lang thang

searching -- Tm kim cc mng

denied -- ch cc cuc gi gp

off -- Ging nh 'unregistered'


on -- Ging nh 'home'

Bo co GMS hin thi


status Cc gi tr m t cho voice v lnh d liu
voice/trng thi d liu .
Emulator SMS:

Cc console Android Emulator cho php bn to ra mt tin nhn SMS v hng ti


mt th hin emulator. Mt khi bn kt ni vo mt th hin emulator , bn c th to
ra mt tin nhn SMS n bng cch s dng lnh ny :

sms send <senderPhoneNumber> <textmessage>

ni <senderPhoneNumber> cha mt chui s ty .

Console forwards cc tin nhn SMS thng bo cho framework Android, m


chuyn n thng qua mt ng dng x l cc loi thng ip.

Trng thi VM:

Bn c th s dng lnh VM kim sot VM trn mt th hin emulator. cch s


dng cho cc lnh l:

vm <start|stop|status>

lnh vm h tr cc lnh con sau:

Lnh M t Cc ch

Khi ng VM ti 1 thi
Start
im.

Stop Dng VM ti 1 thi im.

Trng thi mn hnh hin ti


Start ca VM (ang chy hoc
dng)

Ca s Emulator:

Bn c th s dng ca s lnh qun l cc ca s emulator.cch s dng cho


cc lnh l :

Window <scale>
Lnh vm h tr cc lnh con sau:

Lnh M t Cc nhn xt

<scale> phi l mt s trong


khong 0.1 n 3 n m t h s t
l xch cn.Bn c th ch nh
scale <scale> Quy m ca ca s emulator.
scale bng mt gi tr DPI nu bn
thm vo hu t dpi cho gi tr
ca scale

Kt thc mt trng hp m phng:

Bn c th kt thc trng hp m phng thng qua console, s dng lnh kill

1.2.2.h Cc skin Emulator:

Bn c th chy emulator vi bt k bn skin mc nh, nh c m t trong


bng di y. xc nh mt skin, s dng -skin <skinID> khi bt u emulator.
V d :

emulator -skin HVGA-L

ch rng bn phi nhp <skinID> in hoa

skinID M t Skin

HVGA- 480x320,
L landscape
HVGA- 320x480, portrait
P (default)

QVGA- 320x240,
L landscape

QVGA-
P 240x320, portrait
1.2.2.i Chy nhiu Emulator mt lc

Thng qua cc cu hnh AVD c s dng bi cc emulator, bn c th chy


nhiu trng hp ca cc emulator ng thi, vi cu hnh AVD v lu tr d liu ngi
dng cho cc khu vc , SD card,ca chnh n ... Bn khng cn phi s dng ty chn-d
khi khi chy cc emulator, tr n mt khng gian lu tr c th .

1.2.2.k Ci t cc ng dng trn Emulator

Nu bn khng c quyn truy cp vo Eclipse hay ADT Plugin, bn c th ci t


cc ng dng ca bn trn emulator bng cch s dng tin ch ADB. Trc khi ci t
ng dng, bn cn phi gi n trong mt tp tin .Apk bng cch s dng cng c Android
Asset Packaging Tool(aapt).

Sau khi ng dng c ci t, bn c th bt u cc emulator t dng lnh, nh


c m t trong ti liu ny, bng cch s dng bt k ty chn khi ng cn thit. Khi
emulator chy, bn cng c th kt ni n console ca th hin Emulator s dng lnh
khi cn thit

Khi bn cp nht m ca bn, bn theo nh k gi phn mm v ci t n trn


emulator. Cc emulator duy tr cc ng dng v khi ng li qua d liu trng thi ca
n, trong phn vng d liu ngi dng ca m phng. m bo rng cc ng dng
chy ng khi bn cp nht n, bn c th cn phi xa cc phn vng d liu ngi dng
ca Emulator. lm nh vy, bt u vi ty chn wipe-data.

1.2.2.l Emulator SD Card

Bn c th to mt disk-image v sau ti n vo emulator lc khi ng, m


phng s hin din th SD trong in thoi. lm iu ny, bn c th s dng cng c
to ra mt nh card SD vi mt hnh nh mi AVD, hoc bn c th s dng tin ch
mksdcard bao gm trong SDK.

Bn c th duyt, gi tp tin vo, v (sao chp)/xa cc tp tin t mt Emulator,


hoc th SD vi ADB hoc emulator.

Cc emulator h tr emulated SDHC th, do bn c th to ra mt nh th SD


ca bt k kch thc ln ti 128 gigabyte.

To mt nh SD card s dng android tool:

Cch d nht to ra mt th SD mi l s dng cng c Android. Khi to mt


AVD, bn ch cn xc nh tu chn-c, nh th ny :

android create avd -n <avd_name> -t <targetID> -c <size>[K|M]


Bn cng c th s dng ty chn-c xc nh mt ng dn n mt th SD hnh nh
s dng trong AVD mi. bit thm thng tin, xem mc Android Virtual Devices
pha trn.

To mt nh SD card s dng mksdcard:

Bn c th s dng cng c mksdcard, bao gm trong SDK, to mt a FAT32


hnh nh m bn c th np trong khi khi emulator. Bn c th truy cp mksdcard trong
nhng cng c / th mc ca cc SDK v to mt disk-image nh th ny:

mksdcard <size> <file>

v d:

mksdcard 1024M sdcard1.iso

Sao chp cc file vo disk image:

Mt khi bn to ra Disk image, bn c th sao chp cc tp tin vo n trc khi


np n trong emulator. sao chp cc tp tin, bn c th gn kt nhng hnh nh nh l
mt vng lp thit b v sau sao chp cc tp tin vo n, hoc bn c th s dng tin
ch nh mtools sao chp cc tp tin trc tip n hnh nh. Cc mtools gi phn mm
c sn cho Linux, Mac, v Windows

Load disk image khi khi ng Emulator:

Theo mc nh, cc emulator ti trn th SD hnh nh c lu gi vi cc hot


ng AVD (xem ty chn khi ng avd).

Ngoi ra, bn bt u emulator vi c -sdcard v ch nh tn v ng dn ca


hnh nh ca bn (lin quan n cc th mc hin thi lm vic):

emulator -sdcard <filepath>

1.2.2.m Khc phc cc vn Emulator

Nhng tin ch ADB thy cc emulator l mt thit b vt l thc. V l do ny,


bn c th phi s dng c -d vi mt s lnh ADB ph bin, chng hn nh install. c
-d cho php bn ch nh ca mt s kt ni n cc thit b s dng nh l mc tiu ca
lnh. Nu bn khng xc nh -d, cc emulator s nhm mc tiu thit b u tin trong
danh sch ca n.

1.2.2.n Cc gii hn ca Emulator


Khng h tr cho vic t hoc nhn cuc gi in thoi trn thc t.tuy nhin bn
c th m phng cc cuc gi in thoi (t v nhn) qua emulator console.
Khng h tr cho cc kt ni USB
Khng h tr cho chp my nh / video (u vo).
Khng h tr cho cc thit b tai nghe km theo
Khng h tr xc nh tnh trng kt ni
Khng h tr xc nh cp pin v trng thi np AC
Khng h tr xc nh chn/ly th SD
Khng h tr cho Bluetooth

1.3 Hello World , Android


Ging nh khi lm quen bt c nn ngn ng lp trnh no ta thng tp vit ng
dng Hello world . Trong phn v d ny s trnh by vi IDE l Eclipse v chy trn
android emulator.Yu cu ci y d SDK v ADT nh phn trn gii thiu.Trc khi
khi chy emulator ta cn to 1 AVD nh ngha cho cc nh h thng v ci t cc
thit b dng trong emulator.
To mt AVD : M mt bng g lnh (command prompt) nh hng ti th
mc tools/ trong gi android sdk sau g lnh : android create avd --target 2
--name my_avd .
Cu lnh ny s to ra AVD c tn l my_avd v dng nn tng android 1.5.
To mt d n android mi : Sau khi to AVD s to 1 d n android mi.
1. Vo Eclipse , chn File NewProject s hin ra hp thoi nh
hnh 9 pha di , ta chn Android.
2. Chn Android Project v click vo next :
Hnh 3.2 : Hp thoi New Project
3. in chi tit ca d n nh sau :
Project name: HelloAndroid
Application name: Hello, Android
Package name: com.example.helloandroid (Hoc in mt
khng gian tn ca ring mnh)
Create Activity: HelloAndroid
Min SDK Version: 2
Click finish
Hinh 3.3 : Hp thoi New Android Project

4. D n android c to , ta qun l n trong explorer bn tri,


m file HelloAndroid.java (ng dn l HelloAndroid > src >
com.example.helloandroid) s hin ra ni dung ca file l :
package com.example.helloandroid;

import android.app.Activity;
import android.os.Bundle;

public class HelloAndroid extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
Mt activity l mt thc th ng dng n n c dng thc
hin cc hnh ng .Mt ng dng c th c nhiu activity c lp
nhng ngi dng tng tc vi chng vo 1 thi im . Phng
thc onCreate() s c gi bi h thng android khi activity khi
ng n l ni nn thc hin tt c cc khi to v thit lp UI.Mt
activity khng cn UI nhng thng s c.
5. Gi ta s chnh sa 1 vi dng code trong file HelloAndroid.java cho
ging on di y :
package com.android.helloandroid;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HelloAndroid extends Activity {


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, Android");
setContentView(tv);
}
}
Mt UI ca android l hp ca s phn cp ca i tng c gi
views . mt lp view l 1 i tng v c s dng nh mt phn
t ca UI( layout v d nh l mt phm , mt nh hay nh trong bi
ny l mt text label-nhn dng vn bn) . Mi i tng l 1 lp
ph ca lp view m vn bn x l l lp TextView.
Lp Activity tha k ca lp Context v v lp Helloandroid
l lp ph ca Activity nn n cng l mt Context , v th n c th
a this tham chiu ti Lp TextView.
Tip nh ngha ni dung on text Hello, Android bng
phng thc setText(CharSequence) , cui cng a tham bin ca
TextView lc ny l tv n hm setContentView() a ra ln mn
hnh , n l ni dung ca UI activity. Nu activity khng gi phng
thc ny th UI khng hin hu v h thng s hin mn hnh en.
6. Chy ng dng :
Click chut phi vo project hello trong gi explorer chn
run as Android Application
ADT s t ng to cu hnh cho d n v emulator s t
ng khi ng. Lc u emulator s khi ng 1 lc sau ng
dng s xut hin nh hnh di :

Hnh 3.4 : Giao din thc thi ca ng dng Hello World


Phn II : Thit k phn mm tm kim trn bn s ca Google
Chng I: Gii thiu v dch v v tr v bn trong android
S nh v , cc ng dng nn bn v cc dch v ca n lun hp dn i vi
ngi s dng di ng. Bn c th xy dng nhng kh nng ny trong ng dng bng
cch s dng nhng lp ca gi android.location v nhng th vin bn ngoi ca google
maps

1.1 Dch v v tr
Thnh phn trung tm ca c cu t chc location l lp LocationManager n cung
cp mt api xc nh v tr v phng hng.
Nh cc dch v h thng khc , bn khng khi to LocationManager trc tip ,
m ta yu cu mt trng hp LocationManager t h thng bng cch gi
getSystemService(Context.LOCATION_SERVICE) , khi ng dng ca bn c th :
Truy vn vo tt c danh sch LocationProviders c bit trong
LocationManager
ng k/khng ng k cho cp nht tun hon ca v tr hin ti t mt
LocationProvider
ng k/khng ng k cho mt intent c pht ra

Tuy nhin trong thi gian u pht trin trn emulator , bn c th khng truy cp
c d liu thc t mt v tr thc (v d GPS). Trong trng hp ny s cn mt vi d
liu gi thay th trong ng dng ca bn bng cch s dng Mock location provider. C 2
cch s dng d liu mock location , dng cng c DDMS hoc truy vn geo trong
emulator console :
Vi DDMS bn c th m phng d liu v tr bng mt s cch nh gi bng tay
cc ta c nhn thit b hoc c th s dng file GPX m t tuyn ng n thit
b hoc c th s dng file KML m t v tr c nh du theo mt trnh t ti thit b.
Vi geo trn emulator console , bn khi ng android emulator v m mt
terminal/console , bn c th gi mt a ch c nh gm kinh , v v cao ca v
tr .
v d : geo fix -121.45356 46.51119 4392 .
Hoc lnh geo nmea gi mt cu NMEA 0183
v d : geo nmea $GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62
1.1 Th vin h tr ca google maps
Google cung cp th vin v map trong gi com.google.android.maps bn c th
s dng cc phng thc trong cc lp ca gi ny thc thi vi d liu map ca google
maps, cho php ng dng hin th v iu khin mt interface google map.
Tm tt cc Interface

ItemizedOverlay.OnFocusChangeListene Interface ny lng nghe s kin khi mt


r item thay i tiu im.

Interface ny nh ngha cho overlay cha


Overlay.Snappable
cc item m c th canh v mt bn.

Dng chuyn dch gia ta h thng


ca cc pixel trn mn hnh v ta
Projection
kinh/v ca im trn b mt ca tri t
trn map.
Enum Summary

MapView.ReticleDrawMod
Cho php ngi dng ch ra kiu c v.
e

1.3 Cu trc d liu ca bn s google maps


Google maps s dng d liu v tinh ging nh ca google earth.D liu google maps c
d liu vect v d liu hnh nh, kml.

D liu vect : bao gm im , ng , ng dn , a gic. Thng thng, d


liu im c dng m t v tr c th nh trung tm ca mt thnh ph ng
v ng dn c th c dng cho d liu ng v ng bin gii trong khi a
gic c th c dng m t d liu khu t hoc xc nh cc khu vc khc v
d nh h.
D liu hnh nh : l bn v tinh trn khng, bn a hnh , gi l hnh nh
GIS
KML: Ngn ng nh du Keyhole, l nh dng tp v ng php XML lp m
hnh v lu tr cc c im a l nh im, ng, hnh nh, a gic, v m hnh
hin th trong Google Maps. Bn c th s dng KML chia s thng tin v
a im vi nhng ngi dng khc v cc ng dng ny.

Google maps c th c file .kml hoc kmz . Tuy nhin google maps c th ch hin th
mt s d liu t file kml.Google maps h tr cc tp con ca phn t kml nh:
Placemarks vi tag l <name>
Points
Icons
Folders
HTML trong tag <description>
KMZ (dng nn ca KML)
LineStrings and Polygons
Cc kiu thuc tnh ca polylines and polygons,bao gm mu sc , dy ,
trong sut.
Chng II: Chi tit cch ly d liu ca google maps
1.1 ng k mt api key v hin map n gin vi mt MapActivity
V ng dng ny s s dng c s d liu bn ca google nn ta phi ng k
mt api key c th kt ni n c s d liu ca google v s dng .
Vy trc ht l ng k mt api key , mun ng k api key ta phi ly m chng
nhn MD5 ca ng dng .
ly m ny trc ht ta copy file debug.keystore (file ny c to ra khi
ln u tin ta chy ng dng android t Eclipse) th mc "C:\Documents
and Settings\<username>\.Android" t vo th mc C:\Android(th mc
ny l th mc cha android sdk).
Sau dng cng c keytool.exe ca java ( th mc C:\Program
Files\Java\<JDK_version_number>\bin) ly m MD5 trong file debug.keystore . Ta
khi ng command prompt , ch dn n th mc bin cha keytool.exe v nh lnh :
keytool.exe -list -alias androiddebugkey -keystore "C:\android\debug.keystore"
-storepass android -keypass android .
ta s thu c m MD5 nh hnh di y :

Hnh 3.5 : Dng keytool ly m MD5


Tip theo truy cp vo a ch http://code.google.com/android/maps-api-
signup.html v dng m MD5 ang ng k api key mt cch d
dng.Trong demo ny dng api key :
0gzto9ELvbtULxcmJ3nv3Kj5DAb2Z0E7zRxfeDA
Cc bc :
1. To mt AVD s dng nn tng Google-APIs-1.5 bng cch vo
Eclipse ,trn thanh menu chn WindowsAndroid AVD Manager sau in cc
thng s v chn Create AVD nh hnh di y :
Hnh 3.6 : To AVD
2. To d n mi ly tn l AppMapView v cc thng s nh hnh di :
Hnh 3.7:To d n AppMapView
3. M file AndroidManifest.xml ca d n , thm dng code
<uses-library android:name="com.google.android.maps" /> pha trong
tag <Application> , dng code ny gip ta s dng c th vin ca
Google maps.
ng dng truy cp INTERNET c , ta thm dng code :
<uses-permission android:name="android.permission.INTERNET" />
vo trong tag <manifest> ca file AndroidManifest.xml. Khi file
AndroidManifest.xml s l :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="net.learn2develop.GoogleMaps"
android:versionCode="1"
android:versionName="1.0.0">
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<uses-library android:name="com.google.android.maps" />
<activity android:name=".MapsActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
</xml>

4. M file layout main.xml,lp mt layout vi phng thc mt


com.google.android.maps.MapView bn trong lp layout
android.widget.RelativeLayout . File main.xml thnh :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<com.google.android.maps.MapView
android:id="@+id/mapview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"
android:apiKey="Your Maps API Key"
/>
</RelativeLayout>
Thuc tnh clickable thit lp gi tr true cho ngi dng tng tc
vi bn .
Gi tr apiKey l key bn ng k vi google.
5. M file AppMapView.java ,ta import thm 2 gi l
com.google.android.maps.MapActivity;
com.google.android.maps.MapView;
Chnh cho lp AppMapView k tha lp MapActivity thay v Activity
mc nh.Thm mt phng thc isRouteDisplayed() c yu cu ca lp
MapView vo lp chung v cho tr v gi tr false.Sau khi chnh sa file
java thnh :
import com.google.android.maps.MapActivity;

import com.google.android.maps.MapView;

import android.os.Bundle;

public class AppMapView extends MapActivity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

@Override

protected boolean isRouteDisplayed() {

return false;

By gi c th cho chy ng dng nhng mi dng li mc xem


bn .Ta cn thm chc nng zoom cho ng dng xem bn d hn.
6. Ta thm mt LinearLayout vo file layout vi ni dung :

<LinearLayout
android:id="@+id/zoomview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/mapview"
android:layout_centerHorizontal="true"
/>
V t LinearLayout ny nm trong RelativeLayout.Layout ny gip
nh hng vic zoom.
7. Trong file AppMapView.java ta to mt i tng ZoomControls
ca lp MapView v thm vo layout mi.Trc ht ta khi bo cc i
tng LinearLayout , MapView, ZoomControl sau khi to gi tr cho
chng trong hm onCreate() ln lt l :
linearLayout = (LinearLayout) findViewById(R.id.zoomview);
mapView = (MapView) findViewById(R.id.mapview);
mZoom = (ZoomControls) mapView.getZoomControls();
s dng cc i tng ny ta cn import thm 2 gi :
import android.widget.LinearLayout;
import android.widget.ZoomControls;
Bng cch s dng cc i tng ZoomControl c cung cp bi
MapView, chng ta thc s khng cn thit phi lm bt c hnh ng kh
khn thc hin zoom. Cng c ZoomControls sn sng c a vo
trong MapView cho chng ta v lm vic ngay khi ta thm vo cc layout.
Cc control s xut hin khi user chm vo map, v bin mt sau mt lc
khng c s dng.
8. Gi ta chuyn cc ZoomControl vo LinearLayout :
linearLayout.addView(mZoom);
File AppMapView.java sau khi vit :
package com.AppMapView;

import com.google.android.maps.MapActivity;

import com.google.android.maps.MapView;

import android.widget.LinearLayout;

import android.os.Bundle;

import android.widget.ZoomControls;

public class AppMapView extends MapActivity {

LinearLayout linearLayout;

MapView mapView;

ZoomControls mZoom;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

linearLayout = (LinearLayout) findViewById(R.id.zoomview);

mapView = (MapView) findViewById(R.id.mapview);

mZoom = (ZoomControls) mapView.getZoomControls();

linearLayout.addView(mZoom);

@Override

protected boolean isRouteDisplayed() {

return false;

}
Sau khi hon thnh , chy ng dng ta click chut phi vo d n
chn run asAndroid Application v ch cho emulator khi ng mn
u xong th s hin ra :

Hnh 3.8 : Giao din thc thi AppMapView

2.2 Tm v tr v ng i trn bn ca google maps


2.2.1 Tm v tr
Trong gi com.location ca android c cung cp mt lp l Geocoder n cung cp
cho ta cc phng thc chuyn i t mt a ch ng ph hoc nhng m t ca v
tr thnh ta (kinh v v ) v ngc li v d mt hm tm ta v tr khi bit tn:
private void NameToCoordinate(String nameposition){
Geocoder geoCoder=new Geocoder(this,Locale.getDefault());
try{
List<Address> addresses= geoCoder.getFromLocationName(nameposition, 5);
if (addresses.size() > 0) {
p = new GeoPoint(
(int) (addresses.get(0).getLatitude() * 1E6),
(int) (addresses.get(0).getLongitude() * 1E6));
}
else Toast.makeText(getBaseContext(),
"Position not found",
Toast.LENGTH_SHORT).show();
}catch (IOException e) {
e.printStackTrace();
}
}

V hm tm tn ca mt ta bit:
private void CoordinateToName(GeoPoint p){
Geocoder geoCoder = new Geocoder(getBaseContext(),
Locale.getDefault());
try {
List<Address> addresses = geoCoder.getFromLocation(
p.getLatitudeE6() / 1E6,
p.getLongitudeE6() / 1E6, 1);
point = "";
if (addresses.size() > 0)
{
for (int i=0; i<addresses.get(0).getMaxAddressLineIndex();
i++)
point+= addresses.get(0).getAddressLine(i) + " ";

}
}
catch (IOException e) {
e.printStackTrace();
}
}

Trong 2 hm trn dng 2 phng thc l getFromLocationName v


getFromLocation ly ta v a ch ca v tr tng ng .

2.2.2 Tm ng i gia 2 im
Trong phn ny s trnh by cch gi yu cu ln trang web google maps thng
qua cc tham bin c qui nh v nhn v tuyn l trnh cn tm c lu trong file
*.kml . T lc d liu trong file kml v th hin tuyn l trnh gia 2 im trn bn
bng cch a ra cc ch dn c th cho ngi dng v v tuyn l trnh trn bn
nh vo thng tin ly trong file kml.
ly d liu v l trnh th trc ht cn gi ln maps.google.com cu truy vn v
d: http://maps.google.com/maps?
f=d&hl=en&saddr=25.04202,121.534761&daddr=25.05202,121.554761&ie=UTF8&0&o
m=0&output=kml
trong cu truy vn trn ta hiu saddr=im bt u v daddr=im kt thc,f=d l kiu
hin th direction t 2 im ,ie=UTF8 ch nh dng k t nhp l kiu utf8,output=kml l
nh dng file s xut ra l kml.

Trc ht gi cu truy vn ny ln maps.google.com , trc tin gn n vo mt chui


dng StringBuilder nh:
StringBuilder urlString = new StringBuilder();
urlString.append("http://maps.google.com/maps?f=d&hl=en");
urlString.append("&saddr=");//from

urlString.append( Double.toString((double)src.getLatitudeE6()/1.0E6 ));


urlString.append(",");
urlString.append( Double.toString((double)src.getLongitudeE6()/1.0E6
));
urlString.append("&daddr=");//to
urlString.append( Double.toString((double)dest.getLatitudeE6()/1.0E6
));
urlString.append(",");

urlString.append( Double.toString((double)dest.getLongitudeE6()/1.0E6 ));


urlString.append("&ie=UTF8&0&om=0&output=kml");

Hai ta ca im src v dest c ly t 2 v tr do ngi dng nhp vo , lu l ta


phi chia ta cho 1e6(1 triu) v cu trc ca GeoPoint trong android lu nhng ta
micro degrees.Sau gi ln google bng phng thc HttpURLConnection ca java :
HttpURLConnection urlConnection= null;
URL url = null

url = new URL(urlString.toString());


urlConnection=(HttpURLConnection)url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);

urlConnection.setDoInput(true);

urlConnection.connect();

Sau parse file kml thu c sang dng doc


DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.parse(urlConnection.getInputStream());

Trong file kml c 1 on d liu lu cc im trong tuyn l trnh :


Ta ly cc ta ny lm d liu v tuyn l trnh trn bn .

2.3 M phng Gps trn Emulator


Trong Eclipse c cng c DDMS h tr truyn ta m phng gps , ta s dng
n test v m phng ng dng gps
Phn kt lun
Android v ang pht trin rt mnh , tr nn gn gi hn vi ngi dng t
tr thnh mt th lc cnh tranh kch lit vi cc nn tng di ng ph bin hin nay nh
Windows mobile , Symbian , Brew , Android cn c so snh trc tip vi nn tng
c cho l thu ht nht hin nay Iphone OSX.
N m ra mt tng lai mi cho s pht trin ca h thng di ng , tri nghim
hp dn vi ngi dng v c nhng nh pht trin.
Bo co thc tp thc tp tt nghip Ti liu tham kho

Ti liu tham kho


1. Developers Guide ca trang ch ca Android Android.com.
2. Trang code.google.com.
3. Trang g-android.com.

V c Mnh-D05THA1 Trang 89

You might also like