You are on page 1of 55

Xy dung ung dung voi Android

^SZY

c lc
du ......................................................................................................................... 3
Chuong 1: Tng quan v ung dung trn Android 5
1.1 Luoc su v Android: ........................................................................................... 5
1.2 Nn tang Android: .............................................................................................. 6
1.3 Kin truc ung dung Android: .............................................................................. 8
1.3.1 May ao Dalvik. ................................................................................................ 8
1.3.2 Cac thanh phan cua mt ng dung Android. ................................................... 9
1.4 Vong doi cua ung dung Android: .................................................................... 10
1.5 Cac cng cu d tao mt ung dung Android: ...................................................... 11
1.5.1 Eclipse IDE. ............................................................................................... 11
1.5.2 Android SDK. .............................................................................................. 11
1.5.3 Cai dt cong cu. .......................................................................................... 12
1.6 Thit bi Android ao (Android Virtual Device - AVD): .......................................... 13
1.7 Android project: .................................................................................................... 15
1.7.1 To mt Android profect mi. ...................................................................... 15
1.7.2 Cau truc mt profect. ................................................................................... 16
Chuong 2: Cac thanh phn co ban cua mt ung dung trn Android 18
2.1 Hoat dng(Activity): ......................................................................................... 18
2.1.1 To mt Activity. ........................................................................................ 18
2.1.2 Jong di cua Activity. ................................................................................... 20
2.1.3 Khi dng mt Activity. ................................................................................. 20
2.1.4 Lin lc gia 2 activity. ................................................................................. 21
2.2 Trinh thu phat (BroadcastReceiver): ................................................................. 22
2.2.1 Chu ky sng. ............................................................................................... 22
2.2.2 Mt s broadcast thong dung. .................................................................... 22
2.2.3 Ham onReceive(). .......................................................................................... 23
2.3 Dich vu (Service): ............................................................................................. 23
2.3.1 To ra mt Service. .................................................................................... 24
2.3.2 Jong di cua Services. .................................................................................. 25
2.3.3 Kt ni dch vu............................................................................................ 26
Xy dung ung dung voi Android

^SZY

2.4 Trinh cung cp ni dung (Content Providers): ................................................... 29


2.4.1 Gii thiu. ...................................................................................................... 29
2.4.2 To mt Content Provider mi. ..................................................................... 29
2.4.3 Truy van, thm, cp nht va xoa ni dung trong Content Provide. ................. 34
2.4.4 Native Android Content Provider. .............................................................. 37
Chuong 3: Thit k giao din 40
3.1 t s lop h tro thit k giao din cho ung dung Android: ................................. 40
3.2 Android Widget Toolbox: ..................................................................................... 40
3.3 Cac kiu Layout: ................................................................................................... 41
3.4 Tao cac View: ....................................................................................................... 44
3.4.1 Chnh sa cac Jiew co sn. ............................................................................ 44
3.4.2 To cac diu khin ghep (compound control). ................................................ 45
3.4.3 To cac Control tuy chnh. ............................................................................. 47
3.5 Tao giao din Activity voi cac View: .................................................................... 47
3.6 enu: ................................................................................................................... 48
3.6.1 Menu trong Android. ...................................................................................... 48
3.6.3 To mt Menu. ............................................................................................... 51
Chuong: Kt lun 53
PHU LUC 54
TAI LIEU THA KHAO 55



Xy dung ung dung voi Android

^SZY


Mo du

Hin nay nganh cng nghip phn mm dang rt phat trin va nganh cng nghip
phn mm trn din thoai di dng cng khng nm ngoai xu th do. Tuy con nhiu han
ch trong phn cung cua din thoai di dng nhung no d th hin duoc suc manh cua
minh trong rt nhiu cac linh vuc khac nhau nhu giai tri, cac tin ich, thanh toan din tu
v.v. Nganh cng ngh phn mm di dng vn con kha non tre Vit Nam vi vy vic
nghin cuu va phat trin cac ung dung trn di dng la rt cn thit.
Cac h diu hanh nhu Window obile, Symbian, . phn nao cng gy it nhiu kho
khn cho nhung ai co y dinh xy dung cac ung dung trn no. Di voi Window obile la
mt cng ngh cua icrosoIt va hoan toan dong di voi nguoi dung, nha phat trin ung
dung chi dua hoan toan vao cng ngh ma icrosoIt cung cp, con Symbian thi vic cu
hinh d co th lp trinh trn no cng v van kho khn, dc bit la no su dung ngn ngu
C/C d lam nn tang lp trinh r rang la khng thun tin trong vic phat trin ung
dung.
Xut phat tu nhu cu thuc t do, Google d manh dan nghin cuu va dua ra mt nn
tang h diu hanh moi, do chinh la Android. t nn tang h diu hanh m ngun m
hoan toan va dua vao mt ngn ngu lp trinh rt manh la Java d phat trin ung dung.
Chinh vi Android h tro Java ngay tu trong nn tang cua no, nn vic vit ung dung, ngay
ca su dung cac chuc nng cua phn cung la hoan toan d dang thng qua vic su dung b
cng cu h tro lp trinh duoc cung cp hoan toan min phi, la Android SDK.

Nhom thuc hin nhn thy nhu cu cua con nguoi trong linh vuc giai tri trn di dng
ngay cang cao va Android chinh la nn tang ung dung co th phat trin trong tuong lai.
Chinh vi vy nhom thuc hin chon d tai ~Xy dng ng dng vi Android nhm hiu
r v cac ki thut lp trinh trn thit bi dng.
Xy dung ung dung voi Android

^SZY

Nhung vi thoi gian, cng nhu nng luc cua nhom co han, cho nn chi gioi han
vic tim hiu cach thuc hoat dng, nghin cuu co ban cac chuc nng, su dung b cng cu
Android SDK.
D tai bao gm:
Chuong 1: Tng quan v ung dung trn Android
Chuong 2: Cac thanh phn co ban cua mt ung dung trn Android
Chuong 3: Thit k giao din
Chuong: Kt lun
Tai liu tham khao














Xy dung ung dung voi Android

^SZY

..ng 1: Tng quan v ng dng trn Android

1.1L.c su v Android:
Android duoc phat hanh phin ban du tin 11/11/2007, la mt mi truong h diu
hanh hoan chinh dua trn h diu hanh nhn Linux V2.6. Luc du, dich trin khai di voi
Android la linh vuc din thoai di dng, gm cac loai din thoai thng minh va cac loai
thit bi din thoai kiu gp chi phi thp. Tuy nhin, pham vi dy du cac dich vu din toan
cua Android va su h tro chuc nng phong phu cua no co tim nng m rng ra ngoai thi
truong din thoai di dng. Android con co th huu ich di voi cac nn tang va ung dung
khac.
Nn Android la san phm cua Open Handset Alliance (Lin minh thit bi cm tay
m), mt tp doan cac t chuc cung hop tac voi nhau d xy dung nn mt loai din thoai
di dng tt hon. Tp doan do Google dung du nay gm cac nha vn hanh (din thoai) di
dng, cac nha san xut thit bi cm tay, san xut linh kin, cac nha cung cp nn va giai
phap phn mm va cac cng ty tip thi. Tu mt quan dim phat trin phn mm, Android
tr thanh trung tm cua th gioi m ngun m va rt co tim nng phat trin.
Thit bi cm tay co kha nng Android du tin trn thi truong la thit bi G1 do
HTC san xut va duoc ban trn T-obile. No tr nn sn co sau gn mt nm dn dai,
khi ma cac cng cu phat trin phn mm sn co duy nht chi la mt s ban phat hanh B
cng cu phat trin phn mm (SDK) duoc cai tin dn tung buoc. Khi ngay phat hanh G1
gn dn, nhom Android d phat hanh SDK V1.0 va cac ung dung bt du vuot ln nhm
huong toi nn tang moi nay.
D kich thich di moi va phat trin cac ung dung cua Android, Google d tai tro
hai vong cuc thi 'Cac thach thuc nha phat trin Android, va hang triu d la d duoc
d vao cac ung dung du thi hang du. Vai thang sau G1, Android arket duoc phat hanh,
cho phep nguoi su dung duyt va tai v cac ung dung truc tip vao din thoai cua ho.
Trong vong 18 thang, mt nn di dng moi d chinh thuc co mt trn thi truong va s la
Xy dung ung dung voi Android

^SZY

