You are on page 1of 56

TRNG I HC BCH KHOA H NI

Vin Cng ngh Thng tin v Truyn thng

BO CO N 2
ti:

Tm hiu h iu hnh Android v xy dng ng dng minh ha

Gio vin hng dn: ThS. Lng Mnh B Sinh vin thc hin: 1. L c Anh SHSV: 20109202 2. Nguyn Vn Bo SHSV: 20109209 3. Bi Vn Chin SHSV: 20109214

H NI 11/2012

MC LC
IM U .......................................................................................................................................... 4 Gii thiu chung................................................................................................................................ 4 Kin trc h iu hnh Android ........................................................................................................ 4 PHT TRIN NG DNG CHO H IU HNH ANDROID. .............................................. 6 Tng quan ng dng Android ........................................................................................................... 6 Mi trng, cng c h tr pht trin ............................................................................................... 6 Mi trng pht trin .................................................................................................................... 6 Ci t plugin ADT cho Eclipse ................................................................................................... 7 Ci t Android SDK .................................................................................................................... 8 Ci t SDK APIs ......................................................................................................................... 9 Ci t AVD s dng AVD Manager ......................................................................................... 10 Cng c g ri DDMS (Dalvik Debug Monitor Server) ............................................................ 12 Ci t AVD s dng dng lnh ................................................................................................. 13 S dng Android Emulator ......................................................................................................... 14 Ci t ng dng vo Emulator .............................................................................................. 14 Lm vic vi Disk images trong Emulator .............................................................................. 16 Emulator Networking .............................................................................................................. 16 S dng Emulator Console ..................................................................................................... 18 To chng trnh Hello World .................................................................................................... 24 Thnh phn giao din trong Android .......................................................................................... 30 View: ....................................................................................................................................... 30 ViewGroup : ............................................................................................................................ 30 Mt s thnh phn giao din thng dng ................................................................................ 30 Button:................................................................................................................................. 30 ImageButton:....................................................................................................................... 31 ImageView: ......................................................................................................................... 31 TextView: ............................................................................................................................ 31 EditText: .............................................................................................................................. 32 CheckBox: ........................................................................................................................... 32 RadioButton v RadioGroup: ............................................................................................. 33 2 II- H IU HNH ANDROID. .......................................................................................................... 4 1. 2. III1. 2. 2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. 2.8.1. 2.8.2. 2.8.3. 2.8.4. 3. 3.1. 3.2. 3.2.1. 3.2.2. 3.2.3. 3.2.3.1. 3.2.3.2. 3.2.3.3. 3.2.3.4. 3.2.3.5. 3.2.3.6. 3.2.3.7.

Pht trin ng dng trn Android.................................................................................................... 23

3.2.3.8. 3.2.3.9. 3.2.3.10. 3.2.3.11. 3.3. 3.4. 3.5. 3.6. 3.6.1. 3.6.2. 3.6.3. IVVVI-

ListView: ............................................................................................................................. 34 AutoCompleteTextView:...................................................................................................... 35 Menu Options: .................................................................................................................... 36 ProgressBar: ....................................................................................................................... 37

Thao tc vi lung ...................................................................................................................... 39 Thao tc c s d liu s dng SQLite ....................................................................................... 41 Activity v Intent ........................................................................................................................ 43 B nh chia s ............................................................................................................................. 45 Shared Preferences ................................................................................................................. 45 Internal Storeage: ................................................................................................................... 47 External Storeage.................................................................................................................... 48 NG DNG MINH HA .......................................................................................................... 49 KT LUN................................................................................................................................. 55 TI LIU THAM KHO........................................................................................................... 56

I-

M U

Hin nay, nhu cu s dng cc thit b di ng ngy cng ln, ko theo s pht trin ca cc nn tng di ng. Trn th trng c rt nhiu h iu hnh di ng nh iOS, Window Phone, BlackBerry, Symbian, LiMo, ... Trong , ni bt phi k n l h iu hnh Android. Vi c tnh l nn tng m ngun m v hon ton min ph, Android to nhiu thun li cho cc nh pht trin thit k ng dng di ng ca mnh, gip nn tng ny ngy cng pht trin hn na.. IIH IU HNH ANDROID.

1. Gii thiu chung Android l b cng c phn mm m ngun m da trn nhn Linux 2.6 dnh cho nn tng di ng c pht trin bi Google v Open Handset Alliance (t chc a quc gia do Google lp, nhm xy dng mt chic in thoi tt hn da trn Android). Hng trm triu thit b Android trn ton cu hin nay minh chng cho s pht trin mnh m ca nn tng ny. Nhng c tnh ni tri ca h iu hnh Android so vi cc h iu hnh di ng khc: Android thc s m, mt nn tng pht trin da trn Linux v m ngun m: Cc nh sn xut thit b v cc nh pht trin yu thch Android do h c th s dng v ty chnh n m khng phi tr tin bn quyn. Cung cp cc dch v nn tng pht trin ng dng. H tr ngn ng lp trnh Java, C/C++. D dng xy dng, chnh sa, nng cp ng dng. Ti u ha cho cc thit b vi ngun nng lng thp v b nh hn ch. ha v m thanh cht lng cao. Tng thch vi nhiu kin trc phn cng khc nhau. c h tr mnh m t Google..

2. Kin trc h iu hnh Android

Linux Kernel: Android c xy dng da trn nhn Linux v l mt h iu hnh a nhim thc s. Nhn Linux cung cp tng o ha phn cng cho Android, gip Android c th thch hp vi a dng nn tng phn cng. Libraries: Cc th vin chia s ton b c vit bng C/C++, c bin dch ph hp vi c th kin trc phn cng s dng bi cc thit b di ng, c ci t sn bi nh sn xut. Mt s th vin quan trng nh: Surface Manager: Qun l ca s, hin th, hiu ng. 2D, 3D Graphics: Th vin ha s dng phn cng 3D (nu c) v cng c h tr nhanh (nu khng). Media codecs: Android chi c nhiu nh dng video v m thanh nh: AAC, AVC, H.263, MP3, MP4... SQLite database: Cng c c s d liu gn nh. Browser engine: h tr xy dng ng dng duyt web, Android s dng Webkit libraries.

