Professional Documents
Culture Documents
Tai Lieu Android Tieng Viet Full
Tai Lieu Android Tieng Viet Full
TP.HCM, 2010
LI GII THIU
Android l mt h iu hnh m ngun m c pht trin da trn nhn
Linux. Trong mt hai nm tr li y, s pht trin ca Android c nhng bc
pht trin mnh m v dn chim cm tnh ca ngi dng. Do c li th l c
xy dng theo tiu ch m nn vic pht trin ng dng trn Android c cho l
kh d dng. Tuy nhin, ngun ti liu lp trnh c ng dng chy trn
Android kh l ri rc v cha c s sp xp v t chc tt. Chnh v th m cun
Ph lc ny c vit ngoi mc ch h tr cho Kha lun Tm hiu H iu
hnh Android v xy dng ng dng minh ha cn c mc ch cao hn l
cung cp nhng ci nhn c bn nht, chung nht gip cho ngi c c th d dng
nm bt, hc hi cch thc vn hnh cng nh pht trin ng dng trn h iu
hnh nhiu tim nng ny.
Do thi gian thc hin ti kh ngn cho nn vic thiu st trong khi vit
phn Ph lc ny l mt iu khng th trnh khi. Nhm chng em rt mong c
s gp t Thy C v cc Bn. Nhm chng em xin chn thnh cm n.
MC LC
MC LC.............................................................................................................. 3
DANH MC CC HNH ...................................................................................... 9
Ph lc A
smart phone 19
Ph lc B
B.2
B.3
Bo co ca Admob ................................................................................ 26
B.4
Bo co ca Myxer ................................................................................. 28
Ph lc C
Ph lc D
Ph lc E
Ph lc F
nht
39
Ph lc G
G.1
G.1.1
G.1.2
G.2
G.2.1
G.2.3
G.3
G.3.1
G.3.2
G.4
project ................................................................................................................ 87
G.4.1
G.4.2
G.4.3
G.5
G.5.1
G.5.2
G.5.3
G.5.4
G.6
G.6.1
G.6.2
G.6.3
G.6.4
G.6.5
G.6.6
Ph lc H
H.1
H.1.1
Gii thiu lp trnh giao din trn Android v cc tnh nng ca n 137
H.1.2
H.1.3
H.1.4
H.1.5
H.1.6
H.1.7
H.2
H.2.1
H.2.2
H.3
Ph lc I
I.1
I.10.1
I.10.2
I.10.3
I.11
I.11.1
I.11.2
I.11.3
I.12
I.12.1
I.12.2
Ph lc J
J.1
J.2
Ph lc K
Ph lc L
L.2
L.2.1
L.2.2
L.3
L.3.1
L.3.2
Cc chc nng thc hin sau khi chp c m vch hng ha ...... 259
L.4
L.5
L.6
L.6.1
L.6.2
L.6.3
L.6.4
L.6.5
L.7
L.8
L.8.1
L.8.2
L.8.3
Ph lc M
M.2
M.3
M.3.1
M.3.2
M.3.3
Cch thc tm v tr thit b thng qua GPS hoc mng .................. 281
M.4
M.4.1
M.4.2
M.5
M.5.1
M.5.2
DANH MC CC HNH
Hnh ph lc 1 H iu Hnh Android Ca Google - Phn trm ngi d nh mua
smart phone dng h iu hnh Android trong vng 90 ngy ti (theo
ChangeWave) ................................................................................................. 19
Hnh ph lc 2 ng T l s ngi dng d nh mua smart phone dng h iu
hnh gia t thm d 09/2009 v 12/2009 (theo ChangeWave) .................... 20
Hnh ph lc 3 T l ngi dng smart phone trong t thm d thng 12/2009
(theo ChangeWave) ........................................................................................ 21
Hnh ph lc 4 Biu s ngi mua smart phone trong vng 90 ngy ti th nh
sn xut smart phone no d nh mua gia t thm d thng 9/2009 v
12/2009 (theo ChangeWave) .......................................................................... 22
Hnh ph lc 5 Mc Hi Lng Da Trn H iu Hnh Trong t Thm D
Thng 12/2009 (theo ChangeWave) ............................................................... 23
Hnh ph lc 6 D liu thng k trong 2 tun cui t ngy 4/1/2010 ..................... 25
Hnh ph lc 7 Thng k so snh ba phin bn h iu Android gia hai thi im
17/12/2009 v 04/01/2010 .............................................................................. 25
Hnh ph lc 8 Th phn cc h iu hnh trn smart phone theo tng khu vc ..... 26
Hnh ph lc 9 Th phn h iu hnh trn ton th gii ........................................ 27
Hnh ph lc 10 Biu cnh tranh gia iPhone v Android t 01/01/2009 n
01/12/2009 ..................................................................................................... 28
Hnh ph lc 11 Kin trc Android theo tng tng (ngun developer.Android.com)
....................................................................................................................... 42
Hnh ph lc 12 Trang web ti v Java SE trn Windows ...................................... 46
Hnh ph lc 13 Mc Eclipse cn ti v lm IDE cho pht trin Android .......... 47
Hnh ph lc 14 Mc cn ti v ADT (ngun developer.Android.com) ................. 49
Hnh ph lc 15 Biu din trnh t v quan h gia Java SE, Android SDK, ADT v
Eclipse. .......................................................................................................... 49
Hnh ph lc 16 Mc Android SDK cn ti v dng trn Windows .................. 50
Hnh ph lc 17 La chn mc Java SE (JDK) 6 ................................................... 51
10
11
12
Hnh ph lc 99 Hnh minh ha cch thc dng dng lnh thc thi cng c adb
..................................................................................................................... 135
Hnh ph lc 100 Hnh minh ha cch thc to bin mi trng (Windows XP) . 135
Hnh ph lc 101 Hnh minh ha giao din ng dng NhatTrungHelloAndroid .. 138
Hnh ph lc 102 on m lnh XML to giao din cho ng dng
NhatTrungHelloAndroid .............................................................................. 138
Hnh ph lc 103 Hnh minh ha cho vic ko th giao din t khung Layouts v
Views ........................................................................................................... 139
Hnh ph lc 104 Hnh minh ha cho vic to giao din t khung Outline........... 139
Hnh ph lc 105 Hnh minh ha vic thm mt phn t mi t khung Outline ... 140
Hnh ph lc 106 Cc cng c h tr bn trong th mc Android SDK ............... 141
Hnh ph lc 107 Giao din cng c Hierarchy Viewer ....................................... 141
Hnh ph lc 108 Nhm thuc tnh thng gp trn mt TextView ..................... 143
Hnh ph lc 109 Nhm thuc tnh thng gp trn mt LinearLayout ............... 143
Hnh ph lc 110 Hnh nh cc View di gc nhn hng i tng ................. 144
Hnh ph lc 111 Hnh nh minh ha ca mt Linear Layout .............................. 145
Hnh ph lc 112 Hnh nh minh ha ca mt Relative Layout ........................... 146
Hnh ph lc 113 Hnh nh minh ha ca mt Absolute Layout .......................... 147
Hnh ph lc 114 Hnh nh mt s View thng dng........................................... 148
Hnh ph lc 115 Hnh nh minh ha cu trc dng cy ca mt giao din bt k
..................................................................................................................... 148
Hnh ph lc 116 Hnh minh ha to giao din bng m lnh XML .................... 149
Hnh ph lc 117Hnh minh ha to giao din bng Java..................................... 149
Hnh ph lc 118 Cu trc xy dng giao din bng XML .................................. 150
Hnh ph lc 119 Hnh minh ha vic qun l cc View thng qua nh danh ID 152
Hnh ph lc 120 Hnh minh ha mt Linear Layout ........................................... 154
Hnh ph lc 121 Hnh minh ha cho thuc Layout_weight ................................ 157
Hnh ph lc 122 Hnh minh ha cho mt Table Layout ..................................... 158
Hnh ph lc 123 Hnh minh ha cho mt Frame Layout..................................... 160
13
14
15
16
Hnh ph lc 195 Menu ca mn hnh tm kim hng ha theo chui .................. 264
Hnh ph lc 196 Mn hnh tr gip ngi dng tm kim hiu qu hn ............. 265
Hnh ph lc 197 Mn hnh tm theo danh sch h thng cc siu th .................. 266
Hnh ph lc 198 Mn hnh danh sch siu th con ca h thng siu th ............. 266
Hnh ph lc 199 Cc chc nng khi chn vo mt siu th trong mt h thng siu
th ................................................................................................................. 267
Hnh ph lc 200 Mn hnh thng tin chi tit ca mt siu th ............................. 268
Hnh ph lc 201 Mn hnh thng tin bn ng i n siu th ..................... 269
Hnh ph lc 202 Menu ca ng dng bn ng i n siu th .................... 269
Hnh ph lc 203 Mn hnh tm kim theo danh mc hng ha v loi hng ha
tng ng ..................................................................................................... 270
Hnh ph lc 204 Mn hnh danh sch cc mt hng a thch .............................. 271
Hnh ph lc 205 Mn hnh danh sch hng ha cn mua .................................... 271
Hnh ph lc 206 Menu ca mn hnh danh sch hng cn mua .......................... 272
Hnh ph lc 207 Mn hnh thm hng ha cn mua ........................................... 272
Hnh ph lc 208 Mn hnh xa hng cn mua .................................................... 273
Hnh ph lc 209 Hp thoi hi ngi dng c thc s mun xa mt mt hng no
hay khng ................................................................................................ 273
Hnh ph lc 210 Mn hnh gi tin nhn hng cn mua ....................................... 274
Hnh ph lc 211 Mn hnh s dng b g Ting Vit IME trn Android 1.5 v 2.1
..................................................................................................................... 276
Hnh ph lc 212 Ni dung ca mt gi m ngun ZXing ................................... 277
Hnh ph lc 213 M ngun ZXing dnh cho HH Android ............................... 277
Hnh ph lc 214 ng dng v ng i trn bn Google Map trong
eSaleShopping.............................................................................................. 281
Hnh ph lc 215 Hnh minh ha v bug li ca EndlessAdapter ......................... 283
Hnh ph lc 216 Hnh minh ha ca ng dng Magnatune ................................ 284
Hnh ph lc 217 Cc lp to hiu ng chuyn ng c dng li trong ng dng
eSaleShopping.............................................................................................. 285
17
18
Ph lc A
20%
15%
10%
5%
0%
1%
2%
2%
4%
4%
6%
3%
Hnh ph lc 1 H iu Hnh Android Ca Google - Phn trm ngi d nh mua smart phone dng
h iu hnh Android trong vng 90 ngy ti (theo ChangeWave)
19
32%
28%
25%
21%
20%
18%
17%
t thm d (09/2009)
15%
t thm d (12/2009)
9%
10%
6%
6%
5%
6%
3%
0%
iPhone OS X
Google
Android
BlackBerry
RIM OS
Windows
Palm
Mobile OS/Web OS
Hnh ph lc 2 ng T l s ngi dng d nh mua smart phone dng h iu hnh gia t thm
d 09/2009 v 12/2009 (theo ChangeWave)
20
45%
40%
37%
35%
32% 32%
30%
27%
25%
22% 23%
20% 21%
20%
15%
17%
15% 16%
39%
34%
T l s
ngi
dng
smartph
one
10%
5%
0%
Hnh ph lc 3 T l ngi dng smart phone trong t thm d thng 12/2009 (theo ChangeWave)
21
40%
35%
30%
25%
36%
32%
27%
21%
20%
13%
15%
10%
5%
t thm d 09/2009
9%
5%
8%
t thm d 12/2009
4%
1%
0%
Hnh ph lc 4 Biu s ngi mua smart phone trong vng 90 ngy ti th nh sn xut smart
phone no d nh mua gia t thm d thng 9/2009 v 12/2009 (theo ChangeWave)
22
77%
72%
41%
33%
25%
iPhone OS X
Google
Android
T l ngi
dng ni l
h rt hi
lng vi h
iu hnh
trn smart
phone ca
h ang
dng
Windows
Mobile
23
Ph lc B
trong
nhng
nm
gn
(theo
iTech.vn
ngy
25/01/2010)
H iu hnh non tr ca Google c mt nm 2009 rt thnh cng, nht
l trong 2 qu cui nm ngoi. y c xem l bc m vng chc Google
Android tip tc gt hi c nhng thnh cng trong nm 2010:
c s hu thun to ln t Google v cc nh sn xut di ng hng u
hin nay nh HTC, Motorola, Sony Ericsson, Samsung, Acer, h iu hnh Google
Android ang dn c nhiu ngi bit n v tr thnh mt i th ng gm
cho cc h iu hnh di ng khc nh Windows Mobile, Symbian v c bit l
RIM OS, WebOS v iPhone OS trong phn khc in thoi thng minh.
Di y l nhng thng k mi nht lin quan n nn tng di ng linh
hot v mnh m ny:
B.1
24
25
B.2
B.3
Bo co ca Admob
Cng ty qung co trn di ng Admob va mi a ra cc thng k mi
26
27
B.4
Bo co ca Myxer
Bo co ca Myxer, cng ty gii tr trn di ng vi hn 30 triu thnh vin
cho thy lng ngi dng truy cp vo website ca cng ty qua di ng s dng
Android tng n 350% trong nm 2009, vt qua tng trng ca iPhone vi
170%.
Phc Trn (Theo AndroidAndMe- ReadWriteWeb - Gigaom)
28
Ph lc C
thit b cm tay m
Cc nh
iu
hnh
mng
Tp
on
truyn thng
di ng Trung
Quc
Vin
thng
mng lin hip
Trung quc
Cng ty NTT
DoCoMo
Vin
thng
Bouyguee
Tp on
truyn thng
Trung Quc
Tp
on
KDDI
Cng ty
phn
mm
Tp on di
ng
SOFTBANK
Sprint Nextel
Truyn thng
T-mobile
Vodafone
Tp
on
Ascender
eBay
KivingImage
LTD
Myriad
Cng ty truyn
thng Nuance
Cng ty phn
mm OMRON
PacketVideo
SkyPop
SONiVOX
Telefonica
29
SVOX
Cng ty
bn dn
Cc nh
sn
xut di
ng
Cng ty bn
dn AKM
Audience
ARM
Truyn thng
Atheros
Tp
on
Broadcom
CSR Plc
Tp on bn
dn Cypress
Cng ty bn
dn Freescale
Tp on Intel
Cng ty bn
dn Marvell
Cng ty cng
ngh MIPS
Tp
on
NVIDIA
Qualcomm
Cng
ngh
Renesas
ST-Ericsson
Cng
Synaptics
Texas
Instruments
Incoporated
Acer
Via Telecom
ty
in thoi di
ng Alcatel
Cng ty my
tnh AsusTek
Foxconn
International
Holdings
Limited
30
Cng ty quc
t Garmin
Tp on HTC
Cng
ngh
Huawei
Kyocera
Lenovo
LG
Motorola
Samsung
Sony Ericsson
Toshiba
Tp on ZTE
31
Ph lc D
Android
HTC
Dng
in Ngy ra mt
thoi
HTC Bravo
Sp ra mt
Hnh nh
Android 2.0
NexusOne
05/01/2010
Android 2.1
HTC Tattoo
07/09/2009
Android 1.5
HTC Hero
24/06/2009
Android 1.5
HTC Magic
30/04/2009
Android 1.5
32
HTC
Dream(G1)
05/02/2009
Android 1.5
Qu 2 nm 2009
Android 1.5
Motorola
Milestone
Qu 1 nm 2010
Android 2.0
Motorola
BackFlip
Qu 1 nm 2010
Android 1.5
Motorola
(DEXT
MB220)
Cliq Qu 4 nm 2009
Android 1.5
SAMSUNG
Galaxy i7500
MOTOROLA
ACER
33
Acer Liquid
Qu 4 nm 2009
Android 1.6
SONY ERICSSION
Sony Ericsson Qu 1 nm 2010
XPERIA X10
Androi 1.6
34
Ph lc E
smart phone
Android
Blackberry
iPhone
S60 5th
Palm
Windows
Cupcake
OS 4.7
OS 3.0
Edition
WebOS
Mobile 6.5
Cc thng s c bn
Loi
Linux
S hu
OS X
Symbian
Linux
Windows
nhn
ring
CE
kh Xut sc
Tt
Km
Xut sc
Xut sc
Xut sc
Tui i Mi
Trng
Lu nm
Trng
Mi
Trng
ca nn
thnh
m ca
nn tng
thnh
thnh
tng
Doanh
Khng
nghip
BlackBerr
Exchange,
Exchange
Exchange,
Domino,
Domino,
BlackBerry
tc
blakcBerr
tr
u tin
Cng
GSM,
GSM,
GSM,
GSM,
GSM,
GSM,
ngh kt WiFi
CDMA,
WiFi
WiFi
CDMA,
CDMA,
ni
WiFi
WiFi
WiFi
khng
dy
Giao din ngi dng
35
5th Palm
Android
Blackberry
iPhone
S60
Cupcake
OS 4.7
OS 3.0
Edition
WebOS
Mobile 6.5
Hn ch
Hn ch
in dung
in tr / in dung in dung
Ra hiu C
Windows
trn mn
hnh
Cng
in dung in dung
in dung
ngh
mn
hnh
a cm C
ng
Khng
Khng
Khng
Khng
(khng
chnh
thc)
Lp bao C
giao
din
Phng
thc
o,
nhp
liu
bn o
phm
o,
bn vt l
o,
bn
phm vt
phm
vt
phm
vt
l,
kh
l,
nng nhn
nhn
din k t
din k t,
T9
Tnh nng chnh
Kiu
5th Palm
Android
Blackberry
iPhone
S60
Cupcake
OS 4.7
OS 3.0
Edition
WebOS
Mobile 6.5
Pop-up
Pop-up
Khay
Khay, Pop-
Khay
thng
Pop-up,
nn
Windows
up
bo
Cng c Google
BES, BIS
Exchange,
36
Exchange,
Synergy
Exchange,
qun l /
ActiveSyn
Danh b
c, Mac OS BlackBerr
BlackBerry
tng
Address
thch
Book
X l a C
Domino,
Domino,
y, iSync
ActiveSync
Khng
Ovi
Amazon
Windows
nhim
Ct
/ C
dn
H
tr Amazon
Non-DRM iTunes
iTunes
Media
phng
Player
tin
Global
Khng
Khng
Khng
OTA
Tethered,
Tethered
Tethered,
Khng r
Tethered,
Search
Cp
nht
OTA
OTA
OTA
firmwar
e
Trnh
Webkit
duyt
hu Webkit
Webkit
Webkit
ring
Tetherin
(khng
Internet
Eplorer
chnh
thc)
Stereo
Bluetoot
h
Kh nng h tr cc nh pht trin
Android
Blackberry
iPhone
S60
Cupcake
OS 4.7
OS 3.0
Edition
37
5th Palm
WebOS
Windows
Mobile 6.5
SDK
Ca
Trung
Trung
Cao
Trung
Thp
Cao
hng
ng
dng
trc
tuyn
ng
dng b bnh
bnh
bnh
sung
Cc ng Khng
Khng
Khng
Tt
Xut sc
Tt
Xut sc
Tt
dng
ban u
Kh
Xut sc
nng
qun l
ng
dng
trn
thit b
38
Ph lc F
39
40
Ph lc G
Tnh nng
41
ng dng (Application)
Khung ng dng
42
cng thit b, ly thng tin v tr, chy ngm cc dch v, thit lp cnh bo, thm
thng bo vo thanh trng thi v nhiu ci khc na.
Cc nh pht trin c th tc ng su vo khung API m cc ng dng
chnh ang dng. Kin trc ng dng c thit k n gin ti s dng li cc
thnh phn trong ng dng . Nh ng dng mua sm xem gi c c th s dng
li ng dng chp m vch BarcodeZXing.
Tt c cc ng dng nn l mt b cc dch v v h thng, bao gm:
B cc View a dng v c th ty bin bao gm: danh sch
(listView), li (gridView), textbox, nt (Button), v cc View khc.
Content Provider: cho php ng dng ly d liu t ng dng khc (v
d danh b) hoc chng chia s d liu vi nhau..v .v . . .
Resource Manager: cho php truy xut cc ngun ti nguyn cc b
nh chui tnh, hnh nh v tp tin khai bo giao din, .v. v
Notification Manager: cho php ng dng trnh by cnh bo ty bin
trn thanh trng thi.
Activity Manager: qun l vng i ng dng.
hiu thm v khung ng dng, cc bn c th tm hiu thm trong project
Notepad.
G.1.2.5
Th vin
43
Android Runtime
Li Linux
G.2.1.1
45
46
thiu l 3.4 (Ganymede) hay 3.5 (Galileo) nhng theo chng ti nn chn phin bn
Eclipse mi nht trn a ch ti v Eclipse bn trn t c s h tr ti a t
Eclipse IDE.
48
Eclipse
ADT
Android SDK
Java SE JDK
Hnh ph lc 15 Biu din trnh t v quan h gia Java SE, Android SDK, ADT v Eclipse.
49
Ci t Java (JDK)
Vo trang http://developers.sun.com/downloads/ ti b JDK mi
nht v my tnh.
Tin hnh theo cc bc sau ci t JDK.
Chn mc Java SE Java SE (JDK) 6
50
51
Chn ni lu tr
52
Ci t Eclipse
Vo trang http://www.eclipse.org/downloads/ ti v b Eclipse
53
54
55
56
qua
ch
http://dl.google.com/android/ADT-0.9.5.zip. Lu
tp tin ny vo a C ca my tnh, lu l
khng gii nn.
57
58
59
60
Ci t Android SDK:
Chn mc Available Packages pha bn tri ca Android SDK
and AVD Manager v ch chng trnh cp nht thng tin cc gi h tr
Android mi nht.
61
62
63
Nhn xt:
Ch vic to my o
64
ca chng
Nh ni trong cc phn trc ca chng ny, trong th mc Android
SDK cha cc cng c v ti liu cho vic lp trnh Android. Ta ch vo hnh sau:
65
Ta cn ch cc th mc sau:
Add-ons: cha cc b APIs cho b th vin ca Google nh Google
Maps chng hn. Trong cha cc phng thc cng vi ti liu hng
dn cho t b API.
Docs: cha ti liu hng dn cc b hm cho ton Android.
Platform: cha cc nn tng Android tng ng vi tng my o chy
trn tng h iu hnh Android tng ng.
Tools: Trong ny cha tt c cc cng c h tr lp trnh Android.
SDK Setup: y l tp tin khi ng hp thoi tng ng vi hp
thoi c m bi trnh n Android SDK v AVD Manager.
Ngoi ra, khi to my o, bn trong th mc C:\Users\<user>\.android
(Windows 7) c tp tin debug.keystore. Hy nh tp tin debug.keystore ny v sau
ny nh tp tin ny m ta c th lp trnh vi bn Google Map.
G.2.3.3
Bn c th vo th mc ..\android-sdk-windows\platforms\android-2.1 v
tm ti trong . C rt nhiu thnh phn m c c th vc nh data, images,
samples, skins, templates v tools. Nhng th mc ny cha cc v d v cc tp tin
h thng v giao din cng nh cc ti nguyn m ta c th tham kho rt tt. Theo
kinh nghim chng ti, trong th mc \sample v th mc \data c rt nhiu ti
nguyn cho cc bn tham kho.
66
G.3 Bc
lm
quen
vi
Android
HelloNhatTrungApp
G.3.1 Cc bc to project HelloNhatTrungApp
G.3.1.1
Bc 1: To project mi
67
qua
project
dng Java trn Eclipse th s mt khong thi gian hiu cc khi nim c bn
nh Package name hay Contents vi cc ty chn khc nhau. T mn hnh ny,
chng ti s gii thch s lc mi mc chng ti chn l g chng ta c th lm
quen vi ng dng u tay ca cc bn.
in vo tn ng dng Project name: HelloNhatTrungApp. Do chng ta to
ng dng mi t u cho nn ta chn mc Create new project in workspace trong
phn Contents. Nu to ng dng mi t ngun code c sn th ta chn mc Create
project from existing source. Cn nu khng th chn Create project from existing
sample nu mun chy th cc v d c sn c trong th mc ../Android-SDKwindows/add-ons/. Chng ta tm tm gn cc mc trong Contents nh sau:
Create new project in workspace: To ng dng Android hon ton
mi.
Create project from existing source: To ng dng Android t ngun
c sn.
Use default location: chn ni lu ng dng Android mc nh.
Create project from existing sample: To ng dng Android t v d
sn c ca Android SDK.
Phn Build target cho ta chn cc phin bn h iu hnh m ng dng s
c ci ln nhn c s h tr t h iu hnh. V d nh nu ta vit ng
dng c nhn bit ging ni th phi chn Android 2.1 vi API mc 7 nhn s
h tr t h iu hnh. Ngoi ra, nu ng dng c s dng cc hm h tr bn
hay cc dch v khc t Google th ta chn Google API 2.1 mc 7. Nhn chung,
v c bn Google API 2.1 cng ging nh Android 2.1 nhng c thm cc h tr
bn v cc hm dch v khc t Google cung cp. Tm tm gn cc mc trong
Build target nh sau:
Android 1.1: ng dng s c ci t trn thit b di ng c h iu
hnh Android 1.1. Tng t cho cc Android 1.5, 1.6, 1.6, 2.0, 2.01, 2.1.
69
70
71
l Potrait
. Phn
dng di
Ta s thy hp thoi:
73
74
thm vo Button.
75
tng
cho
Button01
thnh
76
Cc bn c th lp trnh trc tip bng dng lnh xml nhng chng ti e rng
n s kh khn hn nhiu so vi vic ko th hay cch thm vo nh chng ti
ngh.
Nh vy, to mn hnh giao din bc u hon thnh xong.
G.3.1.3
Bc 3 Lp trnh x l
77
Android ny th lp giao din c tch bch khi lp trnh bng tp tin XML v
vic lp trnh nh vo ID nh danh tng i tng.
Nhp p vo HelloNhatTrungApp.Java lp trnh cho cc s kin.
Lp HelloNhatTrungApp m rng hay k tha t lp Activity qun
l cc tng tc ca ngi dng trn mn hnh. Lp ny c mn hnh chnh l main
vi setContentView(R.layout.main). Cng vic ca chng ta l thit lp vic ngi
dng nhp tn vo EditText v nhp chn bt Cho Android th hin khung thoi c
ni dung Cho mng Nguyn Vn A vi Nguyn Vn A l tn ngi dng nhp
vo.
C hai cng vic chnh cn lm l khai bo thc th instance cho 2 nh danh
quan trng l EditText v Button vi cc thuc tnh v phng thc ty mi i
tng.
i vi EditText th ta ch cn ly gi tr m ngi dng a vo nn rt n
gin ch c vi dng v Button c thm phng thc bt s kin click cho nt
ButtonChaoAndroid:
EditText edtTextTenNguoiDung =
(EditText)findViewById(R.id.EditTextTenCuaBan);
Button btnChaoAndroid = (Button)findViewById(R.id.ButtonChaoAndroid);
btnChaoAndroid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});
78
79
80
81
mn
hnh
Console
cha
ti
trng
thi
Starting:
Intent
cmp=com.hellonhattrungapp/.HelloNhatTrungApp } trnh cc li c th gp
phi.
82
83
86
87
88
89
90
92
G.4.1.3
93
94
95
96
98
Chng ta chuyn qua khung nhn DDMS bng cch nhp vo nt >> bn tay
phi pha trn mn hnh ri nhp chn DDMS hay nhp chn trc tip nt DDMS.
Trn khung nhn DDMS ta thy r 3 thnh phn chnh l Device, Emulator Control
v File Explorer.
By gi ta i qua cc thnh phn y, trc tin l File Explorer.
99
G.4.2.1
ta c th thao tc trn
G.4.2.2
Tm hiu Device
100
101
102
103
on. Theo kinh nghim ca chng ti, khi vic kim li chy mt hi lu
nu xut hin mn hnh tp tin nh hnh bn di th nn nhn F8 vic
kim li i tip.
Nt
Nt
Disconnect: ngt kt ni vi my o
Step Into (F5): i vo thn hm ca hm ang c gi ti
vo thn hm ca cc hm c gi.
Nt
kim li.
104
G.4.3.1
105
106
G.4.3.2
Log
107
G.4.3.4
Tuy Android c h tr cho vic kim li chng trnh nhng thc s cng c
debug cha thc s lm hi lng cc nh lp trnh. Vic debug ng dng c tin
hnh rt chm v khi c li xy ra ta khng th bit c thnh phn no ang gy
ra li do Android ch bo li chung chung nh l source khng tm thy Theo
kinh nghim ca mt s nh lp trnh trn cng ng mng, ta nn tn dng vic
dng khi hm try{} catch{} trnh li ng thi dng thm tnh nng ghi ch li
qu trnh chy bng LogCat bit c chnh xc v nhanh chng thnh phn no
gy li cho chng trnh.
108
109
Activity
no
chy
trc
bng
thuc
tnh
<category
bc
giao
din
cho
cho
mt
Activity
bng
phng
thc
Activity.setContentView().
Service: khc vi Activity l mt giao din m ngi dng c th nhn
thy, service chy ngm trong mt khong thi gian khng xc nh. Cc
dng v d cho mt service c th chi nhc nn khi nhn nt, hay ly d liu
qua mng, hay tnh ton v cung cp kt qu cho Activity no ang cn.
Mi service tha k t lp Service c s. Ta c th a v d r hn cho mt
service dng chi cc bi nhc t mt danh sch cc bi ht. ng dng c
nhiu Activity cho php ngi dng chn v chi cc bi nhc; tuy nhin,
trong mt Activity khng th chi tip cc bi nhc khi ngi dng chuyn
qua cc ng dng khc hay lm vic g khc trong khi vn mun tip tc
nghe nhc. lm c vic ny, Activity chi nhc ca ng dng khi
ng mt service chy ngm vic pht nhc ngay khi nhn vo nt chi
110
Tt cc thnh phn
Mt content provider cn hin hnh trong khi n hi p li cc yu
Tp tin AndroidManifest
Trc khi Android khi ng thnh phn ng dng, n phi bit thnh phn
no ang tn ti. V th, ng dng phi nu r cc thnh phn trong tp tin
AndroidManifest.xml m c gi trong tp tin .apk m tp tin .apk ny gi m
lnh, tp tin, v cc ti nguyn ca ng dng.
112
G.5.1.4
Intent filters
113
"Android.intent.category.LAUNCHER".
category
nh
du
Activity
114
Tin trnh
Lung
115
Vng i ca Activity
116
118
Phng
M t
thc
th Theo
hy
sau
hm
(killable)
onCreate()
onStart()
to. y l ni u tin bn nn lm tt c
cc thit lp nh to Views, gn d liu
vo danh sch hay i loi vy. Lun theo
sau l hm onStart()
onRestart()
onStart()
onResume()
hoc
onStop()
onPause()
onPause().
onPause()
c gi khi h thng sp bt u hi C
onResume()
hay
onStop()
119
onRestart()
c Activity na. iu ny c th xy ra
hay
onDestroy()
khng
120
Vng i Service
121
122
G.5.4.3
Vng i BroadcastReceiver
123
124
125
Eclipse IDE
ADT
Plugin
Android
SDK
127
128
thc t cng ng pht trin Androi th giao din s ti u nht khi cc tng
ca cy l t nht.
Hnh ph lc 92 Cu trc dng cy khi phn tch mt khung giao din ang c thc thi trn mn
hnh
129
130
131
132
http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
nhng khng r rng, d gy s kh hiu cho cc nh pht trin. Chng ti th
s dng NinePatch v p dng hnh nh NinePatch vo chng trnh cho nn chng
ti mi c nhn nh li v cch hiu chnh hnh nh NinePatch nh trn.
G.6.4.2
133
134
Hnh ph lc 99 Hnh minh ha cch thc dng dng lnh thc thi cng c adb
Hnh ph lc 100 Hnh minh ha cch thc to bin mi trng (Windows XP)
135
136
Ph lc H
H.1
H.1.1 Gii thiu lp trnh giao din trn Android v cc tnh nng ca
n
H.1.1.1
Chng ta thy giao din web hin nay c nh dng 2 dng l HTML v
Flash. Nu hng HTML th trang web rt nh do ni dung giao din c qui
nh bi cc th HTML v cc hnh nh hay phim nh s dc ti v ngay sau .
Cc tp tin giao din ca Android cng ta ta nh th. Ni dung c qui nh
bng tp tin XML cn hnh nh nm trong th mc khc. Khi vn hnh chng s kt
hp li vi nhau to nn giao din mn hnh. Ni chung, XML di dng nhng ta
cn c th c c chng. Nhng khi bin dch chng trnh v ng gi thnh
tp tin .apk th cc tp tin giao din s c bin dch thnh m nh phn bi plugin
bin dch ti nguyn aapt.
Ta d thy mt mnh ca tp tin XML l lm nh hn i vic nh ngha giao
din ca mt chng trnh nhng ngc li n lm cho vic pht trin giao din tr
nn di dng v lum thum khi mi bt u lm quen vi n. Ngi lp trnh s
kt hp kh nhiu layout v widget lp nn mt giao din tng i phc tp
137
138
Hnh ph lc 103 Hnh minh ha cho vic ko th giao din t khung Layouts v Views
Hnh ph lc 104 Hnh minh ha cho vic to giao din t khung Outline
139
Ngoi ra cn cch pro hn l g dng lnh XML trc tip ln tp tin XML.
Nhng nu lm vy th vic lp trnh s di dng v kh khn v ta phi m bo c
php XML v kh qun l khi giao din bt u phc tp dn.
H.1.1.4
Th t cp bc giao din
140
141
142
trn mt TextView
trn mt LinearLayout
143
AnalogClock
ViewStub
KeyboardView
TextView
ProgressBar
EditText
Button
SurfaceView
DigitalClock
ImageView
CompoundButton
VideoView
Chronometer
ToggleButton
ImageButton
RadioButton
MapView
ViewGroup
AdapterView
SlidingDrawer
RelativeLayout
Spinner
Gallery
CheckedTextView
CheckBox
LinearLayout
FrameLayout
DialerFilter
AbsoluteLayout
ScrollView
WebView
TableLayout
GridView
TwoLineListItem
TimePicker
TableRow
DatePicker
ListView
RadioGroup
AppWidgetHostView
TabWidget
TabHost
ZoomControls
ViewAnimation
Lp View
144
Lp View l lp i din tiu biu cho vic xy dng giao din ngi dng
(UI). Mt View chim mt vng hnh ch nht trn mn hnh, chu trch nhim v
v qun l s kin trn .
View l lp c s cho cc widget (widget dng to cc thnh phn giao
din tng tc ngi dng nh cc nt nhn, vng nhp liu)
H.1.5.2
Viewgroup
145
RelativeLayout:
146
Cc View nt l
147
Nhn xt
Vic xy dng giao din ngi dng trong Android rt linh hot v uyn
chuyn.
Gii thiu
bng Java
Hai hnh trn th hin cng mt cu trc giao din nhng bn cht hnh u
lp trnh bng XML hnh 2 th bng m lnh Java.
H.1.6.2
149
Khc vi phng php trn, lp trnh giao din bng m lnh Java l nh x
cc phn t giao din XML thnh m Java tng ng. Ni chung, vic lm ny rt
d v gn ging nh lp trnh XmlDocument trn C# vy.
Sau y l ton b on m lnh:
public class AndroidUI_UsingJava extends Activity {
private LinearLayout parentContainer;
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
150
Nhn xt
151
Hnh ph lc 119 Hnh minh ha vic qun l cc View thng qua nh danh ID
H.2
153
154
android:layout_weight="1">
<TextView android:text="red"
android:gravity="center_horizontal"
android:background="#aa0000"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<TextView android:text="green"
android:gravity="center_horizontal"
android:background="#00aa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<TextView android:text="blue"
android:gravity="center_horizontal"
android:background="#0000aa"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<TextView android:text="yellow"
android:gravity="center_horizontal"
android:background="#aaaa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView android:text="row one" android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:text="row two" android:textSize="15pt"
155
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:text="row three" android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:text="row four" android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
156
Nt 1 c layout_wight l 0 cn nt cn li c gi tr l 1 cho nn
nt cn li s chim dng ht phn cn li theo hng ca cha qui nh
cho cc con.
Layout_gravity: l s canh l cho cc i tng bn trong layout hay
widget.
Gravity: l s canh l tri, phi, trn, di so vi cha ca n.
Ta c th lp trnh giao din LinearLayout bng XML v bng m lnh Java
nh hng dn trn.
157
158
159
</TableRow>
160
android:layout_marginTop="50dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello FrameLayout 2"></TextView>
</FrameLayout>
<FrameLayout android:id="@+id/FrameLayout02"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<AnalogClock android:id="@+id/AnalogClock01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></AnalogClock>
</FrameLayout>
</FrameLayout>
161
162
</AbsoluteLayout>
Theo nh kinh nghim chng ti, dng AbsoluteLayout trong hon cnh ta
mun cng kin trc giao din.
H.2.1.5
163
<TextView android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Type
here:" />
<EditText android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/label" />
<Button android:id="@+id/ok" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:text="OK" />
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok" android:text="Cancel" />
</RelativeLayout>
android:layout_above,
android:layout_toLeftOf, android:layout_toRightOf,
android:layout_alignTop, android:layout_alignBottom,
android:layout_alignRight, android:layout_alignLeft,
c gi tr l cc ID
164
165
H.3
166
I.1
167
168
169
Adapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_i
tem);
s.setAdapter(Adapter);
C 3 bc chnh l
To thc th Spinner.
Khai bo v thit lp Adapter.
Gn Adapter vo spinner.
i vi Spinner c th dng ArrayAdapter th th hin d liu ln
Spinner v Spinner ch cho php ta th hin chui ln tng dng ca Spinner.
y, ta ch ti cch lp trnh c phn l l y l:
ArrayAdapter.createFromResource(this,
R.array.planets,
android.R.layout.simple_spinner_item);
android.R.layout.simple_spinner_item
l mt mu
170
171
172
}
// set image and style for each item of the gallery
public View getView(int position, View convertView, ViewGroup
parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(imageIDs[position]);
i.setLayoutParams(new Gallery.LayoutParams(150, 100));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}
173
To thc th listView.
Khai bo v thit lp d liu v Adapter cho ListView.
Thit lp Adapter cho ListView.
tn dng li phn giao din layout sn c ca android ta dng
android.R.layout.simple_list_item_1
u tin ta phi to khung mu giao din cho tng dng trong listView.
Tng mu c nhiu TextView s l ni th hin thng tin ln ListView.
Hnh ph lc 135 Hnh minh ha cch thc lm mt custom row cho mt ListView
176
mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 3");
item.put("Chuoi_2", "Custom Row 3.1");
mAdapterData.add(item);
// gn d liu vo list
SimpleAdapter simpleAdapter = new SimpleAdapter(this,
mAdapterData,
R.layout.hello_customlistView_row, mFrom, mTo);
myList.setAdapter(simpleAdapter);
int[] mTo
. Bng c ch nh x tn ta to d liu
177
178
179
180
Tip n l thit k m lnh Java, nu tinh ta s suy lun rng m lnh Java
ca GridView nng cao ny s gn ging nh ListView nng cao nh trnh by
trn vy v bn cht l n ging nhau trn tng phn t:
public class Adapter_CustomGridView extends Activity {
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_customgridView);
GridView myGrid = (GridView)
findViewById(R.id.grv_myGridView);
// to lin kt vi custom row
String[] mFrom = { "Chuoi_1", "Chuoi_2" };
int[] mTo = { R.id.tv_myTextView_row1,
R.id.tv_myTextView_row2 };
List<HashMap<String, String>> mAdapterData = new
ArrayList<HashMap<String, String>>();
// to d liu
HashMap<String, String> item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 1");
item.put("Chuoi_2", "Custom Row 1.1");
mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 2");
item.put("Chuoi_2", "Custom Row 2.1");
mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 3");
item.put("Chuoi_2", "Custom Row 3.1");
mAdapterData.add(item);
181
// gn d liu vo list
SimpleAdapter simpleAdapter = new SimpleAdapter(this,
mAdapterData,
R.layout.hello_customgridView_row, mFrom, mTo);
myGrid.setAdapter(simpleAdapter);
}
}
I.1.7.3 Nhn xt
Thc t m ni, nhu cu GridView tht t rt phong ph v a dng, trn ch
l nng cao dng c bn m thi, thc t, GridView i hi cao nh tng phn t l
mt tm hnh v bn di c mt chui m t tn tm hnh v c mt hnh nn p
khi ngi dng tc ng vo, Vi m tp , chng ti lm trong chng
trnh ng dng thc t Activity ManHinhHeThongSieuThi.Java m trong c
thc th vit t lp HeThongSieuThiAdapter.Java m dn xut t lp BaseAdapter.
Cc bn c th tham kho thm trong chng trnh .
I.1.8 Kinh nghim lp trnh vi Adapter
Theo kinh nghim chng ti, vic chn kiu Adapter no cho Spinner,
Gallery, ListView v GridView th ty thuc vo thc t bi ton ca cc bn.
Nhng chung qui li chng ti c nhng nhn xt n gin nh sau:
i vi Spinner, ListView n gin, GridView n gin: d liu trn
tng phn t dng n gin th ch cn ArrayAdapter<T> l lp trnh
th hin ni dung vi chng.
ListView nng cao v GridView nng cao ch cha nhiu hn mt
TextView th ta c th dng SimpleAdapter nh x t d liu tht qua
giao din.
ListView v GridView c cha hnh nh trong th ta nn dng
SimpleAdapter nhng phi vit li mt lp dn xut t SimpleAdapter v
thit k li hm public
String value)
182
I.2
183
184
185
186
// ====================================
// np animation thng qua code Java
// ====================================
// Create root AnimationSet
AnalogClock testAnalogClockAnim = (AnalogClock)
findViewById(R.id.AnalogClock);
AnimationSet rootSet = new AnimationSet(true);
rootSet.setInterpolator(new AccelerateInterpolator());
// Create ScaleAnimation
ScaleAnimation scaleAnim = new ScaleAnimation(0.5F, 2.0F,
0.5F, 2.0F,
0.5F, 0.5F);
rootSet.setDuration(400);
rootSet.setFillBefore(false);
rootSet.setStartOffset(700);
rootSet.addAnimation(scaleAnim);
// gn Animation
testAnalogClockAnim.startAnimation(rootSet);
187
lnh Java. Trong bng so snh di y, chng ti so snh s tng quan gia lp
trnh bng m lnh XML vi lp trnh bng Java.
Tn
Thuc tnh
Hm Java
M t
xml
Start time
android:
Animation.
startOffset
setStartOffset()
(hoc
Fill before
setStartTime())
Duration
Thi gian bt u mt
android:
Animation.
Duration
setDuration()
android:
Animation.
fillBefore
setFillBefore()
188
mc nh.
Khong thi gian thc hin
ca Animation.
True nu mun Animation
android:
Animation.
fillAfter
SetFillAfter()
Interpolator
android:
Animation.
interpolator
SetInterpolator()
Gm
AccelerateInterpolator
Animation bt u vi tc
chm v nhanh dn ln.
DecelerateInterpolator
Animation bt u vi tc
nhanh v chm dn.
Bng 2 Bng so snh thuc tnh to hiu ng chuyn ng bng XMl so vi Java
(Bng tham kho t Kha lun 2008 Nghin cu v xy dng t in trn G-Phone ca T
Xun Khi Nguyn v on Chnh Thc)
189
<itemandroid:drawable="@drawable/whee2"android:duration="50"/>
</animation-list>
Cc thuc tnh trn tp tin XML cn quan tm khi to animation dng frameby-frame:
Tn
ngha
android:drawable
Ch ti mt nh nm trong ti nguyn
ca chng trnh.
android:duration
android:oneshot
android:visible
190
c gi trong
I.3
Lp trnh vi Media
191
nh dng
Ghi
Loi tp tin h tr
AAC LC/LTP
HE-AACv1
(AAC+)
AAC (.aac)
HE-AACv2
(enhanced
AAC+)
Audio
AMR-NB
3GPP (.3gp)
AMR-WB
3GPP (.3gp)
MP3
MP3 (.mp3)
MIDI
.mid
Ogg Vorbis
Ogg (.ogg)
PCM/WAVE
WAVE (.wav)
JPEG (.jpg)
GIF
GIF (.gif)
PNG
PNG (.png)
BMP
BMP (.bmp)
JPEG
Image
H.263
MPEG-4 SP
Android h tr vic pht m thanh, video t nhiu ngun khc nhau chng
hn nh tp tin m thanh nm trong ti nguyn ca chng trnh (trong th mc
/res/raw), tp tin nm trong h thng (th nh) hay tp tin trn mng. nm bt
192
193
I.3.4 Nhn xt
Khi pht mt tp tin m thanh hoc video nm trn mng ta cn gn quyn
truy cp c mng Internet cho ng dng nm trong tp tin AndroidManifest.xml
nh sau <uses-permissionandroid:name="android.permission.INTERNET"/> v tp
tin m thanh, video ny c kh nng ti v c.
Khi
lp
trnh
pht
media
ta
nn
dng
cc
by
li
nh
194
I.4
hin
cuc
gi
trong
AndroidManifest.xml
195
196
.parse("tel:1234567"));
startActivity(intent);
hoc
Intent intent = new Intent(Intent.ACTION_DIAL, Uri
.parse("tel:1234567"));
startActivity(intent);
197
I.5
198
Cc mt mnh ca lung:
Lung chia s ti nguyn tin trnh vi nhau nhng chng chy c
lp.
Ni chung, ng dng lun chy hi p li nhng thao tc ca
ngi dng, cho nn nhng hnh ng no tn thi gian th s c tch ra
thnh mt lung v chy ngm pha bn di.
Cc mt yu ca lung:
Vic lp trnh cho n gn nh l hi phc tp.
Cn c xc nhn, trnh v gii quyt hin tng Deadlock. V d
nh 2 lung cng chy v cng thao tc thay i gi tr mt bin ton cc th
lc c th Deadlock s xy ra.
I.5.2 Cc c tnh v cch thc vn hnh lung
Trong mt chng trnh, lun c mt lung chnh v nhiu lung chy ngm
khc. Cc lung ny s giao tip vi nhau thng qua mt Handler qun l danh
sch cc tin nhn yu cu x l nhng hnh ng c np sn trong Handler m
vi mi tin nhn l mt lung no gi ti.
199
201
I.6
203
Thc n c 2 cch thc lp trnh bng XML v bng m lnh Java cng
tng t cch thc lp trnh giao din trong project HelloUI nh trnh by trong
cc phn trc. Sau y l cch thc lp trnh theo tng hng theo 2 ch .
I.6.2.1 Lp trnh thc n la chn chnh
Thc n la chn xut hin khi ta nhn vo nt Menu trn thit b. Ta c
th dng 2 phng php l XML hoc bng m lnh Java.
Trong project HelloMenu c 2 phng php m lnh Java v bng XML cho
mt menu thng thng.
m lnh Java
XML
204
0, // item ID
Menu.NONE, // order
"Menu 1"); // title
// gn icon cho mt menu item
mMenuItem.setIcon(R.drawable.icon);
mMenuItem = menu.add(Menu.NONE, 1, Menu.NONE, "Menu 2");
mMenuItem.setIcon(R.drawable.exit);
mMenuItem = menu.add(Menu.NONE, 2, Menu.NONE, "Menu 3");
mMenuItem.setIcon(R.drawable.icon);
// // to sub menu
// SubMenu subMenu = menu.addSubMenu("Test SubMenu");
// subMenu.add(Menu.NONE, 3, Menu.NONE, "Sub Menu Item 1");
// subMenu.add(Menu.NONE, 4, Menu.NONE, "Sub Menu Item 2");
return true;
}
// gn s kin khi nhn menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "Menu 1 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "Menu 2 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "Menu 3 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case 3:
205
hm ny
gip
ta
to
li
ton
menu
vit
li
hm
206
Hnh ph lc 158 Hnh minh ha thao tc to menu thng qua cng c h tr c tch hp bn trong
Eclipse (ADT)
207
208
209
Trn l hai cch thit lp menu ng cnh cho nt nhn cho trc trn mn
hnh. Tng t nh thc n ng cnh thng thng ta cng phi thit lp s kin
nhp chn thc n nh sau:
@Override
210
211
I.6.3 Nhn xt
Ty theo tng hon cnh m ta s dng hai loi thc n k trn. Nu mun
lm thc n thao tc c nh hng n phm vi ng dng hay Activity hin ti th
ta nn dng thc n thng thng lm Menu cho Activity hin ti. Cn nu mun
gy tc ng v nh hng ln mt i tng cho trc sau khi nhn v chn lu
i tng .
I.7
212
Hnh ph lc 161 Hnh minh ha cc thc chn font ch thng thng m Android h tr
213
Hnh ph lc 162 Hnh minh ha th mc cha tp tin font ch (.ttf) trong mt project Android
I.7.3 Nhn xt
Thng thng i vi cc tr chi hay cc chng trnh cn nhiu kiu ch
vi nhiu mc ch ha khc nhau th mi a nhiu kiu ch vo chng trnh.
Nhng vi nhng chng trnh thng thng th 4 kiu ch sn c ca Android
lp trnh kiu ch cho giao din. V nu p dng nhiu kiu ch qu th giao
din s rt ri.
I.8
214
215
216
}
});
alertDialog.show();
alertDialog;
Nu mun giao din hp thoi dng danh sch c cc mc chn dng radio
button th dng on m lnh sau:
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item],
Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();
I.8.2.2 To ProgressDialog
ProgressDialog c m rng t lp AlertDialog m c hnh dng l bnh xe
quay quay hay l thanh chy th hin qu trnh ang chy ngm hay qu trnh x
l c bao nhiu phn trm ngi dng c th bit c vi hnh nh sau:
218
219
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFF"
/>
</LinearLayout>
Ngoi ra, theo nguyn tc lp trnh giao din, ta c th to giao din trc tip
bng m lnh Java cho hp thoi m khng cn thng qua tp tin XML nh trn. Ta
dng cch no cn ty theo tng hon cnh v trng hp.
I.9
221
I.9.3 Files
I.9.3.1 Gii thiu
222
sau
Resources.openRawResource(R.raw.myDataFile).
m
N s
n
tr
bng
v
hm
i tng
223
} catch (IOException e) {
Toast.makeText(getApplicationContext(),
"Problems: " + e.getMessage(), 1).show();
}
224
while (infile.hasNextLine()) {
inString += infile.nextLine() + "\n";
}
// show result
Toast.makeText(getBaseContext(), inString,
Toast.LENGTH_LONG).show();
infile.close();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(),
Toast.LENGTH_LONG).show();
}
225
txtData.setText("");
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show();
}
226
v ng kt ni:
db.close();
n ln cn nu khng th s
SQLiteDatabase.CREATE_IF_NECESSARY
to CSDL
mi do thuc tnh
qui nh.
227
228
229
Thm
int result = 0;
try {
result = (int) db.insert(table, null, values);
} catch (SQLException e) {
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}
Cp nht
int result = 0;
try {
result = (int) db.update(table, values, whereClause, whereArgs);
} catch (SQLException e) {
// TODO: handle exception
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}
Xa
int result = 0;
try {
result = (int) db.delete(table, whereClause, whereArgs);
} catch (SQLException e) {
// TODO: handle exception
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}
I.9.4.3 Nhn xt
Ty theo tng trng hp v hon cnh m ta dng cc cch khc nhau.
Theo kinh nghim chng ti th nu cc bn c hc m hnh 3 lp vit cho
ng dng cc b truy vn d liu MSSQL th t hn bit lp DataProvider l lp
nn tng thc thi cc truy vn CSDL. Cho nn, khi lm vic vi SQLite th ta
230
231
232
SoapObject
gi yu cu ln webservice. Tip
HttpTransportSE
233
trc
tip
phi
nh
thng
gi
hm
getSystemService(Context.LOCATION_MANAGER). Hm ny s tr ra mt thc
th LocationManager qun l bn v v tr.
Mt khi c thc th LocationManager th ng dng c th lm nhng vic
sau:
Tm li danh sch cc LocationProvider tm gi tr v tr ln cui
cng m LocationProvider c (LocationProvider l cc thit b nhn tn hiu
v tr thng qua GPS, Wifi, Mng in thoi).
Thit lp hay g b thit lp cho khong thi gian nhn gi tr cp
nht cho LocationProvider.
Tuy nhin, khi dng my o chy ng dng bn th ta khng th nhn
gi tr v tr tht t LocationPrivider (nh mng hay GPS). Trong hon cnh ny, ta
c th dng DDMS gi tn hiu gi lp cho my o.
Google
cung
cp
cho
ta
th
vin
rng
gm
gi
Bc 1:
Bc 2:
I.10.2.3
Bc 3:
I.10.2.4
Bc 4:
235
</intent-filter>
</Activity>
Bc 5:
236
Files\Java\jdk1.6.0_16\bin>keytool
-list
-keystore
"C:\Users\ThanhTrung\.android\debug.keystore"
Khi mn hnh s xut hin ni dung sau:
***************** WARNING WARNING WARNING
*****************
* The integrity of the information stored in your keystore *
* has NOT been verified! In order to verify its integrity, *
* you must provide your keystore password.
Vo
website
http://code.google.com/intl/vi-VN/android/add-
237
Hnh ph lc 172 Hnh minh ha trang web ly m ng Google Maps ApiKey t Google
Bc 6
I.10.2.7
Bc 7
238
Bc 8
I.10.2.8
Th l xong ng dng c bn .
I.10.3 Nhn xt
Trn l nhng bc c bn to nn bn c s dng tnh nng ca
Google Maps. Ngoi ra, vic khai thc bn dng nh l v tn khi ta thm cc
i tng trn mn hnh bn phc v cho tng tng lin quan n bn .
Cho nn vic v cc nt nhn, cc biu tng ln trn l iu rt cn thit.
tm hiu k hn phn ny ta vo mc Part 2: Adding Overlay Items trong trang
web:
http://developer.android.com/resources/tutorials/Views/hello-mapView.html
tm hiu thm.
239
To giao din
Cc bn khng qun kim tra s pho php dng Internet trong th permission
thuc tp tin AndroidManifest.xml c tn ti cha.
I.11.2.2
M lnh Java
240
Gii thiu
I.12.1.2
241
ny
trong
ng
mu
HelloOtherWidget
vi
phn
HelloDateTimeSelectionWidget.Java.
I.12.2 Widget Tab
I.12.2.1
Gii thiu
Phn tab gip ta nhn trn nhn khung nhn khc nhau. Ty theo tng chng
trnh ng dng m ta c th p dng chng:
Hnh ph lc 175 Hnh minh ha giao din dng Tab trong Android
I.12.2.2
242
Hnh ph lc 176 M XML minh ha cho vic to mt khung ng dng Tab n gin
243
mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB
1")
.setContent(R.id.textView1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB
2")
.setContent(R.id.textView2));
mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("TAB
3")
.setContent(R.id.textView3));
mTabHost.setCurrentTab(0);
}
244
Ph lc J Lp trnh vi EndlessList
J.1
Gii thiu
Vic to mt danh sch trn Android nh ta bit cc phn ph lc trc
245
J.2
246
247
248
dng
AsyncTask
trang
http://developer.android.com/reference/android/os/AsyncTask.html
Khi mt AsyncTask c gi thc thi, n phi tri qua 4 bc nh
sau (v ta s li dng 4 bc ny thc hin vic ti ngm tng phn d
liu t server v sau khi ti xong phn no s y phn ln trn giao
din)
onPreExcute() phng thc ny s c gi mt ln khi
AsyncTask c kch hot. Ta s khi ng cc hiu ng ca
progressBar ln trn mn hnh bo cho ngi dng bit l phi ch i
ti thm thng tin v t server.
doInBackground() phng thc ny l mt thread chy ngm v
c chy ngay sau khi hm onPreExcute() c thc hin xong. Ta s
thit k cc hm c d liu t server ngay bn trong phng thc ny.
Ngay khi c c b d liu no t server ta c th gi kt qu ny qua
hm onProgressUpdate() x l kt qu thng qua phng thc
publishProgress(ket_qua_doc_duoc).
onProgressUpdate() phng thc ny c chy trn UI Thread,
phng thc ny c dng x l d liu c gi qua t phng
thc doInBackground(). Tng record khi c gi qua y s c thm
vo mt List<T>, List<T> ny chnh l ni cha d liu c ang hin th
trn ListView v gi s cha thm d liu mi va thm vo. Mi lin h
gia List<T> SimpleAdapter ListView c ni r trn phn ph
lc I.1 nn phn ny s khng c cp y.
onPostExcute() phng thc ny cng c chy trn UI Thread
v c gi thc thi khi tc v tnh ton chy ngm thc thi hon tt.
Ta s gi thc hin tt hiu ng progressBar i v yu cu ListView cp
nht thm d liu mi (thng qua vic dng phng thc
notifyDataSetChanged()ca
lp dn xut t SimpleAdapter c m t
nh phn trn).
249
J.3
Nhn xt
Vic lp trnh vi EndlessList tuy c phn phc tp nhng mt khi nm
250
Ph lc K
mt project Android
MyApp/
AndroidManifest.xml
src/
/myPackagePath/.../MyClass.Java
res/
anim/
...
(khng bt buc) Cc files trong th mc ny
drawable/
some_picture.png
some_stretchable.9.png
Android.graphic.drawable.
some_background.xml
...
layout/
bin
dch
trong
Cc
resources
file
ny
GIF.
(khng bt buc) Cha tt c cc file XML
screen_1_layout.xml
...
values/
arrays
classes.xml
styles.
colors.xml
dimens.xml
strings.xml
251
styles.xml
values.xml
Cc file XML c th c c trong thi gian
xml/
raw/
Bng B-1 Cu trc project Android c tham kho t Kha lun 2008
Nghin cu v xy dng t in trn G-Phone ca T Xun Khi Nguyn v
on Chnh Thc thc hin.
i vi cc resource, bn cnh nhng resource do ngi dng to ra, Android
cng h tr mt s resource khc trong gi Android.R. (cc resource do ngi dng
thm vo c s dng bng cch gi R.)
252
Ph lc L
eSaleShopping
tin vic trnh by phn hng dn s dng cc chc nng trong chng
trnh eSaleShopping chng ti a ra s lin kt cc mn hnh chc nng trong
ng dng nh hnh bn di.
Mn hnh
chnh
MH tm theo
danh mc
MH tm theo
h thng siu
th
MH tm theo
chui
MH tm theo
m vch
MH tm theo
Loi hng
ha
...
MH danh
sch hng
ha
MH danh
sch hng
ha
MH chi tit
hng ha
MH chi tit
hng ha
MH danh
sch hng
ha
MH hng ha
cn mua
MH hng ha
u thch
MH ty chn
MH chi tit
hng ha
253
MH thng tin
chng trnh
Mn hnh tm
theo h thng
siu th
MH thng tin
siu th
MH ch ng i
ngn nht
MH la chn ca
mt siu th trong
h thng siu th
MH ch ng
n siu th
MH tm hng ha
theo chui
MH tm hng ha
theo m vch
MH tm hng ha
theo danh mc
L.2
255
Menu chc nng trong mn hnh chnh gm c 3 chc nng chnh nh sau:
Thit lp chng trnh: y l chc nng m ngi dng c th thit
lp hay s dng cc chc nng nh: xa rc hnh nh, cp nht li ton b d
liu ca chng trnh.
Thng tin chng trnh: chc nng ny cho bit thng tin phin bn
phn mm cng nh thng tin tc gi thc hin.
Thot chng trnh: chc nng thot chng trnh.
L.3
256
. Chng trnh
s kim tra trn in thoi c ci chng trnh Barcode Scanner hay khng.
Nu khng c chng trnh Barcode Scanner chp m vch th s
hi xem ngi dng c cn ti ng dng chp m vch ny v hay khng.
Nu cn th chng trnh s d tm v ti v ng dng Barcode Scanner t
Android Market v v ci t ln trn in thoi theo trnh t sau:
257
258
L.3.2 Cc chc nng thc hin sau khi chp c m vch hng ha
Sau khi chp c m vch ca hng ha, ta c 3 chc nng c th thc hin
c nh sau: thm vo danh sch mua hng, thm vo a thch v tm hng ha.
C 3 chc nng trn u c mt kch bn chung l khi nhn chn mt trong ba chc
nng th chng trnh s tin hnh gi thng tin m vch va chp c trn server,
yu cu server tm cc thng tin hng ha ng vi m vch . Sau khi x l yu
cu server s tr kt qu ny v cho client. Trn client s hin th cc thng tin ny
di dng mt danh sch nh hnh ph lc.
259
Khi nhn chn vo mt dng trn danh sch ta s thc hin chc nng ng vi chc
nng t ln nhn chn bn ngoi mn hnh chp m vch nh sau:
ng vi chc nng thm vo danh sch mua hng: cc thng tin ca
mt hng ha trn danh sch cc hng ha ng vi m vch c chp s
c chuyn sang Mn hnh thm hng ha cn mua. Trong mn hnh ny
ta s c 2 thao tc chnh nh sau:
Nhn nt Thm tin hnh thm thng tin ny vo danh sch
hng ha cn mua. Sau khi chng trnh x l thm xong, ta c
th nhp thm thng tin ca mt hng ha khc na vo danh sch
hng ha cn mua.
Nu ch mun thm mt hng ha v xem lin danh sch cn mua
th ta nhn chn Thm v Xem.
260
Hnh ph lc 189 Mn hnh thm thng tin ca mt hng ha vo danh sch hng ha cn mua
261
L.4
Hnh ph lc 192 Mn hnh tm kim theo danh mc hng ha v loi hng ha tng ng
chn danh mc hng ha. Nhn chn mt dng trn Danh mc hng ha s m ln
Mn hnh loi hng ha cha tt c danh sch ca cc loi hng ha ng vi mt
danh mc hng ha no . V d nh trong danh mc hng ha l Thc Phm
262
263
L.5
hnh tm hng ha theo chui gip ngi dng c th tm thy hng ha m mnh
cn tm.
Trong mn hnh ny ngoi tm kim bng chui ta cn c th nhn nt
gi mn hnh chp m vch ly chui m vch qua bn mn hnh tm theo
chui ny thc hin vic tm kim chnh xc hn.
Khi ngi dng in y cc thng tin cn tm th ngi dng nhn nt
yu cu server tm kim cc mt hng no tha mn yu cu tm
kim ca ngi dng v tr v danh sch kt qu cho ngi dng.
Khi ngi dng nhn nt Menu trn my s c thm 2 chc nng ph l:
tr gip v thot chng trnh
264
L.6
265
266
Khi nhn chn mt siu th trong danh sch cc siu th ta s thy cc chc
nng nh sau:
Thng tin ca siu th c chn.
Ch ng i n siu th.
Tm hng ha ca siu th theo chui.
Tm hng ha ca siu th theo m vch.
Tm hng ha ca siu th theo danh mc.
Hnh ph lc 199 Cc chc nng khi chn vo mt siu th trong mt h thng siu th
267
y l chc nng th hin thng tin chi tit ca mt siu th nh tn, a ch,
s in thoi lin h, gi m ca, chng trnh ca siu th, hay cc thng tin h tr
vn chuyn lp t, h tr thanh ton th, thng tin cc my rt tin c ti siu th.
Nhn
Nhn
Nhn vo vng
Ch ng n siu th
268
269
Khi chn la chc nng ny, chng trnh s chuyn sang Mn hnh chp m
vch nh hng dn phn ph lc L.3.
L.6.5 Tm hng ha siu th theo danh mc
Hnh ph lc 203 Mn hnh tm kim theo danh mc hng ha v loi hng ha tng ng
Khi chn chc nng ny, chng trnh s chuyn sang Mn hnh la chn
danh mc hng ha cho php ngi dng la chn. Phn hng dn thao tc vi
Mn hnh danh mc hng ha c trnh by trong phn ph lc L.4.
L.7
270
L.8
271
Mn hnh ny gip ngi dng nhp cc thng tin hng ha cn mua. Ngi
dng nu mun ch thm mt hng cn mua v xem danh sch hng cn mua th
nhn nt Thm v Xem, cn nu mun nhp nhiu ln th nhn nt Thm.
L.8.2 Thao tc xa hng cn mua
272
Hnh ph lc 209 Hp thoi hi ngi dng c thc s mun xa mt mt hng no hay khng
273
274
Ph lc M
275
Hnh ph lc 211 Mn hnh s dng b g Ting Vit IME trn Android 1.5 v 2.1
276
ngun ca ZXing chng ti nhn thy ton b m ngun h tr cho nhiu nn tng,
h iu hnh khc nhau nh RIM, iPhone, Android
cng
nhm
ZXing
hng
dn
th
ti:
http://code.google.com/p/zxing/wiki/ScanningViaIntent
public Button.OnClickListener mScan = new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new
Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
};
public void onActivityResult(int requestCode, int resultCode, Intent
intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
parseActivityResult()
ManHinhTimTheoMaVach:
278
"Thng Bo",
"ng ti v chng trnh Barcode Scanner khng?",
"ng ", "Khng");
}
});
Mt im th v ca 2 lp IntentIntegrator.java v lp IntentResult.java l
khi in thoi khng c sn chng trnh c m vch l Barcode Scanner th s
xut hin thng bo v hi ngi dng c mun ti v ng dng Barcode Scanner
hay khng. Nu ng ti v th chng trnh s tm kim ng dng Barcode
Scanner thng qua Android Market tin hnh ti v ci t ng dng.
Nhm chng ti rt hoan nghnh v cm n cng ng m ngun m cng
nh cc nh lp trnh pht trin v cung cp nhng ng dng, project tht s hay
v c cht lng nh b m m ZXing nh cp trn.
M.3 ng dng bn v v tr
M.3.1 Cc tham s Google Map h tr tm kim ng i
279
280
ngun
tham
kho
ca
bi
vit
ti
ch
http://marakana.com/static/tutorials/LocationDemo.zip
ng thi nhm cng c tham kho bi vit ca thnh vin c nickname l
jagtap.jj1 trn din n anddev.org vi phn bi vit l app with GPS-enable but
the
device
is
indoor
(http://www.anddev.org/app_with_gps-
enable_but_the_device_is_indoor-t8997.html)
281
tham
kho
phng:
startLocationReceiving(), stopLocationReceiving()
282
283
Dng
li
cc
lp
HTTPQueue.java,
HTTPThread.java,
284
M.5.2 Cc widget mi
Nhm dng li 2 widget mi c tn l Panel v Switcher lm cho
ng dng eSaleShopping thm phn phong ph hn.
285
Hnh ph lc 219 ng dng Switcher to la chn hnh thc bn hng trong eSaleShopping
286