di thu canh tranh nng ky cua cac nn di dng ph bin truoc do nhu Symbian hay
Window obile.
Android cung cp kha dy du cac cng cu co ban va duoc thit k sao cho cac nha
phat trin co th tn dung ti da loi th cua thit bi cm tay d xy dung nn cac ung
dung thuc su thuyt phuc. Ho co th tao mt ung dung co th goi thuc hin cac chuc nng
li trong din thoai nhu thuc hin cuc goi, gui tin nhn SS, dung camera . hay chia
se thng tin ca nhn ln trang web chn han nhu thng tin lin lac, vi tri dia li, lich biu.
Cac nha phat trin con co th lam bt cu vic gi trn thit bi Android bi vi h thng
Android giao tip thng qua cac Intents no don gian la mt chui m ta mt hanh dng
nao do vi du: 'android.provider.Telephony.SSRECEIVED. Android con cung cp
sn cac dich vu dinh vi (va dy la mt th manh cua Google) cung voi mt tp cac ung
dung v 'ap voi cac tinh nng rt n tuong nhu do duong, tinh khoang cach dia dim,
tim ban . Ngoai ra con co mt s tinh nng ni bt khac nhu Animation va dng
thoi cng h tro media-playback.
Android d dn hoan thin qua cac phin ban, ma phin ban moi nht hin nay la
Android 4.0.

1.2Nn tang Android:
Voi kha nng rng ri cua Android, s rt d dang nhm ln no voi mt h diu
hanh may tinh d ban. Android la mt mi truong phn tng, xy dung trn nn cua h
diu hanh nhn Linux, va no bao ham nhiu chuc nng phong phu. H thng giao din
nguoi su dung gm co:
Cua s
Khung hinh
Cac tiu trinh d hin thi cac phn tu ph bin nhu cac hp bin soan, danh
sach, danh sach tha xung.
Xy dung ung dung voi Android

^SZY

Android gm mt trinh duyt co th nhung vao duoc, duoc xy dung dua trn
WebKit, chinh la may (engine) trinh duyt m ngun m cng dang la dng co cua trinh
duyt SaIari cua iPhone.
Android khoe ra mt mang di dao nhiu tuy chon kt ni, gm WiFi, Bluetooth
va du liu khng dy qua mt kt ni di dng (nhu GPRS, EDGE va 3G). t k thut
ph bin trong cac ung dung Android la lin kt toi Google aps d hin thi mt dia chi
truc tip trong mt ung dung. Vic h tro cho cac dich vu dua trn dia dim (chng han
nhu GPS) va cac dung cu do gia tc cng co sn trong goi phn mm Android, mc du
khng phai tt ca cac thit bi Android duoc trang bi voi cac phn cung cn thit. Ngoai ra
con co ca h tro may anh nua (camera).
V mt lich su, co hai linh vuc ma cac ung dung di dng d gng suc theo kip cac
di tac may tinh d ban la d hoa/da phuong tin va phuong thuc luu tru du liu. Android
giai quyt thach thuc v d hoa bng su h tro dung sn cho d hoa 2D va 3D, gm ca
thu vin OpenGL. Ganh nng luu tru du liu duoc giam nhe vi nn Android co gm ca
co s du liu SQLite m ngun m ph bin. Hinh 1 cho thy mt khung hinh don gian
hoa v cac tng phn mm Android.
Xy dung ung dung voi Android

^SZY%


Hinh 1 Cu truc Android

1.3Kin trc ng dng Android:
1.3.1 My ao Dalvik:
Cac ung dung Android duoc vit bng ngn ngu lp trinh Java va chung chay
trong mt may ao (V). Diu quan trong phai luu y rng V khng phai la mt may ao
Java ma la may ao Dalvik (Dalvik Virtual achine), mt cng ngh m ngun m. Chic
may ao nay dua trn vic dng ki (register-based) va duoc thit k bi Dan Bornstein va
mt vai ki su cua Google. Thut ngu 'register-based d noi ln su khac bit giua may ao
Android voi may ao JAVA thng thuong. Tuong tu nhu may ao JAVA, dy cng chi la
mt may ao thng dich, nhung thng dich cac Iile co dinh dang .dex (Dalvik Execute)
mt dinh dang giup ti uu b nho va kha nng luu tru cua may ao Cac may ao JAVA
ngay nay chu yu dua trn ngn xp (Stack-based), voi tinh cht nay cho phep rut ngn
thoi gian thuc thi chuong trinh. i ung dung Android chay trong mt ca th cua may ao
Xy dung ung dung voi Android

^SZY%

Dalvik, khi dn luot, ca th may ao nay nm trong mt tin trinh do nhn Linux quan ly,
nhu trinh bay duoi dy.


Hinh 2 ay ao Dalvik


1.3.2c thnh phn cua mt ng dng Android:

t ung dung Android gm 4 thanh phn chinh sau:
Hot dng (Activity). mt ung dung co mt giao din nguoi dung nhin thy
duoc, s duoc thuc hin bng mt Activity. Activity dung Views d tao nn
giao din d hoa nguoi dung, d hin thi thng tin va dap lai cac hanh dng
cua nguoi dung. Khi nguoi dung chon mt ung dung tu man hinh chu hoc
trinh khi chay ung dung thi mt Activity duoc khi dng. Activity trong
Android cng tuong tu nhu mt Form trong cac ung dung desktop truyn
thng.
Dch vu (Services). cac service lam vic n duoi ung dung, duoc su dung
d thuc hin cac xu ly thng thuong khi cn va thm chi ngay ca luc cac
Activity khng hoat dng hoc n di.t dich vu nn duoc su dung di voi
Xy dung ung dung voi Android

^SZY

bt ki ung dung nao cn tn tai trong mt thoi gian dai, chng han nhu mt
trinh giam sat mang hoc ung dung kim tra cp nht.
Trinh cung cap ni dung (Content Providers). co th coi nhu la mt may
chu co s du liu. Cng vic cua no la quan ly truy cp va chia se du liu
dang tn tai, chng han nhu mt co s du liu SQLite. No co th duoc cu
hinh d cho phep cac ung dung khac truy xut va nguoc lai. Nu ung dung
rt don gian thi khng nht thit phai tao ra mt trinh cung cp ni dung.
Trinh thu phat (Broadcast Receivers). bng cach tao va dng ky mt
Broadcast Receiver, ung dung Android co th lng nghe toan b cac Intent
theo mt chun cu th duoc chi dinh. Cac Broadcast Receiver s chay ung
dung mt cach tu dng d dap ung mt Intent gui dn, hay xu ly mt phn
tu du liu hoc dap ung mt su kin, chng han nhu nhn mt vn ban
thng bao.
Vic tach roi su phu thuc giua cac thanh phn trong ung dung giup vic chia s
cng nhu trao di giua cac ung dung khac tr nn d dang hon.
1.4 Vng di cua ng dng Android:
Khng ging nhu cac ung dung trn cac nn tang khac, cac ung dung Android
khng co mt diu khin dn vong doi cua chung. Thay vao do, cac thanh phn ung dung
phai lng nghe vic thay di trang thai bn trong cua ung dung do va tac dng tr lai mt
cach hop ly. i mt ung dung Android trong chinh tin trinh cua no, chay mt th
hin ring bit cua Dalvik. Vic quan ly b nho va tin trinh cua mi ung dung Android
duoc diu khin mt cach ring trong luc runtime.
Android quan ly tai nguyn mt cach cht ch, no s lam bt cu vic gi d dam bao
cho thit bi duy tri dap ung. Diu nay co nghia la cac tin trinh s bi huy di ma khng co
mt canh bao nao nu cn giai phong tai nguyn cho cac ung dung co d uu tin cao.



Xy dung ung dung voi Android

^SZY

1.5Ec cng c d to mt ng dng Android:


D bt du phat trin cac ung dung Android, chung ta cn co B cng cu phat trin
phn mm Android (SDK) va mi truong phat trin tich hop Eclipse (Eclipse IDE). Vic
phat trin Android co th din ra trn icrosoIt Window, ac OS X hoc Linux. Trong
tiu lun nay, nhom thuc hin s phat trin ung dung Android bng icrosoIt Window.

1.5.1 Eclipse IDE:
Cac ung dung Android duoc vit bng ngn ngu Java, nhung bin dich va thi hanh
bng may ao Dalvik. Vit m bng ngn ngu Java trong Eclipse la rt truc quan. Eclipse
cung cp mt mi truong Java phong phu, gm ca vic tro giup theo ngu canh va cac
mach nuoc goi y v m. Khi b m Java duoc bin dich thanh cng, Android Developer
Tools s dam bao rng ung dung do duoc dong goi mt cach dung dn, gm ca tp tin
AndroidaniIest.xml.

1.5.2 Android SDK:
B cng cu phat trin ung dung Android SDK la cng cu gia lp thit bi ao trn may
tinh d phat trin ung dung voi cac ham API h tro cho nhung lp trinh vin lp trinh trn
cac thit bi di dng su dung nn tang Android thng qua ngn ngu lp trinh Java. SDK
gm co:
android.jar : tp tin luu tru Java chua toan b cac lop SDK Android cn
thit d xy dung ung dung.
documention.tml va thu muc docs: tai liu SDK duoc cung cp tai ch va
trn web, chu yu no dang JavaDocs, tao diu kin d dang cho vic huong
dn trong nhiu goi SDK. Tai liu cng gm ca huong dn phat trin muc
cao va cac lin kt dn cng dng Android rng ri.
Thu muc sample (cac vi du mu): thu muc con samples chua b m ngun
dy du dung cho mt loat cac ung dung, gm ca ApiDemo, no su dung nhiu
Xy dung ung dung voi Android