Android Runtime: gm th vin li Java, my o Dalvik (ti u ha cho b nh hn ch, cho php nhiu VM chy ng thi v to thun li cho h iu hnh li (Linux) trong bo mt v c lp gia cc tin trnh) Application Framework: tng ny cung cp thnh phn cp cao to ng dng, mc nh c ci sn, nhng nh pht trin c th k tha bng nhng thnh phn ca mnh. Mt s thnh phn quan trng:
5

Activity manager: iu khin vng i ng dng. Content providers: nhng i tng d liu c ng gi cn thit chia s gia cc ng dng (v d nh l danh b) Resource manager: qun l ti nguyn ca ng dng (nhng th khng phi l code nh xu k t, hnh nh, m thanh...) Location manager: cho php xc nh v tr thit b da vo GPS v Google Maps. Notification manager: qun l thng bo n ngi dng (v d nh: c tin nhn, lch, cnh bo...)

Application: Android cung cp mt s cc ng dng tiu chun i km thit b nh: ng dng gi in, danh b, SMS, Email, bn , trnh duyt, danh b, ... cho nh pht trin. IIIPHT TRIN NG DNG CHO H IU HNH ANDROID.

1. Tng quan ng dng Android Trong Android, ch c mt ng dng tin cnh (foreground application) chim ton b mn hnh v ch i ngi dng tng tc (v d nh ng dng Home mi khi ngi dng m my). Khi ngi dng chy mt ng dng, Android khi ng v a n ra tin cnh. T ng dng ny, ngi dng c th i n ng dng khc, mn hnh khc v.v. Tt c chng trnh v mn hnh c ghi vo application stack bi Activity manager. Ngi dng c th dng nt Back tr li mn hnh trc . Mt ng dng l mt hoc nhiu activity cng thm mt tin trnh Linux cha n. Cc ng dng c qun l cht ch vic s dng ti nguyn nhm trnh lng ph, xung t, m bo hiu nng h thng. ng dng Android c phn m rng l Apk Thnh phn chnh c dng trong ng dng Android Activities: mt Activity th hin mt mn hnh giao din ngi dng Services: Thnh phn chy ngm, khng c giao din, dng chy cc tc v lu di. Content providers: qun l d liu chia s, truy vn d liu. V d vic ly d liu trong danh b Broadcast receiver: thnh phn thng bo ca h thng, n bt cc s kin.

2. Mi trng, cng c h tr pht trin 2.1.Mi trng pht trin - Eclipse IDE - Plugin cho Eclipse ADT
6

- Android SDK 2.2.Ci t plugin ADT cho Eclipse Cch 1: 1. M Eclipse, vo help > Install New Software > chn Add v in https://dlssl.google.com/android/eclipse/ vo Location

2. Chn thnh phn Deverloper Tool v ci t Cch 2: 1. Ti ADT-20.0.3.zip mi nht trn http://developer.android.com/tools/sdk/eclipse-adt.html 2. Gii nn, copy ton b file trong th mc features v plugins vo th mc tng ng ca th mc ci t Eclipse

2.3.Ci t Android SDK 1. Ti Android SDK dng file zip ti http://developer.android.com/sdk/index.html 2. Gii nn ra th mc bt k 3. M Eclipse, chn Window > Preferences, chn mc Android 4. Ti SDK Location, in ng dn n th mc Android SDK va gii nn, chn OK

2.4.Ci t SDK APIs 1. Trong Eclipse, vo Window > Android SDK Manager 2. Chn nn tng API v tin hnh ci t

2.5.Ci t AVD s dng AVD Manager 1. Trong Eclipse, vo Window > AVD Manager > New 2. in tn my ti Name, chn nn tng ti Target, dung lng th nh ti SD Card, kch thc mn hnh ti Skin, cu hnh chi tit ti Hardware, sau n Create AVD.

3. khi ng AVD, chn AVD trong list > Start

10

Figure 1: Giao din Emulator khi khi ng xong

11

2.6.Cng c g ri DDMS (Dalvik Debug Monitor Server)

DDMS cho php theo di hot ng trong Emulator, h tr sa li, xem, dng cc tin trnh, truy cp h thng file, gi lp gi tin nhn, gi in, GPS,

12

2.7.Ci t AVD s dng dng lnh T ca s dng lnh i vo <sdk>/tools Hin th Target c ci t, s dng lnh: android list targets . N s qut trong 2 th mc <sdk>/platforms/ v <sdk>/add-ons/ v hin th kt qu. V d:

to AVD mi, s dng lnh: android create avd -n <name> -t <targetID> [-<option> <value>] name : tn AVD targetID: id ca target trong h thng (nh v d trn) [-<option> <value>] : cc ty chn khc V d: android create avd n my_android t 2 --skin WXGA800 Cc file AVD s c cha mc nh ~/.android/avd/ (vi Linux/Mac), <user>\.android\avd (vi Window). ty bin ta c th thm ty chn p <ng dn> to SD Card thm ty chn -c <size>[K|M] xa AVD, s dng lnh: android delete avd -n <name> Khi ng AVD: s dng lnh emulator -avd <avd_name> [<options>]
13