^SZY

API. Ung dung mu la mt noi kham pha tuyt voi khi bt du phat trin ung
dung Android.
Thu muc tools (cac cng cu): chua toan b cac cng cu dong lnh d xy
dung nn cac ung dung Android. Cng cu duoc dung ph bin va huu ich
nht la tin ich adb (Android Debug Bridge).
Usb_driver: thu muc chua cac trinh diu khin cn thit d kt ni mi
truong phat trin voi mt thit bi co kha nng chay Android, chng han nhu
G1 hay din thoai d duoc phat trin Android Dev 1. Cac tp tin nay la doi
hoi duy nht di voi cac nha phat trin dang su dung nn Windows.

1.5.3 i dt cng c:
Chun b.
4 Phn mm Eclipse IDE (phin ban 3.2 tr ln), co th tai truc tip tu
trang web http://www.eclipse.org/downloads/

4 B cng cu Android SDK phin ban moi nht, tai thoi dim thuc
hin tiu lun nay la phin ban r11, co th tai tu trang web
http://developer.android.com/sdk/index.html

Bt dau vic cai dt.
4 Giai nen chuong trinh Eclipse vao mt thu muc nao do (vi du:
D:\eclipse\)
4 Giai nen b Android SDK vao mt thu muc bt ky (vi du:
D:\AndroidSDKr11\)
4 Chay chuong trinh Eclipse.
4 Vao menu Help SoItware Updates .
4 Chon tab Available SoItware
4 Chon Add Site, nhp vao duong dn sau:
Xy dung ung dung voi Android

^SZY

http://dl-ssl.google.com/android/eclipse/
4 Chon OK.
4 Cho cho chuong trinh duoc cai dt.
4 Sau khi cai xong, tip tuc vao menu Window PreIerences
4 Chon tab Android, chi duong dn dn thu muc d giai nen Android
SDK trn ( dy la D:\AndroidSDKr11\).
4 Hoan tt.
Luu y: Cach cai dt trn doi hoi may tinh phai duoc ni mang Internet.
1.6 Tit b| Android ao (Android Virtual Device - AVD):
Cac ung dung Android co th duoc chay trn mt thit bi tht su hoc trn trinh
m phong Android (Android Emulator) kem voi SDK Android.
Tu phin ban SDK 1.5, Google d gioi thiu khai nim v thit bi Android ao. t
thit bi Android ao chi don gian la mt tp cac thuc tinh cu hinh duoc ap dung cho
hinh anh cua mt thit bi m phong d hin thi ung dung ln no.
Cach tao mt thit bi Android ao nhu sau:
- Trong Eclipse window Android SDK and AVD manager.
- O cua s moi hin ra, chon muc Virtual devices bm nut New, hin ra mt cua
s moi nhu hinh sau dy:
Xy dung ung dung voi Android

^SZY


Hinh 3 Tao mt AVD

- uc Name: dt tn cho thit bi, tn gi cng duoc, ct la d nho va d phn bit,


khng chua khoan trng va cac ky tu dc bit.
- uc Target: chon phin ban h diu hanh Android.
- uc SD Card: din kich thuoc b nho cua thit bi hoc ly mt Iile SD Card co
sn.
- Nhn nut Create AVD.

Xy dung ung dung voi Android

^SZY

Hinh 4 Trinh m phong thit bi Android.


1.7 Android project:
1.7.1 1o mt Android project mi:
- Trong Eclipse, chon File New Android Project.
- t cua s moi hin ra, din cac thng tin tuong ung vao cua s.
- Project name: tn project.
- Chon phin ban Android.
- Application name: tn ung dung.
- Package name: tn goi.
- Create activity: tn hoat dng.
Xy dung ung dung voi Android

^SZY

- in SDK Version: API Level tuong ung voi phin ban Android.
- Nhn nut Finish.

Hinh 5 Tao mt Android project

1.7.2 : trc mt project:
t Android project gm cac thu muc sau:
W Thu muc src chua source code ung dung. Gm cac package va cac class.
Xy dung ung dung voi Android

^SZY

W Thu muc gen chua cac Iile tu dng phat sinh (ma thuong gp nht la
R.class).
W Thu muc res d chua cac resource dung trong ung dung (thng qua ID).
W Thu muc assets chua cac resource Iile ma ung dung cn dung (duoi dang
Iile).
W File Manifest la Iile khai bao thng tin v ung voi h thng (nhu ung dung
gm nhung man hinh nao, co service nao. xin cac quyn gi, phin ban bao
nhiu, dung tu SDK phin ban nao.).
W File thu vin.












Xy dung ung dung voi Android

^SZY%

..ng 2: Ec tn pn c. ban cua mt ng dng trn Android

2.1Hot dng(Activity):
i mt Activity dai din cho mt man hinh. Cac ung dung phuc tap co th co
nhiu hon mt Activity. Cn tao mt Activity cho mi man hinh cn hin thi. Cu th la it
nht mt man hinh chinh diu khin cac chuc nng cua ung dung, cac activity khac nhm
muc dich nhp thng tin, cung cp cac khung nhin khac nhau trn du liu hoc h tro cac
chuc nng khac.
Hu ht cac Activity duoc thit k d chim giu toan b man hinh, tuy nhin co th
tao cac Activity co mt nua d trong sut, cac Activity ni, hoc cac dialog.

2.1.1 1o mt Activity:
D tao mt Activity moi, cn thua k tu lop Activity, su dung cac View d cung cp
cac tuong tac voi nguoi dung, khai bao cac thanh phn giao din va thuc thi cac chuc
nng cua ung dung.

package com.paad.myapplication,
import android.app.Activity,
import android.os.Bundle,
public class MyActivity extends Activity ]
/** Called when the activity is first created. */
Override
public void onCreate(Bundle icicle) ]
super.onCreate(icicle),
}
}
Xy dung ung dung voi Android

^SZY%

t lop Activity co ban dua ra mt man hinh rng chua cua s hin thi. Vi vy vic
cn thuc hin du tin la khai bao b cuc cho no bng cach su dung cac View va layout.
Activity UI duoc tao thanh bi cac View. View la cac diu khin giao din nguoi dung,
hin thi du liu va cung cp tuong tac dn nguoi dung.
D gn mt giao din cho mt Activity, su dung phuong thuc setContentJiew trong
lop Activity duoc k thua.
Override
public void onCreate(Bundle icicle) ]
super.onCreate(icicle),
MyJiew myJiew new MyJiew(this),
setContentJiew(myJiew),
}

Co 2 cach d thit lp giao din cho Activity: bng code hoc thng qua Iile dinh
nghia layout . O trn la cach tao giao din bng code, sau dy la cach tao giao din nguoi
thng qua layout, truyn tham s vao cho phuong thuc setContentJiew la mt resource
ID
Override
public void onCreate(Bundle icicle) ]
super.onCreate(icicle),
setContentJiew(R.layout.main),
}

D dung mt Activity cn khai bao bn trong Iile maniIest. Thm vao mt the
activity moi bn trong nut application. The activity nay bao gm cac thuc tinh cho siu
du liu (label, icon,.). t Activity ma khng duoc khai bao mt the activity tuong ung
s khng duoc khi chay.
Vi du sau m ta cach lam th nao d khai bao Activity d duoc tao phn trn:
activity android.label`string/appname`
Xy dung ung dung voi Android

^SZY

android.name`.MyActivity`~
intent-filter~
action android.name`android.intent.action.MAIN` /~
category android.name`android.intent.category.LAUNCHER` /~
/intent-filter~
/activity~

2.1.2 'ng di cua Activity:

Hinh 6 Vong doi cua Activity
2.1.3 Khi dng mt Activity:
D khi dng mt Activity, chung ta dung Intent:
4 Khai bao tuong minh: cung cp chinh xac thng tin cua activity cn goi
(nu cung ung dung chi cn cung cp tn class, nu ung dung khac nhau thi
Xy dung ung dung voi Android

^SZY

cung cp tn package, tn class). Vi du: doan code bn duoi s khi dng


activity tn la TargetActivity.

Intent intent new Intent(getApplicationContext(),TargetActivity.class),
startActivity(intent),

4 Khai bao khng tuong minh: cung cp thao tac cn lam gi, voi loai du liu
nao, thao tac thuc nhom nao. h thng s tim activity tuong ung d khi
dng. Vi du: doan code bn duoi s khi dng mt activity nao do dng co
kha nng xem anh.

Intent intent new Intent(Intent.ACTIONJIEW),
intent.setData(MediaStore.Images.Media.EXTERNALCONTENTURI),
startActivity(intent),
Voi cach khi dng activity khng tuong minh, chung ta cn phai bit mt chut
v Intent-Iilter. Intent-Iilter s giup mt activity dng ky voi h thng minh co th lam
duoc thao tac gi, trong nhom nao, voi loai du liu nao. Nhu vy khi intent va intent-Iilter
khop nhau, activity s duoc h thng khi dng.
2.1.4 Lin lc gia 2 activity:
Co th khi dng mt activity voi mt yu cu nao do va activity kia khi lam xong
cng vic s tra lai kt qua cho activity truoc. Vi du activity A yu cu mt activity lam
giup vic chup anh, activity B dap ung duoc vic nay, sau khi user chup anh xong s tra
lai Iile anh cho activity A. D lin lac 2 activity chung ta lam nhu sau:

Khi khi dng mt activity, ta co th gui kem du liu trong intent nhu vi du
sau:
intent.putExtra("value1", new String("Hello")),
intent.putExtra('value2", new Long(100)),
Xy dung ung dung voi Android

^SZY

Bn phia activity duoc khi dng, co th ly du liu duoc gui nhu sau:
getIntent().getExtras().getString("value1"),
getIntent().getExtras().getLong("value2"),

2.2 Trn tu pEt (BroadcastReceiver):
BroadcastReceiver la mt trong bn loai thanh phn trong ung dung Android.
Chuc nng cua no la dung d nhn cac su kin ma cac ung dung hoc h thng phat di.
Co 2 cach phat-nhn do la:
Khng co thu tu: receiver nao du diu kin thi nhn ht, khng phn bit
va chung tach roi nhau.
Co thu tu: receiver nao dng ky uu tin hon thi nhn truoc, va co th
truyn thm thng tin xu ly cho cac receiver sau.
2.2.1 h: ky sng:
BroadcastReceiver chi co duy nht mt phuong thuc onReceive().
Khi co su kin ma BroadcastReceiver d dng ky nhn duoc phat di, thi
phuong thuc onReceive() cua BroadcastReceiver do s duoc goi.
Sau khi thuc thi xong phuong thuc nay, vong doi cua BroadcastReceiver
kt thuc.
Luu y khi su dung: Ngay khi onReceive() kt thuc, h thng coi nhu receiver d
khng con hoat dng va co th giai phong tin trinh chua receiver nay bt cu luc
nao.
Tranh xu ly cac code qua lu trong onReceive().
Khng co xu ly bt dng b, cho callback. trong Receiver (cu th nhu
hin thi Dialog, kt ni service.)
2.2.2 Mt s broadcast thng dng:
4 Bao h thng khi dng xong.
Xy dung ung dung voi Android

^SZY

4 Bao pin co su thay di.


4 Bao co package moi cai vao hoc xoa di.
4 Bao tt may.
4 Bao cm sac, rut sac.
4 Thng bao tin nhn toi.
4 Thng bao cm, rut the nho.
4 Thng bao co cuc goi di.
4 Broadcast do nguoi phat trin ung dung tu dinh nghia (giup lin lac hoc
thng bao mt su kin giua cac ung dung).

2.2.3 Hm onReceive():
Phuong thuc nay duoc goi khi co su kin tuong ung duoc phat di. O trong phuong
thuc nay, ta truyn vao context (ngu canh) va intent (noi nhn).
4 context: vi lop Receiver khng k thua tu lop Context nn cn truyn
context ma receiver nay dang chay vao. Thu nht la d co th xu ly cac
phuong thuc yu cu truyn thm Context, thu hai la d su dung cac
phuong thuc cua lop Context.
4 intent: intent duoc truyn vao s co dy du thng tin nhu su kin nao ma
receiver nay dng ky d xay ra dn dn onReceive() duoc goi, co gui kem
thng tin gi hoc du liu gi hay khng. Xem cac api:
Intent.getAction(),
Intent.get.Extra(String dataName),

2.3 D|c v (Service):
Service la mt trong 4 loai thanh phn cua mt ung dung Android. Service chay
nn va khng tuong tac truc tip voi nguoi dung. Su dung Service d:
Dung trong cac ung dung nghe nhac.
Dung d xu ly cac thao tac mt thoi gian va khng nht thit phai hin thi
ln activity (download, upload.).
Xy dung ung dung voi Android

^SZY

Di khi cn mt ung dung vn hanh lin tuc d xu ly nhung vic mong


mun ma khng lam phin nguoi dung.
Lam nhung thao tac tinh toan, xu ly du dn nao do va kt qua khi nao
nguoi dung cn thi moi xem.
2.3.1 1o ra mt Service:
D tao ra mt Service, ta tao ra mt class moi k thua lop Service va override cac
phuong thuc onStart(),onCreate() va onBind().

import android.app.Service,
import android.content.Intent,
import android.os.IBinder,
public class MyService extends Service ]

Override
public void onStart(Intent intent, int startId) ]
// TODO. Actions to perform when service is started.
}

Override
public void onreate() ]
// TODO. Actions to perform when service is created.
}

Override
public IBinder onBind(Intent intent) ]
// TODO. Replace with service binding implementation.
return null,
}
Xy dung ung dung voi Android

^SZY

}
D bt du mt Service, su dung phuong thuc startService. Nu Service yu cu
quyn truy cp khng tn tai trong ung dung thi mt ngoai l SecurityException s duoc
dua ra. Co 2 cach d bt du mt Service moi.
Cach 1: khi dng ngm. Vi du:
startService(new Intent(MyService.MYACTION)),
Cach 2: khi dng tuong minh. Vi du:
startService(new Intent(this, MyService.class)),
D dung mt Serivce, su dung phuong thuc stopService, truyn vao Intent xac
dinh Service cn ngung hoat dng. Vi du:

ComponentName service startService(new Intent(this, BaseballWatch.class)),
// ngng dch vu bng cach xac dnh tn dch vu
stopService(new Intent(this, service.getClass())),

// ngng dch vu bng cach tung minh
try ]
Class serviceClass Class.forName(service.getClassName()),
stopService(new Intent(this, serviceClass)),
} catch (ClassNotFoundException e) ]}

2.3.2 'ng di cua Services:
Xy dung ung dung voi Android

^SZY


Hinh 7 Vong doi cua service


4 Khi co mt context nao do goi startService() d khi dng mt dich vu
mong mun. Nu dich vu do chua duoc tao thi s goi onCreate() ri goi tip
onStart() va khi do dich vu chay nn bn duoi.
4 Nu sau do lai co mt context mun khi dng dich vu nay ma dich vu d
dang chay thi chi co phuong thuc onStart() cua dich vu duoc goi.
4 Du dich vu co duoc goi khi dng bao nhiu ln thi cng chi co th hin
cua dich vu va chi cn goi stopService() mt ln d kt thuc dich vu.
2.3.3 Kt ni dch v:
Khi mt Activity duoc kt ni toi mt Service, no duy tri mt tham chiu dn mt
thuc th Service. D kt ni dn thuc th nay, thuc thi phuong thuc onBind nhu sau:
private final IBinder binder new MyBinder(),
Override
public IBinder onBind(Intent intent) ]
return binder,
Xy dung ung dung voi Android

^SZY

}
-------------
public class MyBinder extends Binder ]
MyService getService() ]
return MyService.this,
}
}

Su kt ni giua Service va Acitvity duoc th hin qua mt ServiceConnection.
Diu cn lam la thuc thi mt ServiceConnection moi, override phuong thuc
onServiceConnected va onServiceDisconnected.
// tham chiu dn dch vu
private MyService serviceBinder,

// x ly kt noi gia service va activity
private ServiceConnection mConnection new ServiceConnection() ]
public void onServiceonnected(ComponentName className, IBinder
service) ]
// duoc gi khi lin kt duoc thc hin
serviceBinder ((MyService.MyBinder)service).getService(),
}
public void onServiceDisconnected(ComponentName className) ]
// nhn khi dch vu ngt kt ni mt cach bat ng
serviceBinder null,
}

D thuc hin vic kt ni, goi phuong thuc bindService.
Override
Xy dung ung dung voi Android

^SZY%

public void onCreate(Bundle icicle) ]


super.onCreate(icicle),

// kt ni dch vu
Intent bindIntent new Intent(MyActivity.this, MyService.class),

bindService(bindIntent, mConnection, Context.BINDAUTOCREATE),
}


Hoat dng cua bindService(): kt ni dich vu

Hinh 8 Hoat dng kt ni dich vu