2.8.S dng Android Emulator Android Emulator thit k, pht trin, th nghim, sa li ng dng Android m khng cn s dng thit b tht. N m phng hu ht phn cng cng nh phn mm ging thit b tht ngoi tr vic khng th gi in nh my tht. 2.8.1. Ci t ng dng vo Emulator i vi mi trng Eclipse + ADT ng dng t ng c ci khi Build Nu khng s dng mi trng Eclipse + ADT, ta dng cng c adb vi c php nh sau: adb install <ng dn n file .apk> Trong trng hp c nhiu Emulator ang chy ta xc nh Emulator thng qua s hiu cng ca n. V d ci ng dng cho Emulator c s hiu cng 5554 ta lm nh sau: adb s emulator-5554 install <ng dn n file .apk> Ni thm v qu trnh to ra file .apk

14

Figure 2: Qu trnh to file apk

Cng c ng gi aapt (Android Asset Packaging Tool) thu thp cc file ti nguyn (nh l cc file .xml), bin dch chng v ng thi to ra file R.java (dng qun l cc thuc tnh c khai bo trong file xml).
15

Cng c aidl (Android Interface Definition Language) chuyn i .aidl interfaces (nu c) vo trong Java interfaces. R.java, m ngun, cng vi file aidl c bin dch bi Java complier cho ra .class file Dex tools s chuyn cc file class (k c ca bn th 3) thnh Dalvik bytecode Cc ti nguyn khng c bin dch (v d: hnh nh), cc ti nguyn c bin dch, cng vi .dex file c ng gi thnh file apk s dng apkbuilder File apk c ng k dng Debug hoc Release, nu ng dng c ng k dng Release cn qua b zipalign gip gim b nh s dng khi chy trn thit b. 2.8.2. Lm vic vi Disk images trong Emulator

++File nh mc nh (Default image files): Nu khi Emulator khi ng m khng tm thy file nh d liu ngi dng (user data image), n s to mi t mt phin bn mc nh trong SDK v file nh l file ch c. C th thay i ng dn n user data image (file userdata.img) bng cch thm ty chn lc khi ng l system <ng dn>. Ta cng c th thay i tn ca user data image bng cch thm ty chn khi ng initdata <file> ++File nh khi chy (Runtime images): Ti thi im chy, Emulator c v ghi d liu vo hai a nh userdata-qenu.img v sdcard.img m phng phn vng d liu ngi dng v thit b lu tr gn ngoi (nh SD Card) trn my tht. Nh file nh mc nh trn, ta cng c th thay i ng dn n hai a nh ny vi ty chn khi ng data <ng dn> v sdcard <ng dn>, nu ng dn ch c tn file, Emulator s tm trong th mc lm vic hin ti. ++File nh tm (Temporary Images): Emulator to hai file nh c th ghi v xa chng khi tt my l: Bn sao c th ghi ca h thng Android Phn vng /cache

Phn vng /cache c khi to rng s dng bi trnh duyt lu trang web v nh. Emulator cung cp ty chn cache <file> lu tr /cache khi tt my. 2.8.3. Emulator Networking ++Khng gian a ch: Mi thc th Emulator chy sau mt router/firewall o, c lp vi giao din mng ca my pht trin v vi internet; n khng th nhn thy my ca nh pht trin v cc Emulator khc. N ch nhn thy cc kt ni thng qua router/firewall.
16

Router o ca mi thc th qun l khng gian a ch 10.0.2/24. a ch trong khng gian nay c t trc bi Emulator/router nh sau: a ch 10.0.2.1 10.0.2.2 10.0.2.3 10.0.2.4/ 10.0.2.5/10.0.2.6 10.0.2.15 127.0.0.1 M t Router/gateway address a ch loopback gn vi 127.0.0.1 trn my tnh nh pht trin DNS server u tin DNS server th 2, 3, 4 (nu cn) a ch Emulator trong mng ca n a ch loopback Emulator trong mang ca n

Tt c thc th Emulator u c gn ging nhau v ging nh trn. ++S dng Network Redirection: giao tip vi Emulator cn phi thit lp network redirection cho router ca n. Ci t s dng Emulator console: 1. telnet localhost <port number> : port number l s hiu cng ca Emulator (thng thy trn gc tri ca s Emulator), khi kt ni thnh cng th n bc 2. 2. add <protocol> : <host-port> : <guest-port> (protocol c th l TCP hoc UDP, hostport l cng ti my nh pht trin, guest-port l cng ca h thng m phng) V d: redir add tcp:8080:80 s to network redirection mi khi thng tin TCP n 127.0.0.1:8080 ti my nh pht trin n s t ng chuyn tip n h thng m phng ti a ch 10.0.2.15:80; Ci t s dng ADB ADB (Android Debug Bridge) tool cung cp vic chuyn tip cng. Vi v d trn, c php l: adb forward tcp:8080 tcp:80 ++Cu hnh ci t Emulator DNS: Lc khi ng, Emulator c danh sch DNS server m h thng ca nh pht trin ang dng, sau nh x ti a 4 a ch DNS server vo trong a ch m phng 10.0.2.3, 10.0.2.4, 10.0.2.5, 10.0.2.6.

17

Nu khi ng t dng lnh, ta c th thm ty chn dns-server <danh sch a ch ngn cch bi du phy> thit lp DNS cho Emulator. ++Kt ni gia cc Emulator: lm c iu ny, chng ta s s dng network redirection Gi s hai Emulator A v B cng chy trn my nh pht trin, gi s A l server, B kt ni n A, ta s lm nh sau: 1. A s nghe ti 10.0.2.15:<server_port> 2. redir add <protocol> : <local_port> : <server_port> 3. B s kt ni n 10.0.2.2:<local_port> ++Gi in, gi tin SMS n Emulator khc: Emulator t ng chuyn tip cuc gi hay SMS bng s hiu cng. gi in hay gi SMS n Emulator khc, ta bt ng dng gi in hoc nhn tin ln, thay s my tht bng s hiu cng ca Emulator cn kt ni n. 2.8.4. S dng Emulator Console Mi thc th Emulator ang hot ng cung cp mt Console cho php truy vn, iu khin mi trng thit b m phng. V d: dng Console qun l port redirection ( ni n phn trc), cc s kin, khi ng dng chy trn Emulator. truy cp Console ta dng telnet kt ni ti cng ca Emulator C php: telnet localhost <console-port> Minh ha:

18

Mt thc th Emulator c mt cp cng k nhau: console port v adb port, adb port s ln hn. V d console port l 5554 th adb port l 5555

19

Lu : Emulator nghe kt ni t cng trong khong t 5554-5587, v ch chp nhn kt ni t local host ++Post Redirection: C php: redir <list | add | del> Chi tit: Lnh con list add <protocol> : <host_port> : <guest_port> del <protocol> : <host_port> M t Hin th port redirection Thm mi mt port redirection Xa mt port redirection

++Geo Location Provider Emulation (gi lp cung cp v tr): Chng ta c th s dng Console thit lp v tr a l cung cp cho ng dng chy trong Emulator s dng lnh geo. Lnh ny gi mt thng s v tr GPS n Emulator c th km hoc khng nh dng NMEA 0183 (chun truyn d liu gia cc thit b in t trong c GPS). C php geo <fix | nmea>
20

Chi tit: Lnh con fix <longitude> <latitude> [<altitude>] nmea <mt cu> M t Cung cp kinh , v [ cao (theo mt)] Gi cu NMEA 0183 n Emulator nu nh n c gi t mt GPS modem m phng (cu phi bt u bng $GP, hin ti ch h tr GPGGA v $GPRCM)

++ Device Power Characteristics (M phng tnh cht ngun ca thit b) C php: power <display|ac|status|present|health|capacity> Chi tit: Lnh con display ac <on|off> status <unknown|charging|discharging|notcharging|full> present <true|false> health <unknown|good|overheat|dead|overvoltage|failure> capacity <percent> M t Hin th pin v trng thi np in Thit lp trng thi np AC Thay i trng thi ca pin Thit lp c pin hoc khng Thit lp sc khe pin Thit lp dung lng pin cn li (0-100)

++ Network Status (trng thi mng) C php: network status ++ Network Delay Emulation (m phng tr mng) C php ty chn khi khi ng: emulator -netdelay <gi tr> Khi Emulator ang chy, kt ni vo Console v dng lnh: network delay <gi tr> V d: network delay gprs Chi tit:
21

Gi tr gprs edge umts none <num> <min> : <max>

M t (n v mili giy) GPRS (min 150, max 550) EDGE/EGPRS (min 80, max 400) UMTS/3G (min 35, max 200) (min 0, max 0) S chnh xc Khong t t

++ Network Speed Emulation (m phng tc mng) C php ty chn khi khi ng: emulator -netspeed <gi tr> Khi Emulator ang chy, kt ni vo Console v dng lnh: network speed <gi tr> Chi tit: Gi tr gsm hscsd gprs edge umts hsdpa full <num> <up>:<down> M t (n v kilobits/giy) GSM/CSD (Up: 14.4, down: 14.4) HSCSD (Up: 14.4, down: 43.2) GPRS (Up: 40.0, down: 80.0) EDGE/EGPRS (Up: 118.4, down: 236.8) UMTS/3G (Up: 128.0, down: 1920.0) HSDPA (Up: 348.0, down: 14400.0) Khng gii hn (Up: 0.0, down: 0.0) Up = down = number S chnh xc

++Telephony Emulation (m phng thoi) C php: gsm <call|accept|busy|cancel|data|hold|list|voice|status> Lnh con call <phonenumber> M t Cuc gi n t phonenumber
22

accept <phonenumber>

Chp nhn cuc gi t phonenumber thay i trng thi sang active (nu trng thi hin ti l waiting hoc held) ng cuc gi i n phonenumber, thay i trng thi thnh busy (nu trng thi hin ti l waiting) Kt thc gi i hoc n phonenumber Thay i trng thi kt ni d liu GPRS v state: unregistered Khng c mng home Trong mng ch roaming ang roaming searching ang tm mng denied Ch gi khn cp off ging 'unregistered' on ging 'home'

busy <phonenumber>

cancel <phonenumber> data <state>

hold list voice <state>

Thay i trang thi thnh held <nu trng thi hin ti l active hoc waiting> Hin th danh sch cc cuc gi + trng thi ca n Thay i trng thi kt ni GPRS voice v state: unregistered Khng c mng home Trong mng ch roaming ang roaming searching ang tm mng denied Ch gi khn cp off ging 'unregistered' on ging 'home'

status

Bo co trng thi hin ti ca GSM voice/data

++ SMS Emulation (m phng tin nhn SMS) C php: sms send <senderPhoneNumber> <textmessage> ++ VM State (thay i trng thi my o trn Emulator) C php: vm <start|stop|status> 3. Pht trin ng dng trn Android
23

3.1.To chng trnh Hello World 1. M Eclipse > File > New > Project chn Android Application Project 2. in tn ng dng

3. n next lin tip, n phn t tn cho Activity, v Layout sau Finish

24

Cu trc chng trnh Hello World

25

Cc th mc: Src: cha ton b m ngun chng trnh Gen: cha file R.java khi bin dch Assets: cha cc file m thanh streaming Res: cha cc ti nguyn ca chng trnh Drawable: cc file nh Layout: cha file xml, quyt nh giao din chng trnh Menu: cha file xml thit k cho menu Values: cha cc ti nguyn khc nh xu k t, theme style File Manifest: nh ngha cu trc, cc thnh phn yu cu ca ng dng

26

V d file manifest:

Mt s thnh phn trong file manifest: Uses-sdk: xc nh SDK version min, max m ng dng h tr Uses-feature: c t thnh phn phn cng no yu cu bi ng dng (v d: Audio, Bluetooth, Camera, Location, ) Support-screens: kch thc mn hnh ng dng Uses-permission: nh ngha quyn ngi dng vi cc thnh phn ng dng yu cu (v d: <uses-permission android:name=android.permission. BLUETOOTH/>) Applicaton: c t d liu cho ng dng (v d: tiu , icon, theme) Activity: m t cho Activity chnh v cc Activity khc

Hnh nh file main.xml

27

File HelloWorld.java

28

Kt qu chy chng trnh HelloWorld

29

3.2.Thnh phn giao din trong Android 3.2.1. View: Giao din ngi dng trong ng dng Android c cu thnh t cc i tng gi l View v View Group. Cc thnh phn ny u c xut pht t lp view c s gi v c gi l widget. hin th giao din th trong hm onCreate ca Activity cn gi hm setContentView(R.laylout.main) ti giao din t file main.xml. 3.2.2. ViewGroup : to cc giao din phc tp cn dng ViewGroup nhm cc View theo nh pht trin v c khai bo trong cc file XML. Mt s ViewGroup thng dng ++LinearLayout: sp xp cc thnh phn theo dng hoc theo ct ++RelativeLayout: sp xp bng cch m t v tr gia thnh phn ny so vi thnh phn khc ++TableLayout: sp xp cc thnh phn ging nh li gm c cc hng, cc ct 3.2.3. Mt s thnh phn giao din thng dng 3.2.3.1.Button:

Nt bm c khai bo trong file XML bng th <Button>. V d:


<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="hello" android:onClick="click"/>

khai bo mt nt bm c ID l button, chiu rng, chiu cao va vi ni dung, ch hin th trn nt l hello, phng thc x l s kin n nt l phng thc click() (c nh ngha trong m ngun) Cu trc phng thc click():
public void click(View button)

30