Thng thuong, vong doi cua dich vu khi co client kt ni tu du nhu sau:
4 Cng bt du bng onCreate() ri dn onBind() va dich vu chay duoi nn.
Xy dung ung dung voi Android

^SZY%

4 Khi khng con client kt ni toi thi dich vu goi onUnbind() ri onDestroy().

Co mt s truong hop khng thng thuong, vi du nhu:
4 Co mt context khi dng mt dich vu, sau do co mt s client kt ni
(bind) toi service.
4 Co nhiu client cung luc kt ni toi dich vu.
4 t activity vua goi startService() vua goi bindService().

2.4Trn cung cp ni dung (ontent Providers):
2.4.1 Cii thi::
Co th coi trinh cung cp ni dung nhu la mt may chu co s du liu. Cng vic cua
no la quan ly truy cp va chia se du liu dang tn tai, chng han nhu mt co s du liu
SQLite. No co th duoc cu hinh d cho phep cac ung dung khac truy xut va nguoc lai.
Nu ung dung rt don gian thi khng nht thit phai tao ra mt trinh cung cp ni dung.
Content Provider giup tach bit tng ung dung ra khoi tng du liu. No co dy du
cac quyn diu khin va duoc truy xut thng qua m hinh URI don gian nhu la co th
thm, xoa, cp nht du liu cua cac ung dung.

2.4.2 1o mt ontent Provider mi:
2.4.2.1 Tao Content Provider:
D tao mt Content Provider cn thua k lai tu lop truu tuong ContentProvide,
override lai phuong thuc onCreate.
import android.content.*,
import android.database.Cursor,
import android.net.Uri,
import android.database.SQLException,
public class MyProvider extends ContentProvider ]
Override
Xy dung ung dung voi Android

^SZY

public boolean onreate() ]


// TODO. Construct the underlying database.
return true,
}
}

Nn cung cp mt bin static CONTENTURI tra v mt URI cua provider nay.
Content URI phai la duy nht giua cac provider, vi th nn dua vao tn package d xac
dinh URI, hinh thuc chung cho vic dinh nghia mt Content Provider URI la:
content.//com.CompanyName~.provider.ApplicationName~/DataPath~

Vi du:
content.//com.paad.provider.myapp/items

Content URI co th 2 dang th hin. Vi du trn la URI dang request tt ca cac
gia tri. Vic thm vao cui /rownumber~, s request mt record don.
content://com.paad.provider.myapp/items/5

Cac don gian nht d lam vic nay la su dung URIMatcher. Cu hinh UriMatcher
d phn tich hinh thuc cua no khi provider dang duoc truy xut dn thng qua mt
Content Resolver. Xet vi du sau:

public class MyProvider extends ContentProvider ]
private static final String myURI 'content.//com.paad.provider.myapp/items`,
public static final Uri CONTENTURI Uri.parse(myURI),
Override
public boolean onCreate() ]
// TODO. Construct the underlying database.
return true,
Xy dung ung dung voi Android

^SZY

}

// to cac hng s duoc dung d phan bit cac yu cau URI khac nhau
private static final int ALLROWS 1,
private static final int SINGLEROW 2,

private static final UriMatcher uriMatcher,
// thong thung di tuong UriMatcher, noi ma mt URI kt thuc bng items s
// tuong ng vi mt yu cau tat ca item, va items/[rowID] s tuong ng vi mt
// hang don
static ]
uriMatcher new UriMatcher(UriMatcher.NOMATCH),
uriMatcher.addURI('com.paad.provider.myApp`, 'items`, ALLROWS),
uriMatcher.addURI('com.paad.provider.myApp`, 'items/#`,
SINGLEROW),
}
}

2.4.2.2 Dua ra truy xut Data Source:
Co th cung cp cac truy vn va thuc thi voi Content Provdier bng cach thuc hin
cac phuong thuc delete, insert, update va query. Cac phuong thuc nay hoat dng nhu cac
giao tip chung dn ngun du liu bn duoi, chung cho phep cac ung Android chia s du
liu voi nhau ma khng phai tao mt giao tip ring cho mi ung dung.
Vi du: mt di tuong UriMatcher duoc su dung d loc cac thuc thi va cac cu truy
vn.
Override
public Cursor query(Uri uri, String[] profection, String selection,
String[] selectionArgs, String sort) ]

Xy dung ung dung voi Android

^SZY

// nu la truy van 1 hang thi hn ch kt qua


switch (uriMatcher.match(uri)) ]
case SINGLEROW .
// TODO. Modify selection based on row id, where.
// rowNumber uri.getPathSegments().get(1)),
}
return null,
}

Override
public Uri insert(Uri uri, ContentJalues initialJalues) ]
long rowID [ ... Add a new item ... ]

// tra v URI cua item va insert
if (rowID ~ 0) ]
return ContentUris.withAppendedId(CONTENTURI, rowID),
}
throw new SQLException('Failed to add new item into ' uri),
}

Override
public int delete(Uri uri, String where, String[] whereArgs) ]
switch (uriMatcher.match(uri)) ]
case ALLROWS.
case SINGLEROW.
default. throw new IllegalArgumentException('Unsupported
URI.` uri),
}
}
Xy dung ung dung voi Android

^SZY

Override
public int update(Uri uri, ContentJalues values, String where,
String[] whereArgs) ]
switch (uriMatcher.match(uri)) ]
case ALLROWS.
case SINGLEROW.
default. throw new IllegalArgumentException('Unsupported URI.`
uri),
}
}

Buoc cui cung trong qua trinh tao mt Content Provider la dinh nghia kiu IE
la kiu du liu ma Provider tra v, override phuong thuc getType d tra v mt kiu
String m ta cho kiu du liu. Kiu tra v bao gm ca 2 hinh thuc: truong don va tt ca
du liu.
O Truong don
vnd.companyname~.cursor.item/contenttype~

O Tt ca
vnd.companyName~.cursor.dir/contenttype~

Vi du:
Override
public String getType(Uri uri) ]
switch (uriMatcher.match(uri)) ]
case ALLROWS. return 'vnd.paad.cursor.dir/myprovidercontent`,
case SINGLEROW. return
'vnd.paad.cursor.item/myprovidercontent`,
default. throw new IllegalArgumentException('Unsupported URI.
Xy dung ung dung voi Android

^SZY

' uri),
}
}

2.4.2.3 Dng ky Provider:
Thm Content Provider va to vao trong maniIest.xml. Su dung the authorities d
chi dinh dia chi cua no:
provider android.name`MyProvider`
android.authorities`com.paad.provider.myapp`/~


2.4.3 1r:y vn, thm, cp nht v xa ni d:ng trong ontent Provide:
Content Provider duoc truy xut thng qua lop Content Resolver. i mt
Context cua ung dung co mt di tuong ContentResolver, co th duoc truy xut thng
qua phuong thuc getContentResolver.
ContentResolver cr getContentResolver(),

Content Resolver bao gm mt vai phuong thuc d thuc thi va truy vn dn
Content Providers. t URI dung d chi dinh Content Provider nao duoc cung cp bi
cac quyn duoc dinh nghia trong maniIest cua ung dung. URI la mt chui tuy y, vi th
hu ht cac provider du dua ra thuc tinh CONTENTURI. Content Provider thuong
dua ra 2 hinh thuc URI, mt la dua tt ca cac du liu duoc yu cu trn cung mt dong
don le, hoc la thm vao /rowID~ vao phia sau CONTENTURI.

2.4.3.1 Truy vn:
Vic truy vn trn Content Provider co hinh thuc tuong tu nhu khi truy vn trong
database, dung phuong thuc query cua di tuong ContentResolver voi cac tham s truyn
vao gm:
Xy dung ung dung voi Android

^SZY

O t URI cua Content Provider mun truy vn.


O t anh xa dai din cho cac ct mun chua trong tp kt qua.
O t mnh d where chi dinh cac dong nao duoc tra v. Co th dua vao ky tu dai
din ? va s duoc thay th bi cac gia tri duoc luu bn trong cac tham s duoc
chon.
O t mang cac di s kiu String thay th cho cac ky tu dai din ? trong mnh d
where
O t chui m ta thu tu cac dong tra v.
Vi du:
// tra v tat ca cac dong
Cursor allRows getContentResolver().query(MyProvider.CONTENTURI,
null, null, null, null),
// tra v tat ca cac ct cua cac hang co ct 3 bng vi gia tr thit dt va sp xp
// theo gia tr cua ct 5
String where KEYCOL3 '` requiredJalue,
String order KEYCOL5,
Cursor someRows getContentResolver().query(MyProvider.CONTENTURI,
null, where, null, order),

2.4.3.2 Thm:
Content Resolver cung cp 2 phuong thuc d chen mt record moi vao trong
Content Provider, do la insert va bulkInsert. Phuong thuc insert tra v mt URI dn
record moi duoc thm vao, trong khi bulkInsert tra v s thanh phn thm vao thanh
cng.
Doan code sau m ta cach su dung 2 phuong thuc trn:
// to mt dong mi cho cac gia tr mun chen.
ContentJalues newJalues new ContentJalues(),

Xy dung ung dung voi Android

^SZY

// gan gia tr cho moi hang


newJalues.put(COLUMNNAME, newJalue),
[ ... lp li cho moi ct ... ]
Uri myRowUri getContentResolver().insert(MyProvider.CONTENTURI,
newJalues),

// to mt dong mi cho cac gia tr mun chen.
ContentJalues[] valueArray new ContentJalues[5],

// to mt mang cac dong mi va tra v s thanh phan thm thanh cong
int count getContentResolver().bulkInsert(MyProvider.CONTENTURI,
valueArray),


2.4.3.3 Xoa:
D xoa mt record khi su dung Content Resolver, su dung phuong thuc delete,
truyn vao URI cho dong mun xoa. Dng thoi, cng co th dung mnh d diu kin
where d xoa nhiu dong.
Vi du:
// xoa mt dong duoc ch dnh
getContentResolver().delete(myRowUri, null, null),
// xoa 5 dong dau tin.
String where 'id 5`,
getContentResolver().delete(MyProvider.CONTENTURI, where, null)

2.4.3.4 Cp nht:
Vic cp nht cho mt Content Provider duoc diu khin bi phuong thuc update
cua Content Resolver. Phuong thuc update nhn URI cua Content Provider dich, mt di
Xy dung ung dung voi Android

^SZY

tuong ContentJalues chua tp gia tri duoc anh xa dn cac ct cn cp nht, va mt mnh
d where d chi dinh dong nao duoc cp nht.
Khi thuc thi, mi dong phu hop voi diu kin trong mnh d where s duoc cp
nht va tra v s dong duoc cp nht gia tri thanh cng.
Vi du:
// to mt dong mi cho cac gia tr mun chen.
ContentJalues newJalues new ContentJalues(),
// to anh x thay th cac ct mun cp nht va nhng gia tr gi d gan cho moi ct
newJalues.put(COLUMNNAME, newJalue),
// ap dung cho 5 hang dau tin
String where 'id 5`,
getContentResolver().update(MyProvider.CONTENTURI, newJalues, where,
null),

2.4.4 Aative Android ontent Provider:
Android dua ra nhiu Content Provider h tro truy xut dn cac ung dung native.
Co th dung mt trong cac Content Provider native nay d su dung cac k thut duoc m
ta trn. Nhu mt su thay th, goi android.provider chua cac lop thun tin d truy xut
mt cach don gian dn nhiu provider bao gm:
O Browser: Dung browser Content Provider d doc va diu chinh bookmarks,
browser history, hoc web searches.
O allLog: Hin thi hoc cp nht cac cuc goi (cuc goi dn, cuc goi di, cac cuc
goi nh, va chi tit cuc goi.
O ontacts: dung d rut trich, chinh sua, hoc luu tru chi tit danh ba.
O MediaStore: cung cp su kim soat, quan ly truy xut da phuong tin trn thit bi
(audio, video, va hinh anh).
O Settings: Truy xut dn cac thit lp cai dc cua thit bi, Settings cho phep hin
thi va diu chinh cac thit lp Bluetooth, ring tone va nhiu cai dt khac.
Xy dung ung dung voi Android

^SZY%

Nn su dung cac Content Providers native nay bt cu khi nao co th, bi vi khi su
dung chung s bao dam cho ung dung duoc kt hop voi cac ung dung native hoc third-
party khac mt cach lin tuc.

2.4.4.1 edia Store Provider:
Android edia Store cung cp mt kho luu tru cac tp tin audio, video, va hinh
anh. i khi thm mt tp tin da phuong tin nao vao Android Iilesystem, no s duoc
thm vao edia Store d cho cac ung dung khac nhin thy no.
t lop MediaStore bao gm mt s cac phuong thuc tin loi d thm cac tp tin
vao edia Store mt cach don gian. Vi du sau dy s m ta vic thm vao mt tp tin
hinh anh vao trong edia Store.
android.provider.MediaStore.Images.Media.insertImage(
getContentResolver(), sourceBitmap, 'mycatpic`, 'Photo of my cat'`),

2.4.4.2 Contacts Provider:
Contact Provider thuc su rt cn thit trn thic bi giao tip d dua ra tt ca cac
thng tin co th tu co s du liu dn bt ky ung dung nao co quyn READCONTACTS.
Trong vi du sau dy, mt Activity nhn mt Cursor dn mi nguoi trong co s du
liu contact, tao mt mang kiu String voi mi thanh phn chua tn nguoi va s din
thoai cua nguoi do.
// lay mt con tr cua moi lin h
Cursor cursor getContentResolver().query(People.CONTENTURI,
null, null, null, null),
// quan ly vong di con tr.
startManagingCursor(cursor),

// cac thuc tinh d lay chi s ct
int nameIdx cursor.getColumnIndexOrThrow(People.NAME),
int phoneIdx cursor. getColumnIndexOrThrow(People.NUMBER),
Xy dung ung dung voi Android

^SZY%

String[] result new String[cursor.getCount()],


if (cursor.moveToFirst())
do ]
// trich xuat tn
String name cursor.getString(nameIdx),
// trich xuat s din thoi
String phone cursor.getString(phoneIdx),
result[cursor.getPosition()] name ' (' phone ')`,
} while(cursor.moveToNext()),














Xy dung ung dung voi Android

^SZY

..ng 3: Tit k giao din


3.1 Mt s lp tr tit k giao din co ng dng Android:
Android cung cp mt s cng cu thit k giao din:
Views: la lop UI co ban cho cac control giao din. Tt ca cac control giao
din nguoi dung, cac lop layout du duoc dn xut tu lop Views.
ViewGroups: duoc m rng tu lop View va co th chua nhiu Views.
ViewGroups cng duoc k thua d cung cp cac lop quan ly b cuc nhu
LinearLayout. ViewGroup duoc dung d xy dung nn cac component co th
dung lai (widget) hoc d quan ly b cuc cho cac control.
Activity: dung d hin thi giao din nguoi dung. Lop nay do nguoi phat trin
ung dung vit.


Hinh 9 - Quan h giua cac thanh phn trn

3.2 Android Widget Toolbox:
Android cung cp mt b cng cu cac View chun d tao cac giao din nguoi dung
don gian, giup don gian hoa vic phat trin va tao su dng nht giua cac ung dung.
Cac control thng dung:
Xy dung ung dung voi Android

^SZY

WTextView: la mt label chi co tac dung hin thi vn ban, no h tro hin thi nhiu
dong, dinh dang chui.
WEditText: la mt vung nhp vn ban co th chinh sua, h tro nhp nhiu dong.
WListView: tao va quan ly mt nhom cac View d hin thi mt danh sach cac phn
tu. t ListView chun dung d hin thi chui gia tri cua mt mang cac TextView.
WSpinner: la mt control kt hop, hin thi mt TextView va mt ListView kt hop
dung d chon mt item tu danh sach. No duoc tao thanh tu mt TextView chua gia tri
hin tai dang duoc chon kt hop voi mt nut ma khi nhn vao s dua ra mt danh sach
lua chon.
WButton
WCheckBox
WRadioButton
Andoid cng h tro nhiu View cao cp hon nhu: date-time picker, auto-complete
input box, map, gallery, va tab sheet.
Tham khao http://code.google.com/android/reIerence/view-gallery.html d bit chi
tit.
3.3 Ec kiu Layout:
LayoutManager (thuong goi la layout) la m rng cua lop ViewGroup, duoc thit
k d diu chinh vi tri cua cac control trn man hinh ung dung. Layout co th lng nhau
d tao nn cac giao din phuc tap. Android co mt s cac layout don gian giup xy dung
UI. D tao nn mt b cuc hop ly thi nn kt hop cac layout voi nhau.
Cac lop layout co ban:
WFrameLayout: la layout don gian nht trong Layout anager, FrameLayout dt
mi View con vao goc trai trn cua man hinh. Vic thm nhiu control s chng mt cai
moi ln trn cai truoc do.
WLinearLayout: thm mi View theo mt duong thng, theo chiu doc hoc ngang.
t layout theo chiu doc s co mt control trn mt dong, layout theo chiu ngang chi
Xy dung ung dung voi Android

^SZY