{ // lam viec gi do }

Nu khng dng android:onClick ta s khai bo trong m ngun nh sau:


Button myButton = (Button)findViewById(R.id.button); myButton.setOnClickListener(new OnClickListener() {

public void onClick(View v) { // lam viec gi do

} });

3.2.3.2.ImageButton: Ging nh Button, ta ch thay tn th l <ImageButton> v khai thm trong file XML ngun nh v khng c phn text, nh c cha trong th mc res/drawable:
android:src="@drawable/icon"

3.2.3.3.ImageView: Dng hin th nh, v d khai bo trong file XML:


<ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="fill_parent" android:src="@drawable/image"/>

nh c ID l image, chiu rng, chiu cao va mn hnh, ngun l image.png 3.2.3.4.TextView: Dng hin th vn bn, v d:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true"

31

android:text="@string/hello_world"/>

s hin th ni dung nm trong "@string/hello_world" 3.2.3.5.EditText:

Hin th nhp liu, v d:


<EditText android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

3.2.3.6.CheckBox:

Hin th chn, v d:
<CheckBox android:id="@+id/check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="unChecked"/>

x l s kin CheckBox ny c chn hay b chn trong m ngun ta lm nh sau:

CheckBox cb = (CheckBox)findViewById(R.id. check); cb.setOnCheckedChangeListener( new OnCheckedChangeListener() {

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { // lm g } });

32

Mt s phng thc khc nh: isChecked(), setChecked(boolean) 3.2.3.7.RadioButton v RadioGroup:

Cc nt chn, v d:
<RadioGroup android:id="@+id/group" android:layout_height="wrap_content" android:layout_width="wrap_content"> <RadioButton android:id="@+id/radio1" android:text="radio1" /> <RadioButton android:id="@+id/radio2" android:text="radio2" /> </RadioGroup>

x l s kin trn RadioGroup ta lm nh sau, v d:


RadioGroup r = (RadioGroup)findViewById(R.id. group); switch (r.getCheckedRadioButtonId()) { case R.id.radio1: // lm g break;

case R.id.radio2: // lm g break;

33

3.2.3.8.ListView: Hin th danh sch, v d:


<ListView android:id="@+id/list" android:layout_width="fill_parent" android:layout_height="fill_parent" />

V d thm phn t vo danh sch:


String[] data = {"1", "2", "3", "4"}; List<String> model = new ArrayList<String>(); ListView list = (ListView)findViewById(R.id.list); ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, model);;

list.setAdapter(adapter);

adapter.add(data[0]); adapter.add(data[1]); adapter.add(data[2]); adapter.add(data[3]);

u tin ta ly gn ListView vo bin list sau to i tng thuc kiu List<kiu d liu ca List> v d l model, khi to mt i tng ArrayAdapter (v d l adapter) lm cu ni chuyn d liu vo list, dng cu lnh list.setAdapter(adapter) ni. thm d liu vo list ta dng cu lnh adapter.add(d liu). Kt qu minh ha:

34

x l s kin click vo cc dng trong ListView ta lm nh sau:


list.setOnItemClickListener( new OnItemClickListener() {

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // lm g (arg2 l v tr click trong list)

} });

3.2.3.9.AutoCompleteTextView: V d trong file XML:


<AutoCompleteTextView android:id="@+id/edit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:completionThreshold="3" />

Trong m ngun:
String[] data = {"Dai hoc BKHN", "Dai hoc KTQD"};

35

AutoCompleteTextView a = (AutoCompleteTextView)findViewById(R.id. edit); a.setAdapter(new ArrayAdapter<String> (this, android.R.layout.simple_dropdown_item_1line , data));

Kt qu minh ha:

3.2.3.10.

Menu Options:

to menu option ta khai bo file XML trong th mc res > menu. V d my_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/abc" android:title="My Menu" /> </menu>

Trong m ngun:
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.my_menu, menu); return true; }

36

Kt qu minh ha:

x l s kin click vo menu item ta lm nh sau:


@Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getItemId() == R.id. abc) { // lm g } return super.onOptionsItemSelected(item); }

3.2.3.11.

ProgressBar:

++ProgressBar ngm nh ca Activity Cch to:


37

Trong hm onCreate() khai bo requestWindowFeature(Window.FEATURE_PROGRESS); trc hm setContentView(R.layout.main) hin th ProgressBar dng lnh: setProgressBarVisibility(true); thit lp gi tr cho ProgressBar dng lnh: setProgress(int gi tr); (Ti a 10000) Minh ha:

++ProgressBar s dng khai bo trong file XML


<ProgressBar android:id="@+id/progress" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

Minh ha:

ProgressBar dng ngang ta thm:


style="@android:style/Widget.ProgressBar.Horizontal"

38

Trong m ngun ta lm nh sau:


ProgressBar pg = (ProgressBar)findViewById(R.id.progress); pg.setProgress(gi tr); // ti a 100

Hnh minh ha:

3.3.Thao tc vi lung Trong Android c lung chnh cp nht giao din l UI Thread v cc lung ph Background to mt lung Background ta lm nh sau: Khai bo lp lung vi Runable:
private Runnable MyTask = new Runnable() {

public void run() { // lm g

} };

To i tng lung:
Thread my_thread = new Thread(MyTask);

khi ng lung dng lnh: my_thread.start();

trao i d liu gia UI Thread v lung Background ta c cc cch sau: ++Dng phng thc runOnUiThread()

39

V d:
runOnUiThread(new Runnable() {

public void run() { // thao tc c th s dng d liu ca UI Thread

} });

++S dng Handler: i tng Handler s bt cc thng ip t lung Background cho vo hng i thng ip, v c th thao tc vi d liu UI Thread bt c lc no. V d:
Handler handler = new Handler() { @Override public void handleMessage(Message msg) { // TODO Auto-generated method stub super.handleMessage(msg); //lm g vi msg, c th ly d liu bng msg.getData() } };

Trong lung Background ta c th lm nh sau:


Message msg = handler.obtainMessage(); // msg c th cha nhiu loi d liu v d: msg.setData(Data Object) handler.sendMessage(msg);

++S dng AsyncTask: AsyncTask c cc phng thc lm vic vi lung Background v UI Thread Phng thc doInBackground(): thc hin cc cng vic trong lung Background, truyn d liu n dng hm publishProgress(d liu). Phng thc onProgressUpdate(Kiu d liu values);

40

Trong kiu d liu trng vi kiu ca d liu trong publishProgress(), phng thc c th dng values cp nht UI Thread. Ngoi ra cn c hai phng thc l: onPreExecute() thc hin vi d liu trn UI Thread, c gi trc khi thc hin doInBackground() v phng thc onPostExecute() thc hin vi d liu trn UI Thread sau khi thc hin doInBackground(). V d: To lp MyAsyncTask k tha t AsyncTask < ? ,? , ? > ? tng ng cc kiu d liu trong cc phng thc
class MyAsyncTask extends AsyncTask<Void, Integer, Void> { int progress = 0; @Override protected Void doInBackground(Void... params) { // lm g publishProgress(Kiu Integer); } return null; } @Override protected void onPostExecute(Void result) { // lm g super.onPostExecute(result); } @Override protected void onProgressUpdate(Integer... values) { // lm g vi values super.onProgressUpdate(values); } }

thc hin ta gi: new MyAsyncTask().execute(); 3.4.Thao tc c s d liu s dng SQLite Ta s s dng lp SQLiteOpenHelper to, kt ni n c s d liu: To mt lp k tha t SQLiteOpenHelper v d:
41

class MyHelper extends SQLiteOpenHelper {

public MyHelper(Context context) { super(context, TN CSDL, null, PHIN BN CSDL BT U T 1); // TODO Auto-generated constructor stub }

@Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(CU LNH TO BNG D LIU); }

@Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub

To i tng thuc lp MyHelper kt ni CSDL: MyHelper helper = new MyHelper(this);

M CSDL ghi ta to mt i tng SQLiteDatabase v d:


SQLiteDatabase db = helper.getWritableDatabase();

M CSDL c: db = helper.getReadableDatabase(); ng c s d liu dng: helper.close(); ++ chn d liu vo bng ta lm nh sau: To mt i tng ContentValues v d: ContentValues cv = new ContentValues(); Sau dng lnh put a d liu vo cv, v d: cv.put(tn ct, d liu);
42

Dng lnh insert a d liu vo CSDL v d:


db.insert(tn bng, String nullColumnHack, cv);

nullColumnHack c th l null, do SQL khng cho php chn mt dng trng hon ton nn nu l null m cv cng null th khng c, cn cung cp mt tn ct c php null l nullColumnHack (c thay bi tn ct no trong bng). ++ xa d liu trong bng ta dng lnh: public int delete (String table, String whereClause, String[] whereArgs) table l tn bng whereClause: mnh WHERE whereArgs: cc tham s cho whereClause ++ xa database ta dng lnh: public static boolean deleteDatabase (File file) 3.5.Activity v Intent Trong mt ng dng Android s bao gm nhiu Activity, mi Activity s dng cu lnh setContentView() hin th ra mt giao din. t mt Activity ny gi n Activity khc ta s dng Intent. Intent bao gm cc thng s chnh l Action (hnh ng m Activity s thc hin) v Data (d liu cho vic thc thi Action). khi ng Activity mi ta dng lnh: Intent i = new Intent (action, data); startActivity(i); v d mt s action: ACTION_CALL (gi in) s dng data l tel:s in thoi ACTION_VIEW (hin th ni dung, c th l hnh nh, m thanh, web, bn ..) vi data l ng dn n ni dung cn hin th. Chng trnh c th yu cu cn phi khai bo quyn trong file Android Manifest V d data xem ton b danh b: content://contacts/people/
43

Data xem bn ti mt v tr ta xc nh: geo: kinh , v Minh ha vic gi in:


Intent i = new Intent(Intent.ACTION_CALL, Uri.parse("tel:1234")); startActivity(i);

thc hin c vic ny, ta cn khai bo quyn trong AndroidManifest


<uses-permission android:name="android.permission.CALL_PHONE" />

Minh ha xem bn
Intent i = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:21.007599,105.842929")); startActivity(i);

Ngoi cch cung cp Data nh trn c th cn c cch truyn d liu gia cc Activity:

44

Activity1.putExtra(key, Gi tr), Activity1.putExtra(Bundle data) (Bundle l kiu d liu gi c th cha c nhiu kiu d liu khc) Activity c gi s ly thng tin bng lnh: getIntent().getExtra(), getIntent.getAction(), Mt cch khai bo Intent khc l new Intent(context, <?>.class) Context l ng cnh ca ng dng <?>.class l lp Activity ngi dng t nh ngha Trong trng hp ny ta phi khai bo thm Activity trong file Manifest

Nu chng ta mun nhn mt kt qu tr v no t mt Activity c gi, ta khng dng lnh startActivity(Intent) m dng lnh startActivityForResult(Intent, requestCodeID) khi ta phi override phng thc onActivityResult(int requestCode, int resultCode, Intent data) Nu Activity c gi thc hin thnh cng resultCode s l Activity.RESULT_OK, nu tht bi s l activity.RESULT_CANCEL, ty tng trng hp ta c hnh ng tng ng. 3.6.B nh chia s lu tr d liu trong Android ngoi cch s dng SQLite Database nh ni trn, cn c cc cch sau: 3.6.1. Shared Preferences: Lu tr d liu nguyn thy bng cp key-value Trong trng hp ny ta s s dng lp Shared Preferences, c hai phng thc ly i tng Shared Preferences l: getSharePreferences(): nu c nhiu file preference, tham s u tin l tn file getPrefernces(): nu ch c mt file preference ghi vo ta m Shared Preferences.Editor bng lnh edit(), thm vo bng lnh putBoolean(), putString(), sau gi lnh commit() hon tt.
45

c d liu dng lnh getBoolean(), getString(), V d minh ha:


TextView text;

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout. ducanh);

text = (TextView)findViewById(R.id. text);

SharedPreferences sp = getSharedPreferences("demo", 0); Editor editor = sp.edit(); editor.putString("color", "green"); editor.commit();

Button btnGetColor = (Button)findViewById(R.id.btnGetColor); btnGetColor.setOnClickListener( new OnClickListener() {

public void onClick(View v) { // TODO Auto-generated method stub SharedPreferences sp = getSharedPreferences("demo", 0); text.setText("Color: "+ sp.getString("color", null)); } }); }

46

File demo.xml c lu trong th mc Data > data > ng dng > shared_prefs Ni dung file demo.xml

3.6.2. Internal Storeage: Lu tr dng b nh trong, ch c th dng bi ng dng to ra n, khi hy ci t ng dng n s b xa theo. to file dng lnh openFileOutput(FILENAME, MODE), cu lnh tr v i tng FileOutputStream ghi ta dng lnh write() sau close() hon tt. c ta dng lnh openFileInput() tham s l tn file n s tr li i tng FileInputStream, sau ta dng lnh read(), dng lnh close() ng. Ta c th thm file trong thi im ang to ng dng bng cch copy vo th mc res/raw/ M dng lnh openRawResourcce(R.id.<fileID>) n s tr v i tng InputStream Mt s cu lnh khc:
47

getFileDir(): ng dn n file lu. deleteFile(): xa file. fileList(): tr v mng cc file c lu tr

3.6.3. External Storeage: Lu tr s dng b nh m rng kim tra tnh trng xem b nh m rng c th c ghi ta dng lnh getExternalStorageState() Vi API >= 8 ta dng lnh getExternalFileDir() m file, c tham s type l loi th mc con trong b nh m rng, v d : DIRECTORY_MUSIC. Vi API <=7 ta dng lnh getExternalStorageDirectory() m file. File c lu trong th mc /Android/data/<package_name>/files/, th mc ny b xa vi API >=8; to ra file khng b xa khi hy ci ng dng ta c th dng getExternalStoragePublicDirectory() vi API >=8 v getExternalStorageDirectory() vi API <= 7 (lu vo cc th mc nh l Music, Ringtone, )

48

IVNG DNG MINH HA 1. Gii thiu ng dng Bi bo co xin trnh by minh ha ng dng hc t mi vi cc chc nng: Thm, sa xa, tm kim t mi To mt bi kim tra nh vi s cu c nhp bi ngi dng, c th chn ch c gii hn thi gian hoc l khng. 2. Thit k ng dng ng dng Android c to thnh t cc Activity (cc mn hnh tng tc vi ngi dng), cc lp giao din s c k tha t lp Activity gc, giao din c nh ngha trong cc file XML ring bit. u tin l giao din mn hnh chnh ca ng dng nh sau:

Mn hnh c TextView Xin cho, hnh cho mng v cc nt (Button) thm, tm kim t mi, vo mc to bi kim tra, mt nt tr gip cho bit s t c trong ng dng v mt nt thot khi ng dng. Trong file XML ta khai bo mt Linearlayout vi thuc tnh Vertical xp cc ni dung theo chiu dc. tin li, ta s ch nh phng thc s thc hin khi nhn nt ngay trong file XML (main.xml) chi tit nh sau:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Xin cho !" android:background="#1589FF" android:textColor="#FFFC17" android:textSize="20dp"/>

49

<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/welcome"/> <Button android:id="@+id/home_add" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Thm t mi" android:textColor="#0000FF" android:onClick="clickAdd"/> <Button android:id="@+id/home_search" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Tm kim" android:textColor="#0000FF" android:onClick="clickSearch"/> <Button android:id="@+id/home_test" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Bi kim tra" android:textColor="#0000FF" android:onClick="clickTest"/> <Button android:id="@+id/home_help" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Tr gip" android:textColor="#0000FF" android:onClick="clickHelp"/> <Button android:id="@+id/home_quit" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Thot" android:textColor="#0000FF" android:onClick="clickQuit"/> </LinearLayout>

File java chnh s c ni dng nh sau:


package apt.tutorial.newword; import import import import android.os.Bundle; android.app.Activity; android.content.Intent; android.view.View;

50

public class NewWord extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void clickAdd(View v) { Intent add_word = new Intent(this, Add_Word.class); startActivity(add_word); } public void clickSearch(View v) { Intent search_word = new Intent(this, Search_Word.class); startActivity(search_word); } public void clickTest(View v) { Intent test = new Intent(this, Test_Word.class); startActivity(test); } public void clickHelp(View v) { Intent help = new Intent(this, Help.class); startActivity(help); } public void clickQuit(View v) { finish(); } }

Phng thc clickAdd(View v) c gi khi nhn nt Thm t mi khi n s khi to mt i tng Intent gi n class Add_Word tc l gi mn hnh thm t mi v thc hin bng phng thc startActivity(). Bng cc k thut tng t ta c c cc mn hnh nh sau:

51

52

Trong ng dng minh ha ny ta s s dng SQLite lu tr t mi lm ngun t cho bi kim tra v lu tr kt qu kim tra. Ta to mt lp v d l MyDBHelper k tha t lp SQLiteOpenHelper. Lp ny s cho php thao tc chn, sa, xa, truy vn bng d liu. Bng d liu c to trong hm onCreate(SqliteDatabase db) bng cu lnh db.execSQL(chui lnh to bng). Ta cng vit trong lp ny cc hm chn, sa, xa, cc cu lnh truy vn, cp nht t mi. Thao tc s dng phng thc getReadableDatabase(), hoc getWriteableDatabase() (tr li i tng thuc lp SqliteDatabase ). V d phng thc thm t mi:
public boolean insert(String word, String description) { if(!isExist(word)) { ContentValues cv = new ContentValues(); cv.put(COL1_TABLE1, word); cv.put(COL2_TABLE1, description); getWritableDatabase().insert(TABLE1, COL2_TABLE1, cv); updateTotal(true); return true; } return false; }

Phng thc xa t:
public void delete(String word) { getWritableDatabase().delete(TABLE1, COL1_TABLE1+ " =?", new String[] { word }); updateTotal(false); }

53

Phng thc cp nht t:


public void update(String word, String new_description) { ContentValues cv = new ContentValues(); cv.put(COL2_TABLE1, new_description); getWritableDatabase().update(TABLE1, cv, COL1_TABLE1 + " =? ", new String [] {word}); }

Ly ton b d liu trong bng tr v dng con tr:


public Cursor fetchAll(String table) { Cursor c = null; String query = null; if(table.equalsIgnoreCase( TABLE2)) { query = "SELECT * FROM " + table +";"; c = getReadableDatabase().rawQuery(query, null); } else if(table.equalsIgnoreCase(TABLE1)) { query = "SELECT * FROM " + table + " WHERE "+ COL1_TABLE1+ " <>?"; c = getReadableDatabase().rawQuery(query, new String [] {"__"}); } return c; }

Vi chc nng to mt bi kim tra c gii hn thi gian, cp nht thi gian trn mn hnh ta s to lung mi m thi gian. Trong bi bo co ny minh ha s dng lp AsyncTask to lung Background v thao tc vi giao din chnh nh sau:
class MyAsyncTask extends AsyncTask<Void, Integer, Void> { int time_update = 0; @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub while(time_update > 0) { SystemClock.sleep(1000); time_update--; publishProgress(time_update); } return null; } @Override protected void onProgressUpdate(Integer... values) { // TODO Auto-generated method stub super.onProgressUpdate(values); time_view.setText("Time "+ second2minute(values[0])); }

54

@Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); time_update = TIME_PER_TASK*numberTask; } @Override protected void onPostExecute(Void result) { // TODO Auto-generated method stub super.onPostExecute(result); flag = false; task.setText("Ht gi ! n kt thc xem kt qu !"); answer.setEnabled(false); btn.setText("Kt thc"); } }

Hm onPreExecute() thc hin cc cng vic trc khi chy lung background v c th thao tc vi d liu trn lung chnh, trong trng hp ny l gn gi tr cho bin time_update. Hm doInBackground() lm cc cng vic ca lung Background v gi d liu n giao din bng phng thc publishProgress(), trong v d ny l gi bin m n giao din. Hm onProgressUpdate() nhn d liu t lung background v cp nht ln giao din, trong trng hp v d l cp nht thi gian ln giao din. Hm onPostExecute() thc hin cc cng vic sau khi lung background thc hin xong, trong v d th n a ra thng bo ht gi v kha cc giao din khng cho ngi dng nhp cu tr li.

55

V-

KT LUN

Vi c tnh mnh m l mt nn tng m, li c Google h tr cng cc cng c tin li, vic pht trin ng dng trn h iu hnh Android c rt nhiu thun li cho cc nh pht trin tha sc sng to nhng ng dng phc v nhu cu a dng ca cuc sng. VITI LIU THAM KHO 1. Pramatic - Hello Android 2008 2. Beginning Android 2 - Mark L.Murphy 2010 3. Android Deverloper Website : developer.android.com

56

You might also like