co mt dong cho nhiu View. No cho phep chi dinh gia tri 'weight cho mi View con d
diu chinh kich thuoc bn trong khng gian cho phep.
WRelativeLayout: dung d dinh vi tri cho cac View cn xung voi cac control khac
cng nhu voi duong bin cua man hinh.
WTableLayout: giup b tri cac View theo mt luoi co cac dong va cac ct. Cac ct
co th duoc thit lp d co lai hoc gian ra.
WAbsoluteLayout: trong layout nay, vi tri mi View s la toa d tuyt di, dam bao
b cuc chinh xac cho cac thanh phn. Do do, khng th co duoc su linh hoat di voi cac
man hinh co kich thuoc khac nhau.
Su dng Layout
D su dung layout nguoi ta thuong dung phuong phap la su dung resource bn
ngoai tu Iile XL. t layout XL phai chua mt nut gc. Nut gc nay co th chua cac
layout va cac View lng nhau d xy dung nn cac giao din phuc tap.

Hinh 10 - H thng cac view voi cac thng s layout duoc kt ni voi mi view


Vi du: File XL sau m ta mt layout don gian bao gm mt TextJiew trn va
mt EditText su dung LinearLayout b tri theo chiu dung:
?xml version`1.0` encoding`utf-8`?~
Xy dung ung dung voi Android

^SZY

LinearLayout xmlns.android`http.//schemas.android.com/apk/res/android`
android.orientation`vertical`
android.layoutwidth`fillparent`
android.layoutheight`fillparent`~
TextJiew
android.layoutwidth`fillparent`
android.layoutheight`wrapcontent`
android.text`Enter Text Below`
/~
EditText
android.layoutwidth`fillparent`
android.layoutheight`wrapcontent`
android.text`Text Goes Here'`
/~
/LinearLayout~

Tuy nhin, cng co th tao cac layout bng code. Vi du:
LinearLayout ll new LinearLayout(this),
ll.setOrientation(LinearLayout.JERTICAL),

TextJiew myTextJiew new TextJiew(this),
EditText myEditText new EditText(this),
myTextJiew.setText('Enter Text Below`),
myEditText.setText('Text Goes Here'`),

int lHeight LinearLayout.LayoutParams.FILLPARENT,
int lWidth LinearLayout.LayoutParams.WRAPCONTENT,

ll.addJiew(myTextJiew, new LinearLayout.LayoutParams(lHeight, lWidth)),
Xy dung ung dung voi Android

^SZY

ll.addJiew(myEditText, new LinearLayout.LayoutParams(lHeight, lWidth)),



setContentJiew(ll),

3.4 To cEc View:
3.4.1 hnh sa cc 'iew c sn:
Chinh sua hoc k thua mt control sn co nu no cung cp cac chuc nng cn
thit, bng cach ghi de cac handler va onDraw cua no. D dinh nghia lai giao din cng
nhu cac ung xu cua control moi tao, cn phai ghi de va thua k cac diu khin su kin
(event handler) kt hop voi cac hanh vi mun thay di.
Vi du: tinh chinh mt TextView d hin thi mt tp cac s h thp phn.

public class MyTextJiew extends TextJiew ]
public MyTextJiew (Context context, AttributeSet ats, int defStyle) ]
super(context, ats, defStyle),
}

public MyTextJiew (Context context) ]
super(context),
}

public MyTextJiew (Context context, AttributeSet attrs) ]
super(context, attrs),
}
Override
public void onDraw(Canvas canvas) ]
[ ... v trn canvas bn dui text ... ]
super.onDraw(canvas),
Xy dung ung dung voi Android

^SZY

[ ... v trn canvas bn trn text ... ]


}

Override
public boolean onKeyDown(int keyCode, KeyEvent keyEvent) ]
[ ... thc hin mt x ly khi bam 1 phim cu th... ]
// s dung cac chc nng hin co bi lp co s d dap ng s kin
// nhan phim
return super.onKeyDown(keyCode, keyEvent),
}
}

3.4.2 1o cc di: khin ghp (compo:nd control):
Compound control la cac widget co th tai su dung, no chua nhiu control duoc b
tri va co lin h voi nhau, no duoc tao tu nhiu control co ban. Vi du nhu tao nn mt
dropdown combo box bng cach kt hop mt TextJiew va mt Button ma khi duoc nhn
s hin thi mt ListJiew.
Khi tao mt compound control cn dinh nghia layout, hinh thuc va cach thuc tac
dng ln nhau giua cac View ma no chua. Compound control duoc tao thanh tu vic dn
xut tu lop JiewGroup.
D tao mt compound control moi, chon mt lop layout phu hop nht d xac dinh vi
tri cho cac control, va dn xut tu no:
public class MyCompoundJiew extends LinearLayout ]
public MyCompoundJiew(Context context) ]
super(context),
}
public MyCompoundJiew(Context context, AttributeSet attrs) ]
super(context, attrs),
Xy dung ung dung voi Android

^SZY

}
}

Cach duoc ua chung hon d thit k giao din cho mt compound control la su
dung layout resource.
Vi du: tao mt widget don gian gm mt EditText va mt Button:
?xml version`1.0` encoding`utf-8`?~
LinearLayout xmlns.android`http.//schemas.android.com/apk/res/android`
android.orientation`vertical`
android.layoutwidth`fillparent`
android.layoutheight`fillparent`~
EditText
android.id`id/editText`
android.layoutwidth`fillparent`
android.layoutheight`wrapcontent`
/~
Button
android.id`id/clearButton`
android.layoutwidth`fillparent`
android.layoutheight`wrapcontent`
android.text`Clear`
/~
/LinearLayout~

D dung duoc layout nay cho widget moi cn phai dinh nghia lai contructor cua no
su dung phuong thuc inflate tu dich vu LayoutInflate. Phuong thuc inflate nhn tham s
la layout resource va tra v mt View.
t khi d xy dung duoc giao din cho control, diu tip theo la dinh nghia diu
khin su kin cho mi control con trong no.
Xy dung ung dung voi Android

^SZY


3.4.3 1o cc ontrol ty chnh:
Nguoi phat trin co th tao ra cac control theo y cua minh d tao duoc mt giao din
mang tinh duy nht phu hop voi yu cu cua nguoi dung. Cac control moi cn phai duoc
thua k tu lop Jiew hoc SurfaceJiew.
Lop View cung cp mt di tuong Canvas va mt s phuong thuc v cng nhu cac
lop Paint, d tao mt giao din truc quan. Nguoi thit k co th dinh nghia lai cac su kin
nguoi dung nhu cam ung trn man hinh, nhn phim d tao nn su tuong tac. Trong nhung
truong hop ma khng doi hoi vic v lai cng nhu d hoa 3D thi lop co s View co giai
phap hiu qua.
Trong khi do, lop SurfaceJiew cung cp mt di tuong canvas h tro vic v tu mt
lung xu ly nn va su dung openGL cho d hoa 3D. Dy la mt lua chon tuyt voi cho
cac diu khin doi hoi d hoa cao, cn phai cp nht lin tuc hoc hin thi cac d hoa
phuc tap, nhu game 3D.

3.5 To giao din Activity vi cEc View:
t Activity khi chua thit k s khi dng voi mt man hinh rng. D thit lp
giao din cho man hinh rng nay cn goi phuong thuc setContentJiew khi everride lai
phuong thuc onCreate. Phuong thuc setContentJiew co th nhn mt tham s la resource
ID hoc mt th hin cua View. Do do, co th dinh nghia giao din ung dung bng code
hoc tham chiu dn resource (layout).
Nu dung layout resource thi s tach ring vic thit k giao din va phn code xu
ly, cung cp mt kha nng thay di linh hoat giao din ma khng thay di code bn trong.
Vi du: phuong thuc findJiewById tham chiu dn cac View duoc dinh nghia trong
mt resource layout main.xml nm trong thu muc res/layout cua project:
Override
public void onCreate(Bundle icicle)
]
Xy dung ung dung voi Android

^SZY%

super.onCreate(icicle),
setContentJiew(R.layout.main),
TextJiew myTextJiew (TextJiew)findJiewById(R.id.myTextJiew),
}
Hoc co th dinh nghia UI bng code:
Override
public void onCreate(Bundle icicle) ]
super.onCreate(icicle),
TextJiew myTextJiew new TextJiew(this),
setContentJiew(myTextJiew),
myTextJiew.setText('Hello, Android`),
}

3.6 Menu:
3..1 Men: trong Android:
enu dua ra mt giai phap d tng tinh tin dung cua ung dung ma khng chim
dung khng gian trn man hinh. i mt Activity co ring cho no mt menu, duoc hin
thi khi nguoi dung nhn nut Menu.
Android cng h tro menu ngu canh, no duoc gan vao bt ky View nao bn trong
mt Activity. t menu ngu canh duoc hin thi khi nguoi dung nhn nut D-pad,
trackball, hoc nhn vao man hinh cam ung khoang 3 giy. menu ngu canh h tro
submenu, checkbox, radio button, shortcut key, va icon.
Cac loai menu trong android:
WIcon Menu: duoc kt voi menu, xut hin phn duoi cua man hinh thit bi khi
nut enu duoc nhn. No hin thi icon va text cho cac menu item hoc cac submenu. Icon
menu h tro tao ti da 6 menu item, va cac menu item nay khng th hin thi checkbox,
radio button, hay shortcut key.
Xy dung ung dung voi Android

^SZY%


Hinh 11 Icon menu
WExpanded Menu: hin thi khi nguoi dung chon More trong menu icon. Expand
enu hin thi mt danh sach co th cun duoc cac menu item, va cac menu item nay
khng th chua cac icon ma chi co th chua text, shortcut key va checkbox/ radio button.


Hinh 12 Expanded menu
WSubmenu: mi submenu hin thi bng mt cua s, tn cua submenu duoc hin thi
thanh header va mi enu item duoc hin thi voi dy du text, checkbox, shortcut key
va khng th hin thi icon cho cac item. Android khng h tro cac submenu lng nhau, vi
khng th thm mt submenu vao mt submenu.
Xy dung ung dung voi Android

^SZY


Hinh 13 - Submenu

3..2 c ki: Men: Item
Android h tro hu ht cac kiu menu item truyn thng, bao gm icon, shortcut,
checkbox, radio button:
Weckbox va Radio button group: D thit lp mt menu item la checkbox su
dung phuong thuc setCheckable, d thit lp trang thai cua checkbox dung setChecked.
t radio button group la mt nhom cac radio button va chi co mt trong s chung
duoc chon tai mt thoi dim. D tao mt radio button group, gan cung ID nhom cho mi
item, sau do goi phuong thuc Menu.setGroupCheckable, truyn vao ID nhom, va thit lp
gia tri cho cac tham s khac la True.
// to checkbox.
menu.add(0, CHECKBOXITEM, Menu.NONE, 'CheckBox`).setCheckable(true),
// to radio button group.
menu.add(RBGROUP, RADIOBUTTON1, Menu.NONE, 'Radiobutton 1`),
menu.add(RBGROUP, RADIOBUTTON2, Menu.NONE, 'Radiobutton 2`),
menu.add(RBGROUP, RADIOBUTTON3, Menu.NONE,
'Radiobutton 3`).setChecked(true),
menu.setGroupCheckable(RBGROUP, true, true),

Xy dung ung dung voi Android

^SZY

WSorcut Key: d chi dinh mt keypad shortcut cho mt enu Item su dung
phuong thuc setShortcut. Phuong thuc nay yu cu truyn vao 2 tham s, mt la phim s
va mt la ban phim dy du.
menuItem.setShortcut(0, b),

Wondensed Title: dung mt text d hin thi menu.
menuItem.setTitleCondensed('Short Title`),
WIcon: biu tuong chi duoc hin thi trn Icon enu
menuItem.setIcon(R.drawable.menuitemicon).

WMenu Item lick Listener: khi mt menu duoc chon s co mt xu ly diu khin.
Do la phuong thuc onOptionsItemSelected.
menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() ]
public boolean onMenuItemClick(MenuItem menuItem) ]
[ ... thc hin x ly ... ]
return true,
}
}),

WIntent: Khi mt menu item duoc chon, Android s thuc thi startActivity voi mt
di tuong Intent.
menuItem.setIntent(new Intent(this, MyOtherActivity.class)),

3..3 1o mt Men::
D tao mt menu, trong Activity override phuong thuc onCreateOptionsMenu,
phuong thuc nay duoc thuc thin ln du tin khi menu duoc hin thi.
Xy dung ung dung voi Android

^SZY

onCreateOptionsMenu nhn mt tham s kiu Menu. Dung phuong thuc add trn
di tuong enu nay d thm vao cac item. i menu item cn phai chi dinh cac thuc
tinh sau:
WNhom ma item do duoc thm vao.
WID, mi item co mt ID duy nht, bi vi chung duoc xu ly chung trong phuong
thuc onOptionsItemSelected nn vic xac dinh item nao duoc chon la phu thuc vao ID
duoc chi dinh cho no.
WCach sp xp thu tu ma item duoc hin thi.
WText th hin cua item, co th la mt chui cac ky tu hoc mt string resource.
Vi du:
static final private int MENUITEM Menu.FIRST,

Override
public boolean onCreateOptionsMenu(Menu menu) ]
super.onCreateOptionsMenu(menu),
// nhom
I int groupId 0,
// ID
int menuItemId MENUITEM,
// cach sp xp
int menuItemOrder Menu.NONE,
// Texthin th
int menuItemText R.string.menuitem,

MenuItem menuItem menu.add(groupId, menuItemId,
menuItemOrder, menuItemText),
return true,
}

Xy dung ung dung voi Android

^SZY

..ng: Kt lun

1. Kt qua dt d.c:
Dung truoc su phat trin cua cac thit bi di dng va nhung doi hoi cua con nguoi
trong linh vuc giai tri, ung dung trn cac thit bi di dng ngay cang cao. Voi d tai ~Xy
dng ng dng vi Android, d trinh bay duoc tng quan v lp trinh trn Android.

2. H.ng pEt trin:
Hin tai, h diu hanh Android dang phat trin ruc r, vi tinh nng m cua no. Va
no cng dang duoc cng dng cac lp trinh vin trn khp th gioi quan tm va tim hiu,
dng thoi tro giup cho Google phat trin va hoan thin tinh nng cho h diu hanh nay.
Do do, trong tuong lai nhom thuc hin s tip tuc tim hiu, di su hon v cac k thut 3D
cho ung dung Android, huong dn phat trin cac demo trn thanh mt game 3D hoan
chinh.













Xy dung ung dung voi Android

^SZY

PHJ LJ
H.ng dn ci d}t:
1. i d}t ng dng co Emulator:
a. Khi dng emulator mun install ung dung. (Vao Eclipse-~Window/Android
SDK and AVD manager -~ chon AVD ri Start).
b. .Dua Iile ImageEditor.apk vao trong Iolder tools cua Iolder chua sdk. VD:
C:\android-sdk-windows\tools.
c. Command shell ln va di chuyn toi Iolder nay. VD: Trong Window vao
Run g cmd, ri dung lnh cd d toi duoc Iolder tools.
d. G vao command shell lnh adb install <tn_file.apk>. VD: adb install
ImageEditor.apk
e. Vao emulator -~ chon ung dung va chay.

2. i d}t ng dng co din toi tt:
a. Kt ni din thoai voi may tinh qua cng usb.
b. Thay di cai dt ung dung, vao ENU ~ Settings ~ Applications ~ Unknown
Sources.
c. Bt Usb debugging trn din thoai, vao ENU ~ Settings ~ Applications ~
Development, sau do enable USB debugging.
d. Command shell ln va di chuyn toi Iolder nay. VD: Trong Window vao
Run g cmd, ri dung lnh cd d toi duoc Iolder tools.
e. G vao command shell lnh adb install <tn_file.apk>. VD: adb install
ImageEditor.apk
I. Vao emulator -~ chon ung dung va chay.



Xy dung ung dung voi Android

^SZY

TI LIJU THAM KHAO


1. Vladimir Silva. Pro android games. Apress. Springer-Verlag New York. 2009.
2. Sayed Y. Hashimi, Satya Komatineni, Dave acLean. Pro android 2. Apress.
Springer-Verlag New York. 2010.
3. Reto eier. Professional Android Application Development. Wiley Publishing,
Inc. 2009.
4. ikael Gustavssom. 3D Game Engine Design for Mobile Phones with OpenGL ES
2.0. aster oI Science Thesis Stockholm, Sweden. 2008.
5. Kari Pulli, Tomi Aarnio, Ville iettinen, Kimmo Roimela, Jani Vaarala. Mobile
3D Graphics with OpenGL ES and M3G. organ KauImann Publishers. Elsevier
Inc. 2008.
6. AaItab unshi, Jon Leech. OpenGL ES Common Profile Specification. The
Khronos Group Inc. 2009.
7. Frank Ableson. Nhp mon phat trin ng dung Android. 2011.
8. Bui inh Truong. Lp trinh Opengl vi thu vin AUX.
www.nhipsongcongnghe.net.
9. Android OpenGL ES Issues. OmniG SoItware Inc. 2008
10.Phan anh Cuong. Lun vn Ngin cu lp trinh C trn Symbian. 2009.
11.Chu Duy Thin, V Thuy Linh, L Quc Tin. Tiu lun Tim hiu va vit ng
dung trn nn h diu hanh mobile Android. 2010.
12.http://www.android.com/
13.http://developer.android.com/index.html
14.http://code.google.com/intl/vi-VN/android/
15.http://www.sunsetlakesoItware.com/2008/08/05/lessons-molecules-opengl-es
16.http://nehe.gamedev.net/
17.http://www.anddev.org/android-2d-3d-graphics-opengl-tutorials-I2/page300.html

You might also like