162
Tìm hiểu lập trình trên 1 SVTH: Phạm Quang Đạo – Nguyễn Mục lục Chương 1. GIỚI THIỆU ANDROID .............................................................. ...............................................5 1.1 Khái ni ệm về Androi d: ............................................................. ............................................................. .5 1.1 .1 1.1 .2 Androi d khác với các hệ điều hành chạy trên t hiết bị di động khác ........5 Đặc tính mở của Android:............................................. ...................................................... .......6 1.2 Kiến trúc của A ndroid:...................................................... ............................................................. ........6 1.2 .1 1.2 .2 1.2 .3 1.2 .4 1.2 .5 Androi d Platfor m: ...................................................... ...................................................... ................7 Tầng Li nux Ker nel: ...................................................... ...................................................... ..............7 Native Librari es: ...................................................... ...................................................... ...................7 Tầng Runtime: ...................................................... ...................................................... ........................8

Bao Cao Lap Trinh Android Final 120629103845 Phpapp02

Embed Size (px)

DESCRIPTION

bao cao

Citation preview

Mc lc

Chng 1. GII THIU ANDROID .............................................................................................................5

Tm hiu lp trnh trn Android1.1 Khi ni m v Androi d: ...........................................................................................................................5

10SVTH: Phm Quang o Nguyn Hong Nam

1.1.11.1.2

Androi d khc vi cc h iu hnh chy trn t hit b di ng khc ........5c tnh m ca Android:..........................................................................................................6

1.2 Kin trc ca A ndroid:...........................................................................................................................6

1.2.11.2.21.2.31.2.41.2.5

Androi d Platfor m: ............................................................................................................................7Tng Li nux Ker nel: ..........................................................................................................................7Native Librari es: ...............................................................................................................................7Tng Runtime: ....................................................................................................................................8Tng Application Fr amewo rk: ...............................................................................................8

Chng 2. MI TRNG LP TRNH.................................................................................................10

2.1 Gii thiu:......................................................................................................................................................102.2 Androi d SDK: ..............................................................................................................................................102.3 My o Dalvik: ...........................................................................................................................................112.4 Cc gi Java cn thit: ..........................................................................................................................112.5 Thnh phn chnh ca Eclipse khi to ng dng trn Android: ........................122.6 Thnh phn quan tr ng tro ng mt Android Proj ect: .................................................132.7 Chu k s ng ca ng dng Androi d .........................................................................................13

2.7.12.7.22.7.32.7.42.7.52.7.62.7.72.7.8

Chu k s ng t hnh phn...........................................................................................................14Activity Stack ....................................................................................................................................14Cc trng t hi ca c hu k s ng............................................................................................15Chu k s ng ca ng dng .....................................................................................................15Cc s kin tro ng chu k s ng ca ng dng ..........................................................16Thi gi an s ng ca ng dng...............................................................................................16Thi gi an hin th ca Activity............................................................................................17Cc hm thc thi ............................................................................................................................17

2.8 Cc cng c cn t hit lp tr nh tr n A ndr oid v h ng dn ci t:.......17

2.8.12.8.2

Cc cng c cn t hit lp tr nh: ...................................................................................17Cc bc ci t .............................................................................................................................17

2.9 Bt u lp trnh 1 ch ng trnh hello world u tin: ...........................................202.10 Thnh phn giao din Androi d................................................................................................23

2.10.12.10.2

View ....................................................................................................................................................23VIEWGROUP: ...............................................................................................................................23

2.11 Cc Control ..............................................................................................................................................26

2.11.12.11.22.11.32.11.42.11.52.11.62.11.7

BUTTON ...........................................................................................................................................26LISTVIEW .......................................................................................................................................27EDITTEXT .......................................................................................................................................29TEXTVIEW .....................................................................................................................................30CHECKBOX.....................................................................................................................................30MENUOPTION .............................................................................................................................31CONTEXTMENU.........................................................................................................................32

2.12 Ty bin control (custo m control ): ......................................................................................322.13 V d s dng Listview ...................................................................................................................35

Chng 4. LP TRNH TRN ANDROID ...........................................................................................38

4.1 Gii Thi u Int ent s: .................................................................................................................................38

4.1.14.1.24.1.34.1.44.1.5

Thnh phn Intents:....................................................................................................................38S dng Intents k hi ng cho Activities: ................................................................39Intent k h ng tng mi nh thc thi Activity:.............................................................40Intent tng minh thc thi Activity...............................................................................40S dng Intents gi i th ng ip r a ngo i ng dng ho c Activity:...41

4.2 Gii Thi u Adapt ers: ............................................................................................................................43

4.2.14.2.2

Mt s Adapter : .............................................................................................................................43S dng Adapter hin th d liu: ....................................................................................43

4.3 V d s dng Intent lin lc gia cc Activity:........................................................444.4 K thut lu tr d liu tro ng A ndr oid.................................................................................464.5 Lu tr d liu ng dng mt cch n gi n: .................................................................47

4.5.14.5.2

To v lu d liu vi Share Pr eferences: ................................................................47Truy xut Shared Preferences .............................................................................................47

4.6 Lu v c cc tp ti n trong Androi d: ....................................................................................49

4.6.14.6.2

Truy xut cc tp tin tr ong Reso urces: ........................................................................50Cc cng c qun l tp tin ....................................................................................................50

4.7 C s d liu tro ng Android...........................................................................................................50

4.7.14.7.24.7.34.7.4

Gii thiu SQLite: ..........................................................................................................................51Cursor s v Cont ent Values: ...................................................................................................51S dng SQLiteOpenHel per :.................................................................................................52Truy xut v to C s d liu kh ng dng SQLiteHel per : ..........................52

4.7.54.7.64.7.74.7.84.7.9

Truy vn c s d liu ..............................................................................................................52Ly kt qu t Cursors ..............................................................................................................53Thm, cp nht v xa dng:................................................................................................53Thao tc trn c s d liu A ndroid ..............................................................................54Gii thiu Cont ent Providers ...............................................................................................56

4.8 Mt ng dng Demo s dng Co ntentProvider qun l sc h: .....................594.9 Maps, Geoco ding, Location Based Services .......................................................................59

4.9.14.9.24.9.34.9.44.9.54.9.64.9.74.9.84.9.94.9.104.9.114.9.124.9.134.9.144.9.154.9.16

S dng dch v nh v ............................................................................................................59Ci t trn mi trng gi lp vi Test Provi der s ...........................................59Cp nht v tr vi Emulator Location Provi der s .................................................59Chn mt Locatio n Provider ................................................................................................60Tm mt Providers c s n.......................................................................................................60Tm kim mt Provider t heo tiu ch ............................................................................61Tm mt a ch (Fi ndi ng Yo ur Locatio n) ...................................................................61Theo di s di chuyn (Tracking Movement) ........................................................62S dng Go ecoder .........................................................................................................................63Reverse Geocodi ng ..................................................................................................................63Forward Geoco ding ................................................................................................................64Dng M apView ...........................................................................................................................65Dng M apActivity ....................................................................................................................66S dng Overlay ........................................................................................................................67Dng M apCo ntroller ..............................................................................................................68Ch khi to mt ng dng c s dng MapView ........................................69

4.10 Lm vic trn Back gro und .........................................................................................................70

4.10.14.10.24.10.34.10.44.10.54.10.64.10.74.10.8

Gii Thi u Services .................................................................................................................70To Service ....................................................................................................................................71Khi chy, iu khi n v tng t c vi Sercice ...............................................71Kt ni Activities vi Services........................................................................................72Gii thiu Thng bo tro ng Androi d .........................................................................74Gii thiu Notification Manager ...................................................................................74To th ng bo .............................................................................................................................75Kch hot th ng bo ...............................................................................................................76

4.11 S dng cc Medi a APIs ................................................................................................................76

4.11.14.11.2

Chi nhc ........................................................................................................................................77Ghi m ...............................................................................................................................................78

4.12 S dng my nh ................................................................................................................................79

4.12.14.12.24.12.3

Ci t i u k hin camera .................................................................................................80S dng my nh ......................................................................................................................80Chp nh ........................................................................................................................................81

Chng 5. TNG KT ......................................................................................................................................82

5.1 Kt qu t c:....................................................................................................................................825.2 Hng pht trin ca ti: ..........................................................................................................825.3 Ti liu tham k ho: ................................................................................................................................82

Chng 1. GII THIU ANDROID

Nh chng ta bit, hin ti c hn na nhn loi s dng my di ng thoi v giao tip qua cc mng khng dy. Con s 3 t ngi ny s cn tng ln v my di ng cng ngy cng "thng minh" vi nhiu chc nng v dch v rt hp dn, cho nn th trng my di ng thng minh s vt xa my vi tnh trong mt tng lai rt gn... V th vic lp trnh trn thit b di ng ngy cng ph bin v pht trin rt mnh m. T nn tng m ngun m, Google cho ra mt Android chy trn cc thit b di ng. Android c rt nhiu cng c v dng c min ph nghin cu v pht trin phn mm trn nn tng ca n. Ti liu ny s gip chng ta tm hiu v Android v cch vit mt ng dng trn nn tng ny.

1.1 KHI NIM V ANDROID:

Trc ht Android l nn tng phn mm da trn m ngun m Linux OS (Kernel 2.6) cho my di ng v nhng phn mm trung gian (middleware) h tr cc ng dng m ngi s dng cn n. Mt cch nh ngha khng qu chuyn mn th c th coi Android l tn mt nn tng m cho thit b di ng ca Google (gm h iu hnh, middleware v mt s ng dng c bn). Android s ng u vi mt s h iu hnh (vit tt l HDH) dnh cho thit b di dng khc ang hm nng th trng nh Windows Mobile, Symbian v d nhin l c OS X (iPhone).C th ni mt cch nm na rng Android l mt HDH chy trn thit b di ng,

cng ging nh Windows, Linux hay Mac chy trn my vi tnh vy.

1.1.1

Android khc vi cc h iu hnh chy trn thit b di ng khc

Android thu ht c s ch ca gii cng ngh khp ton cu khi

a con ca Google s dng giy php m ngun m. l mt sn phm kt tinh t tng ca Khi Lin minh thit b cm tay m do Google dn u, gm 34 thnh vin vi cc cng ty hng u v cng ngh v di ng ton cu nh Qualcomm, Intel, Motorola, Texas Instruments v LG Electronics, cc nh mng nh T-Mobile, Sprint Nextel, NTT DoCoMo v China Mobile.Cc nh pht trin c th s dng min ph b Kit Android Software

Development xy dng cc ng dng ca mnh.

1.1.2

c tnh m ca Android:

Android c xy dng cho php cc nh pht trin to ra cc ng

dng di ng hp dn, tn dng tt c tnh nng mt chic in thoi cung cp. N c xy dng c thc s m. V d, mt ng dng c th gi bt k chc nng li ca in thoi nh thc hin cuc gi, gi tin nhn vn bn, hoc bng cch s dng my nh, cho php cc nh pht trin to ra nhiu ng dng phong ph hn cho ngi dng (iu ny hin cha c trn Windows Phone7 ca Microsoft). Android c xy dng trn m ngun m Linux Kernel. Hn na, n s dng mt my o tu chnh c thit k ti u ha b nh v ti nguyn phn cng trong mt mi trng di ng.Android khng phn bit gia cc ng dng li ca in thoi v cc ng dng ca bn th ba. Tt c c th c xy dng c th truy cp bng kh nng ca mt thit b di ng cung cp cho ngi s dng vi mt di rng cc ng dng v dch v. Vi cc thit b xy dng trn Android, ngi dng c th hon ton thch ng vi in thoi n li ch ca h. Vi Android, mt nh pht trin c th xy dng mt ng dng cho php ngi dng xem v tr ca bn b ca h v c cnh bo khi h ang c trong vng ph cn cho h mt c hi kt ni.Android cung cp truy cp n mt lot cc th vin cng c hu ch v c th c s dng xy dng cc ng dng phong ph. V d, Android cho php cc thit b giao tip vi nhau to iu kin cho ng ng rich-to-peer trong ng dng x hi. Ngoi ra, Android bao gm mt tp hp y cng c c xy dng cng phu, vi vic cung cp nn tng pht trin, vi nng sut cao v ci nhn su vo cc ng dng .

1.2 KIN TRC CA ANDROID:

"Understanding Android" l cch m ta tip cn lp trnh Android v thu hiu kin trc h thng ca n. Chng ta c th khng cn hiu r cu trc ca mt HDH nhng Chng ta vn c th lp trnh mt ng dng trn HDH , y l iu m nh sn xut mun khi release SDK vi mt framework c sn ca h. Nh chng ta bit iu ny cng c mt tt v xu. Framework l mt tng cao cp dnh cho lp trnh

vin, n u c gii hn ca n, chng ta c th ch c th lp trnh nhng ng dng ph bin nhng khng nn tin ti nhng ng dng cao cp i su vo h thng ca HDH. Theo cch ca mnh, trc khi bt u hc Android, chng ta nn nghin cu qua bn thn HDH Android, chng ta khng cn phi hiu r n nh th no, mc chquan trng nht ca chng ta l c ci nhn chung v ton din nht v Android.

1.2.1

Android Platform:

Bao gm HDH Android y tnh nng, cc ng dng v cc tng

trung gian developer c th m rng, ty chnh hoc thm vo cc component ca h.C 4 tng c bn trong HDH Android: Application Framework, Android

Runtime, Native Libraries, Linux Kernel ... Mi tng lm vic u nh s gip

ca tng bn di.

1.2.2

Tng Linux Kernel:

y l nhn ca HDH Android, mi x l ca h thng u phi thng

qua tng ny. Linux Kernel cung cp cc trnh iu khin thit b phn cng (driver) nh: camera, USB, Wifi, Bluetooth, Display, Power Management ... Android da trn Linux phin bn 2.6 la chn cc tnh nng ct li nh bo mt, qun l b nh, qun l tin trnh, mng stack v cc trnh iu khin phn cng. Kernel hot ng nh mt lp tru tng gia phn cng v phn mmcn li ca h thng.

1.2.3

Native Libraries:

System C library - c ngun gc t h thng th vin chun C (libc), iu chnh cc thit b nhng trn Linux. Media Libraries - m rng t PacketVideo's OpenCORE; th vin h tr playback v recording ca nhiu nh dng video v image ph bin: MPEG4, H.264, MP3, AAC, AMR, JPG, and PNG Surface Manager - qun l vic hin th v kt hp ha 2D v 3D.

LibWebCore - Android dng li webkit engine cho vic render trnh duyt mc nh ca HDH Android browser v cho dng web nhng (nh HTML nhng) SGL - 2D engine

3D libraries - Th vin 3D da trn OpenGL ES 1.0 API, c nng c p tng

tc "hardware 3D acceleration"

FreeType - render bitmap v vector font.

SQLite - qun l database ca ng dng.

1.2.4

Tng Runtime:

Mi ng dng Android chy trn mt proccess ring ca Dalvik VM

(my o). Dalvik c vit chy nhiu my o cng mt lc mt cch hiu qu trn cng mt thit b.My o Dalvik thc thi cc file mang nh dng .dex (Dalvik Excutable), nh dng ny l nh dng c ti u ha ch chim mt vng nh va xi v nh nht c th. VM chy cc class ( c compile trc bi1trnh bin dch ngn ng Java), s d VM chy c cc class ny l nh

chng trnh DX tool convert cc class sang nh dng .dex.

1.2.5

Tng Application Framework:

y l tng m Google xy dng cho cc developer pht trin cc

ng dng ca h trn Android, ch bng cch gi cc API c sn m Google vit s dng cc tnh nng ca phn cng m khng cn hiu cu trc bn di.Bng cch cung cp mt nn tng pht trin m, Android cho cc nh pht

trin kh nng xy dng cc ng dng cc k phong ph v sng to. Nh pht trin c t do tn dng cc thit b phn cng, thng tin a im truy cp, cc dch v chy nn, thit lp h thng bo thc, thm cc thng bo cc thanh trng thi, v nhiu, nhiu hn na.Tt c cc ng dng thng gm mt b cc dch v v h thng c bn

sau:

View UI dng xy dng layout ca ng dng bao gm: list view, text field, button, dialog, form ... Content Providers cho php cc ng dng c th truy cp d liu t cc ng dng khc (nh ng dng ca ta c th ly thng tin Contacts ca in thoi Android), hoc chia s d liu ca ring ng dng. Resource Manager cung cp cch thc truy cp n non-code

resources nh cc asset, graphic, image, music, video ...

Notification Manager cho php tt c cc ng dng hin th thng bo ca mnh trn HDH. Activity Manager qun l vng i ca cc ng dng.

gc nhn ca ngi dng ta c thm tng application (l ng dng do chng ta vit), sau y l s tng qut nh hnh 1.1:

1-1 Kin trc Android

Chng 2. MI TRNG LP TRNH

2.1 GII THIU:

Trong chng ny s gii thiu cc cng c lp trnh cho Android (Android Development Tools). Chng ta s dn lm quen vi Eclipse v Android Development Tool plug-in, thng qua Android SDK v cng c ca n, chy mt ng dng Android trn Emulator(tm dch l trnh gi lp giao din ca Android trn PC). Vi nhng k nng trong tay, chng ta s tm hiu cc gi Java packages c cung cp trong SDK gip nng cao kh nng lp trnh trn Android.2-1 Mi trng lp trnh trong Android

Eclipse OpenSource IDE Coding Debugging

Command-Line toolsFile transfer toolsGSM simulation tester

Android Development Tools(plug-in) SDK Emulator profileconfiguration Emulator launch Process & file system viewing Log viewing

SDK Documentation

Android EmulatorMultiple skinsNetwork connectivity optionsIntegrated with Eclipse via Android Development Tools plug- inAndroid Development

Android DevicePhysical phone hardware

2.2 ANDROID SDK:

Android SDK, vit tt ca Android Software Development Kit, c th gi l cng c pht trin phn mm m c th y l pht trin ng dng cho Android OS. n y th chc cc chng ta cng hiu n gin Google Adroid SDK l b cng c c chnh Google xy dng v pht hnh min ph n gii Developer h d dng xy dng v pht trin cc ng dng chy c trn Android OS.Android SDK c cc c tnh sau:

c pht trin v cung cp min ph

Truy cp n phn cng Wi-Fi.

GSM, EDGE v tnh nng mng 3G cho php vic chuyn d liu, gi

in hay gi tin SMS trong mng di ng.

Gi API ton din cho cc dch v nn tng v d nh GPS.

Truy cp ton b phn cng iu khin a phng tin nh chi nhc, ghi m hay s dng microphone v camera. Chia s d liu trong kho d liu.

Tch hp trnh duyt da trn b WebKit (m ngun m).

P2P h tr s dung Google Talk.

H tr tt ha 3D nh s dng OpenGL ES.

Android SDK cn phi c ci t xy dng cc ng dng Android. Android SDK bao gm ti liu tch hp HTML_base li chnh ca Javadoc th hin cc gi v lp trong Java.

2.3 MY O DALVIK:

Mt trong nhng thnh phn quan trng ca Android l my o Dalvik. Thay v s dng my o Java nh trc kia Android s dng my o ca ring n c thit k bo m rng a ng dng c th chy mt m trn mt thit b di ng.My o Dalvik s dng li Linux x l cc chc nng mc thp bao gm bo mt, cc tin trnh, cc lung v qun l vng nh. N cng c th vit bng ng dng C/C++ chy trc tip ln li Linux bn di. Gia phn cng v cc dch v h thng c qun l bi my o Dalvik, n l mt thnh phn gia. Bng cch s dng my o ny chy ng dng, cc nh pht trin hon ton khng phi bn tm g v cc phn cng bn di. Khi my o ny chy n s to ra tp tin c ui l .dex, tp tin ny c SDK to ra bi s chuyn i t cc lp bin dch ngn ng Java .

2.4 CC GI JAVA CN THIT:

java.lang gi cha cc lp li ca Java

java.io xut nhp.

java.net kt ni mng.

java.util _ cha cc lp tin ch. Bao gm: Log thng c dng vit

LogCat.

java.text tin ch s l vn bn.

java.math cc lp ton hc.

javax.net cc lp mng.

javax.security Security-related classes.

javax.xml cc lp lin quan n DOM-based XML.

org.apache.* cc lp lin quan n HTTP-related.

org.xml cc lp lin quan n SAX-based XML . Cc gi dng cho lp trnh Android: Android.appAndroid application model access

Android.contenttruy xut d liu trong Android

Android.netbao gm Uri class dng cho vic truy xut cc ni dung khc Android.graphics ha

Android.openglcc lp OpenGL

Android.ostruy cp mc h thng n mi trng Android

Android.providerc c lp lin quan n ContentProvider

Android.telephonykh nng truy cp Telephony

Android.textText layout

Android.utiltp cc tin thao tc trn vn bn,bao gm XML

Android.vie wt hnh phn UI (giao din ngi dng)

Android.webkitBro wser functionality

Android.widgetthnh phn UI mc cao hn

Trong cc gi gn nh l li ca mi ng dng trn Android l

Android.app, Android.vie w v Android.content.

2.5 THNH PHN CHNH CA ECLIPSE KHI TO NG DNG TRN ANDROID:

Mi trng pht trin Rich Java bao gm trnh bin dch, class autocompletion, v tch hp Javadoc By li code

Qun l v chy Android Emulator profile

The Dalvik Debug Monitoring Service (DDMS)

Khung nhn cc tin trnh (Thread and heap views)

Qun l H thng tp tin giao din (Emulator filesystem management)

iu khin d liu v hi thoi (Data and voice network control)

iu khin giao din (Emulator control)

Ghi li h thng v ng dng (System and application logging)

2.6 THNH PHN QUAN TRNG TRONG M T ANDROID PROJECT:

Activity (Android.app.Activity): y l lp khi to giao din ng dng ni b trn Android tng t nh MIDlet trong J2ME. Service (Android.app.Service): cung cp cc dch v lin quan n client/service. Mt Service s chy ngm bn di, sau cc client (Activity) s kt ni v truy xut cc hm trn dch thng qua Interface class. Broadcast receiver (Android.content.BroadcastReceiver): y l mt ng dng chy ngm dng c v cp nht thng tin trn UI, v d nh cp nht s thay i gi, pin... Content Provider: cung cp chc nng truy vn d liu gia cc ng dng ca Android. Intent: nn tng truyn ti cc thng bo. Intent c s dng gi cc thng bo i nhm khi to 1 Activity hay Service thc hin cng vic m chng ta mong mun.

2.7 CHU K SNG CA NG DNG ANDROID

Mt tin trnh Linux gi gn mt ng dng Android c to ra cho ng dng khi codes cn c xy dng, khi chy v s cn chy cho n khi: N khng ph thuc.

H thng cn ly li b nh m n chim gi cho cc ng dng khc.

Mt s khc thng v c tnh c bn ca Android l thi gian sng ca tin trnh ng dng khng c iu khin trc tip bi chnh n. Thay vo , n c xc nh bi h thng qua mt kt hp ca: Nhng phn ca ng dng m h thng bit ang chy.

Nhng phn quan trng nh th no i vi ngi dng.

Bao nhiu vng nh chim lnh trong h thng.

2.7.1

Chu k sng thnh phn

Cc thnh phn ng dng c mt chu k sng, tc l mi thnh phn t

lc bt u khi to v n thi im kt thc, i lc chng c th l active

(visible hoc invisible) hoc inactive.

2.7.2

Activity Stack

Bn trong h thng cc activity c qun l nh mt activity stack. Khi

mt Activity mi c start, n c t nh ca stack v tr thnh activity ang chy activity trc s bn di activity mi v s khng thy trong sut qu trnh activity mi tn ti.Nu ngi dng nhn nt Back th activity kt tip ca stack s di duyn ln v tr thnh active.

Hinh 2-2 Activity stack

2.7.3

Cc trng thi ca chu k sng

Hinh 2-3 Chu k sng ca Activity

Mt Activity ch yu c 4 chu k chnh sau:

Active hoc running: Khi Active l c chy trn mn hnh. Activity ny tp trung vo nhng thao tc ca ngi dng trn ng dng. Paused: Activity l c tm dng (paused) khi mt focus nhng ngi dng vn trng thy. C ngha l mt Activity mi trn n nhng khng bao ph y mn hnh. Mt Activity tm dng l cn sng nhng c th b kt thc bi h thng trong trng hp thiu vng nh. Stopped: Nu n hon ton bao ph bi Activity khc. N vn cn trng thi v thng tin thnh vin trong n. Ngi dng khng thy n v thng b loi b trong trng hp h thng cn vng nh cho tc v khc. Killed: Khi h thng b thiu b nh, n s gii phng cc tin trnh theo

nguyn tc u tin. Cc Activity trng thi stop hoc paused cng c th bgii phng v khi n c hin th li th cc Activity ny phi khi ng li hon ton v phc hi li trng thi trc .

2.7.4

Chu k sng ca ng dng

Trong mt ng dng Android c cha nhiu thnh phn v mi thnh

phn u c mt chu trnh sng ring. V ng dng ch c gi l kt thc khi

tt c cc thnh phn trong ng dng kt thc. Activity l mt thnh phn cho php ngi dng giao tip vi ng dng. Tuy nhin, khi tt c cc Activity kt thc v ngi dng khng cn giao tip c vi ng dng na nhng khng c ngha l ng dng kt thc. Bi v ngoi Activity l thnh phn c kh nng tng tc ngi dng th cn c cc thnh phn khng c kh nng tng tc vi ngi dng nh l Service, Broadcast receiver. C ngha l nhng thnh phn khng tng tc ngi dng c th chy background di s gim st cah iu hnh cho n khi ngi dng t tt chng.

2.7.5

Cc s kin trong chu k sng ca ng dng

Nu mt Activity c tm dng hoc dng hn, h thng c th b

thng tin khc ca n t vng nh bi vic gi hm finish() ca n, hoc n gin git tin trnh ca n. Khi n c hin th ln na vi ngi dng, n phi c hon ton restart v phc hi li trng thi trc. Khi mt Activity chuyn qua chuyn li gia cc trng thi, n phi bo vic chuyn ca n bng vic gi hm transition.

Hinh 2-4

Tt c cc phng thc l nhng mc ni m chng ta c th override lm tng thich cng vic trong ng dng khi thay i trng thi. Tt c cc Activity bt buc phi c onCreate() khi to ng dng. Nhiu Activity s cng hin thc onPause() xc nhn vic thay i d liu v mt khc chunb dng hot ng vi ngi dng.

2.7.6

Thi gian sng ca ng dng

By phng thc chuyn tip nh ngha trong chu k sng ca mt

Activity. Thi gian sng ca mt Activity din ra gia ln u tin gi

onCreate() n trng thi cui cng gi onDestroy(). Mt Activity khi to

ton b trng thi ton cc trong onCreate(), v gii phng cc ti nguyn ang

tn ti trong onDestroy().

2.7.7

Thi gian hin th ca Activity

Visible lifetime ca mt activity din ra gia ln gi mt onStart() cho

n khi gi onStop(). Trong sut khong thi gian ny ngi dng c th thy activity trn mn hnh, c ngha l n khng b foreground hoc ang tng tc vi ngi dng. Gia 2 phng thc ngi dng c th duy tr ti nguyn hin th activity n ngi dng.

2.7.8

Cc hm thc thi

OnCreate(...): hm ny c gi khi lp Activity c khi to, dng

thit lp giao din ng dng v thc thi nhng thao tc c bn.

onStart(): hm ny c gi khi lp ng dng xut hin trn mn hnh.

onResume(): hm c gi ngay sau OnStart hoc khi ngi dng focus

ng dng, hm ny s a ng dng ln top mn hnh.

onPause(): hm c gi khi h thng ang focus n 1 activity trc .

onStop(): hm c gi khi mt activity khc c khi ng v focus.

onRestart(): c gi khi ng dng chuyn sang onStop(), nhng mun khi

ng li bng onStart().

2.8 CC CNG C CN THIT LP TRNH TRN ANDROID V NG DN

CI T:

2.8.1

Cc cng c cn thit lp trnh:

H iu hnh: Window XP, Win7

Cng c lp trnh: Eclipse version 3.6 hoc cao hn

B cng c Android SDK

2.8.2

Cc bc ci t:

Chng ta c 3 bc chnh: Ci t Eclipse IDE, Plugin Android cho Eclipse v cui cng l ci t Emulator (Android SDK). V c chia thnh cc bc nh sau:

Bc 1: Vo a ch http://www.eclipse.org/downloads/ download phn mn lp trnh eclipse. Chn phn Eclipse IDE cho cc nh pht trin JAVA.Sau khi download eclipse chng ta gii nn ra s dng. Sau khi gii nn xong cho chy chng trnh.Khi chy, chng trnh mun lu th mc lm vic, chng ta chn th

mc ty v nhn OK.

Bc 2: truy cp www.oracle.com/technetwork/java/javase/downloads/index.html downloads JAVA SE . Chn downloads JAVA SE > vo th mc cha JAVA SE v tin hnh ci t. Bc 3: Truy cp developer.Android.com/sdk/index.html . V tin hnh download chn phn Android-sdk_r10-windo ws.zip .Sau khi downloads vo th mc cha phn download gii nn v chn

SDK Manager.exe chy chng trnh t ng update.

Vo chng trnh eclipse chn menu Help -> Install New Software

Name: Google Android ( ty )

Location : http//:dl-ssl-google.com/Android/eclipse

Sau chn OK.

Hnh 2-5

Chn Sellect All , chn vo cc nh hnh 2.7

Hnh 2-6

Sau chng trnh t ng cp nht nhng bn cn ci t.

Tip theo bn chn nhng phn cn thit ci t hoc chn tt c -> Next -> chn I accept the terms of the license agreements ->finsh.Lu khi ci: windows mun chng thc, bc ny chn OK.

Sau khi ci xong chn Restsart Now.

Bc 4: Khi chng trnh ci t phn Android SDK hon tt v khi ng li chng trnh, vo Window ->Prefeneces ch ng dn ca file SDK.

Hnh 2-7

bc ny chn ng dn ti th mc cha Android SDK. Sau chn

Apply.

Bc 5: cc bc trn cu hnh Android SDK trong eclipse , bc tip theo s i cu hnh to ra 1 my o cha h iu hnh Android. Vo Window -> Android SDK and AVD Manager.

Ca s Android SDK and AVD Manager hin ra , chng trnh ang t ng cp nht. Sau chn Virtual Decvices -> New.Name ( Tn my o) : AndroidMobile2.2

Size (kch thc b nh ): 512 MB Chn Create AVD

Hnh 2-8

to thnh cng my o , tip theo chn Start..-> Launch khi ng my o.

Hnh 2-9

2.9 BT U LP TRNH 1 C NG TRN ELLO WORLD U TIN:

Lu y ti dng Emulator bng 2.2. M Eclipse

Chn File > New > ProjectChn Android Project v t tn nh hnh bn di nh: Dng Project Name: HelloAndroidDng Application Name: HelloAndroid Package name: com.HelloAndroid Activity name: HelloAndroid_Activity Min SDK version : 8

2-10

Th l chng ta c 1 ng dng nh ri .Sau khi ng Android Emulator bng cch vo menu Window > Android SDKand ADV manager > chn thit b to phn trn v click Start>Launch.

Hnh 2.13Vy l ta c 1 chic in thoi Mobile Android chy ngay trn my tnh ri . By gi chng ta quay v mn hnh Eclipse v Click vo Run> chn Android Application > OK

Chng ta c c ng dng cho hnh sau:

2-11

By gi chng ta s tm hiu su hn v ng dng ny. Quay li mn hnh Eclipse ln

lt vo cc mc : Src>HelloAndroid_Activity.j ava Res> layout>main.xml Res>values>string.xmly chnh l 3 file quan trng trong mt ng dng Android

By gi chng ta vo file String.xml thay dng

Hello World, HelloAndroid_Activity!

Bng dng Xin cho Android!

V run chng ta s to ra 1 ng dng c giao din thun Vit ng ngha.

2-12

2.10 THNH PHN GIAO DIN ANDROID

2.10.1 View

View

GroupView Control

Layout

Widget (compound control)

Control

2-13

Control

Control

Trong Android giao din ngi dng c xy dng t cc i tng View. Trong Android Platform, cc screen lun c b tr theo mt kiu cu trc phn cp nh hnh trn. Mt screen l mt tp hp cc Layout v cc widget c b tr c th t. th hin mt screen th trong hm onCreate ca mi Activity cn phi c gi mt hm l setContentView (R.layout.main); hm ny s load giao din t fileMAIN.XML ln phn tch thnh m bytecode.

2.10.2 VIEWGROUP:

ViewGroup l s m rng ca class View hay ni cch khc ViewGroup chnh l cc WidgetLayout c dng b tr cc i tng khc trong mt screen.C cc loi ViewGroup nh sau:

Linear Layout

LinearLayout c dng b tr cc thnh phn giao din theo chiu ngang hoc chiu dc nhng trn mt line duy nht m khng c xung dng.

Frame layout

FrameLayout c dng b tr cc i tng theo kiu ging nh lcc Layer trong Photoshop. Nhng i tng no thuc Layer bn di th s b che khut bi cc i tng thuc Layer nm trn. FrameLayer thng c s dng khi mun to ra cc i tng c khung hnh bn ngoi chng hn nh contact image button.

Table layout

Layout ny c s dng khi cn thit k mt table cha d liu hoc cn b tr cc widget theo cc row v column. Chng hn nh, giao din ca mt chic my tnh n gin hoc mt danh sch d liu.

AbsoluteLayout

Layout ny c s dng b tr cc widget vo mt v tr bt k trong layout da vo 2 thuc tnh to x, y. Tuy nhin, kiu layout ny rt t khi c dng bi v to ca cc i tng lun c nh v s khng t iu chnh c t l khong cch gia cc i tng. Khi chuyn ng dng sang mt mn hnh c kch thc vi mn hnh thit k ban u th v tr ca cc i tng s khng cn c chnh xc nh ban u.Dng cu lnh gi Layout ny. Mun nh v mt i tng, phi nh v hai gi tr Android:layout_x="" v Android:layout_y= "".

V d: Th to ra nhng button v cho nhng button ny nm nhng v tr khc nhau:Cc button ny nm nhng v tr khc nhau vi cc ch s o lng khc nhau.

Hnh 3.4

RELATIVE LAYOUT

Layout ny cho php b tr cc widget theo mt trc i xng ngang hoc dc. t c ng v tr th cc widget cn c xc nh mt mi rng buc no vi cc widget khc. Cc rng buc ny l cc rng buc tri, phi, trn, di so vi mt widget hoc so vi layout parent. Da vo nhng mi rng buc m RetaliveLayout cng khng ph thuc vo kch thc ca screen thit b. Ngoi ra, n cn c u im l gip tit kim layout s dng nhm mc ch gim lng ti nguyn s dng khi load ng thi y nhanh qu trnh x l.

2-14 B tr widget trong RetaliveLayout

Cc i tng trong Layout ny phi c id to mi quan h gia cc i tng. Android:layout_alignParentRight="true" cu lnh ny gip i tng sau khng nm ln i tng trc .

Android:layout_marginLeft="" cho bit i tng nm cch l phi v tri bao nhiu. i tng sau mun to mi quan h vi i tng trc, v mun cho hai i tng nm v tr no th s dng cu lnh:

2.11 CC CONTROL

2.11.1 BUTTON

S d widget button c gii thiu u tin trong s cc widget khc l v y l i tng c th ni l c dng nhiu nht trong hu ht cc ng dng Android. thit k giao din vi mt button ta c 2 cch nh sau:

y l cch lm ra mt button n gin. on m trn sau khi chy:

2-15

Thc ra nu khng phi i hi phi custom li mt widget th khng cn phi s dng ti code. Trong mt s trng hp bt buc chng ta phi custom cc widget cho ph hp vi hon cnh. Chng hn nh trong game, cc menu hay cc nt iu khin, khai bo mt Button trong code ta lm nh sau:void s howButton(){s etContentView(R.layout.button);Button next = (Button) findViewById(R.id.btnButton);next.s etOnClickLis tener(ne w View.OnClickLis tener() {public void onClick(Vie w view) {Toas t.mak eText(getApplicationContext(), "Bn va click vo Button" , Toas t.LENGTH_SHORT).s how();}

});}

nh 2-16

2.11.2

LISTVIEW

c s dng th hin mt danh sch cc thng tin theo tng cell.Mi cell thng thng c load ln t mt file XML c c nh trn s lng thng tin v loi thng tin cn c th hin.

th hin c mt list thng tin ln mt screen th cn phi c 3 yu t

chnh:

Data Source: Data Source c th l mt ArrayList, HashMap hoc bt k mt cu trc d liu kiu danh sch no.

Adapter: Adapter l mt class trung gian gip nh x d liu trong Data Source vo ng v tr hin th trong ListView. Chng hn, trong Data Source c mt trng name v trong ListView cng c mt TextView th hin trng name ny. Tuy nhin, ListView s khng th hin th d liu trong Data Source ln c nu nh Adapter khng gn d liu vo cho i tng hin th.

Li stVi ew: ListView l i tng hin th cc thng tin trong Data Source ra mt cch trc quan v ngi dng c th thao tc trc tip trn .

2-17

gi i tng ListView trong xml. Mi ListView phi c ID gi trong Activity.

to cc i tng trong file Activity th phi khai bo:

public class TestActivity extends Activity {

private ListView lv1;

private String lv_arr[] =

{"Android ","iP hone","BlackBerry", "AndroidPeople"};

@Override

public void onCreate(Bundle icicle)

{

super.onCreate(icicle); setContentView(R.layout.main ); lv1=(ListView)findViewById(R.id.ListView01);// By using setAdpater method in listview we an add string

array in list.

lv1.setAdapter(new

ArrayAdapter(this,Android.R.layout.simple_list_item_

1 , lv_arr));

}V d: To ra mt ListView gm cc thnh phn Android, iPhone, BlackBerry, AndroidPeople:

2.11.3 EDITTEXT

2-18

Trong Android i tng EditText c s dng nh mt TextField hoc mt TextBox. Gi tr Android:singleLine bng false, edittext s l 1Texbox, ngc li n l 1 Textfield.

2.11.4 TEXTVIEW

2-19

TextView c tc dng l hin th vn bn.

Trong on m trn, Android:text="" dng ghi on text mun th hin, Android:textColor="" nh dng mu ch, Android:textSize="" kch c ch, Android:gravity="" dng canh chnh cho on text. Nu mun tm hiu thm, hy g Android: sau nhn Crtl+ Space tm hiu thm v cc thuctnh ca n.

2.11.5 CHECKBOX

Nhn hai gi tr true hoc false. i tng CheckBox cho php chn nhiu item cng mt lc.XML:

Kt qu nh sau:

2.11.6

MENUOPTION

2-20

C 2 cch to mt MenuOptions:To bng code v tp tin XML, di y chng ta dng XML

h 2-21

Khai bo bng code XML:

//tip tc cho cc menu khc

2.11.7 CONTEXTMENU

ContextMenu c s dng hin th cc tu chn khi ngi dng nhn di vo mt Button trn mn hnh. to mt ContextMenu ta cng c 2 cch ging nh to MenuOptions trn ch khc tn phng thc.Phng thc: onCreateContextMenu( ContextMenu menu, View v, ContextMenuInfo menuInfo)s c gi v truyn vo 3 tham s l:

ContextMenu: i tng add cc context menu item View: i tng ni m xy ra s kin ContextMenuInfo: Cho bit v tr xy ra s kin trong ListView.

2-22

2.12 TY B IN CONTROL (CUSTOM CONTROL):

Chng ta bit Android cung cp cho chng ta rt nhiu Control hu ch.Tuy nhin ng dng ca chng ta i khi cng cn nhng control do chnh chng ta to ra p ng cc nhu cu ca ng dng m vic s dng cc control c sn rt kh khn. y chng ta s to ra mt ListView, vi mu nn v mu ch bt mt.

Bc 1: To mt Class c tn CustomListView nh sau:

public class CustomListView extends TextView {//cac cong cu ve CustomListView private Paint marginPaint; private Paint linePaint;private int paperColor;private float margin;public CustomListView(Context c, AttributeSet a, int ds) {super(c, a, ds);init();}public CustomListView(Context c) {super(c);init();}public CustomListView(Context c, AttributeSet a) {super(c, a);init();}private void init() {

}@Overrideprotected void onDraw(Canvas c) {//s dng lp cha TextView v textsuper.onDraw(c);}}

Bc 2: to file colors.xml trong res/values. To ra mu cho paper, margin, line, text.

#AAFFFF99#FF0000FF#09FF0000#AA0000FF

Bc 3: to file dimens.xml trong res/values to gi tr margin cho paper.

30px

Bc 4: vi nhng gi tr to ta tip tc vit code cho hm init() khaibo trong file CustomListView.java:

private void init() {Resources myResources = getResources();// tao choi ve, chung ta se su dung trong onDrawmarginPaint = new Paint(Paint.ANTI_ALIAS_FLAG);

marginPaint.setColor(myResources.getColor(R.color.notepad_margin));linePaint = new Paint(Paint.ANTI_ALIAS_FLAG);// lay background paper va margin widthpaperColor =myResources.getColor(R.color.notepad_paper);margin =myResources.getDimension(R.dimen.notepad_margin);}

Bc 5: Tip tc vit thm code cho hm onDraw()

@Overrideprotected void onDraw(Canvas c) {// ve mau cho paper c.drawColor(paperColor);

//c.drawLine(startX, startY, stopX, stopY, paint) c.drawLine(0, 0, getMeasuredHeight(), 0, linePaint); c.drawLine(0, getMeasuredHeight(),getMeasuredWidth(),

// ve margin

getMeasuredHeight(), linePaint);c.drawLine(margin, 0, margin, getMeasuredHeight(),marginPaint);// di chuyen text khoang margin vua tao c.save();c.translate(margin, 0);// su dung text view de render textsuper.onDraw(c);c.restore();}

Bc 6: to mt file customlistview.xml trong res/layout:

2.13 V D S DNG LISTVIEW

Bc 1: Khai bo trong file strings.xml v main.xml nh sau:

Hello World, Main!V d v ListViewThm

V trong main.xml, chng ta khai bo mt TextView, mt Button, mt Listview c tn ln lt nh sau: txtItem, btnAdd, listItems. Bc 2: Vit trong activity Main.java, s dng custom listview va to trn.

ArrayList arr = new ArrayList();ArrayAdapter aa;String flower[]={"Hoa Lan","Hoa Hu","Hoa Hng"};String animal[]={"Voi","S t","H"};String currentMenu;@Overridepublic void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);btnAdd = (Button) findViewById(R.id.btnAdd); txtItem = (EditText) findViewById(R.id.txtItem); listItems = (ListView) findViewById(R.id.listItems); txtItem.setOnKeyListener(this); btnAdd.setOnClickListener( this);arr = new ArrayList();//doan code su dung customlistview aa = newArrayAdapter(this,R.layout.customlistview,arr);listItems.setAdapter(aa);}

Bc 3: to mt menu bng on code sau, trc khi to mt menu lm theo hnh sau:

2-23

public boolean onCreateOptionsMenu(Menu menu)

{super.onCreateOptionsMenu(menu); MenuItem item;item = menu.add("Xa"); item.setIcon(R.drawable.delete); item = menu.add("ng vt"); item.setIcon(R.drawable.animal); item = menu.add("Hoa"); item.setIcon(R.drawable.flower); return true;}public boolean onOptionsItemSelected(MenuItem item){super.onOptionsItemSelected(item);if (item.hasSubMenu()==false) {if (item.getTitle().toString() == "ng vt") { currentMenu = "Animal"; this.displayPopup("Chn con vt no?",this.animal);

this.flower);

}if (item.getTitle().toString() == "Hoa") { currentMenu = "Flower"; this.displayPopup("Chn hoa no?",}if (item.getTitle().toString() == "Xa") {int index =listItems.getSelectedItemPosition();this.deleteItem(index);}}return true;}

Bc 4: vit thm cc hm x l s kin:

public boolean onKey(View v, int keyCode, KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_DOWN &&keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { addItem(txtItem.getText().toString()); return true;}return false;}@Overridepublic void onClick(View v) {if (v == btnAdd) {addItem(txtItem.getText().toString());}}@Overridepublic void onClick(DialogInterface dialog, int i) {if (currentMenu=="Animal") {this.addItem(animal[i]);}if (currentMenu=="Flower") {this.addItem(flower[i]);}}

Bc 5: v cui cng chng ta s thm cc hm

private void deleteItem(int index){if (index>=0) {String itemName = (String)listItems.getItemAtPosition(index);

arr.remove(index);aa.notifyDataSetChanged();//hin cu thng bo m khi xa 1 itemToast.makeText(getApplicationContext(), itemName + " c xa", Toast.LENGTH_SHORT).show();

}}private void displayPopup(String title, String [] item){Builder builder = new AlertDialog.Builder(this);builder.setTitle(title);builder.setItems(item, this);builder.show();}public void addItem(String item){if (item.length()>0) {

arr.add(item); aa.notifyDataSetChanged(); txtItem.setText("");//hin cu thng bo m khi thm 1 item voToast.makeText(getApplicationContext(), item + " thm", Toast.LENGTH_SHORT).show();}}

Bc 6: Chy chng trnh v kt qu nh sau:

2-24

Chng 4. LP TRNH TRN ANDROID

4.1 GII THIU INTENTS:

Intent l cu ni gia cc Activity (ng dng Android thng bao gm nhiu Activity, mi Activity hot ng c lp vi nhau v thc hin nhng cng vic khc nhau). Intent chnh l ngi a th, gip chng ta triu gi cng nh truyn cc dliu cn thit thc hin mt Activity t mt Activity khc.

4.1.1

Thnh phn Intents:

4-1

Thc ra Intent l mt cu trc d liu c m t trong Android.content.Inte nt.

Cc Action nh ngha sn:

4-2

T nh ngha action:

4-3

V nguyn tc chng ta c th t tn action ca mt intent l bt c th g theo chun t tn thng thng, hay thm ch dng lun hng action nh ngha sn nh ACTION_VIEW (hay Android.intent.action.VIEW). Ci tn VIEW thc cht ch l mt tn gi t, chng ta c th dng n vi mc ch thc hin mt activity gi mail! Tuy nhin iu r rng l rt ng ngn. Thay vo ta hy dng ACTION_SEND hay ACTION_SENDTO.Vic t tn action cho intent ng tn gi t cn c mt ngha khc l app ca chng ta c th c triu gi t mt app khc. V d chng ta vit mt app c activity p ng intent ACTION_SEND v chia s mt bc nh ln trang web ca chng ta (ging nh ta lm vi Facebook, Flickr etc.) Khi c th app cachng ta s l mt la chn chia s nh ca ngi dng in thoi.

4.1.2

S dng Intents khi ng cho Activities:

Ph bin nht trong Intents l vic lin kt d liu gia cc thnh phn

ng dng, Intents c dng bt u, dng li v chuyn tip gia cc

Activities trong ng dng.

m mt ng dng khc trong mt ng dng c sn th chng ta gi startActivity nh sau: startActivity(myInte nt); theo di thng tin phn hi t phng thc m ta s dng phng

thc : startActivityForResult(Intent)

4.1.3

4-4

Intent khng tng minh thc thi Activity:

Trong trng hp ny intent khng ch nh mt lp c th m thay vo

dng cc d liu khc (action, data, type, etc.) v h thng t quyt nh xem lp no (app no) s thch hp p ng intent .Thng tin action v category ca activity trong mt app p ng intent

phi c khai bo trong Manifest ca app (AndroidManifest.xml) di dng Intent-filter (tt nhin nu chng ta mun gi mt built-in action th ta khng cn quan tm n vn ny).V d: chng ta mun cho php ngi dng thc hin cuc gi t mt

ng dng, hn l thc hin quay s mi, chng ta c th s dng mt nh ngm yu cu hnh ng ("quay s") c thc hin trn mt in thoi nh trong on m di y:if (somethingWeird && itDontLookGood){Intent intent =newIntent(Intent.ACTION_DIAL,Uri.parse(tel:555 -2368));startActivity(intent);}

4.1.4

Intent tng minh thc thi Activity

Nh trnh by phn trn, intent c th dng thuc tnh ph

component ch nh ch danh tn lp s thc thi Activity. thc hin iu ny, lp Intent cung cp cc hm l setComponent(ComponentName) v setClass(Context, Class) v setClassName(Context, String) setClassName(String, String).Ch c dng gi cc Activities trong cng mt app

Intent intent = new Intent();intent.setClassName("ten_package", "ten_lop_ben_trong_package");startActivity(intent);

4.1.5

S dng Intents gi i thng ip ra ngoi ng dng hoc Activity:

L mt c ch truyn tin cp h thng, c kh nng gi tin n mt tin

trnh. Chng ta c th s dng Broadcast Receivers nhn, tr li hoc

pht i cc d liu m chng ta mun.

Broadcast Intent dng thng bo cho cc ng dng khc cc s kin ca h thng hay ng dng, m ra cc m hnh lp trnh hng s kin gia cc ng dng. Broadcast Intent gip cho ng dng ca chng ta ci m hn bi v n pht i mt s kin bng cch s dng Intent.

4.1.5.1 Cch thc hin gi d liu dng Intent trong Activity:

Broadcast Intent thc t kh n gin, trong cc thnh phn ng dng ca chng ta, chng ta xy dng mt Intent m chng ta mun qung b bng cch s dng sentBroadcast gi i.V d :Intent intent = new Intent(NEW_LIFEFORM_DETECTED);intent.putExtra(lifeformName, lifeformType); intent.putExtra(longitude, currentLongitude); intent.putExtra(latitude, currentLatitude); sendBroadcast(intent);

4.1.5.2 Nhn d liu vi Broadcast Receiver:

BroadcastReceivers c dng nhn d liu t Broadcast Intents, kch hot BroadcastReceivers th n cn phi c ng k hoc khai trong code hoc trong Mainifest v chng ta cn phi s dng Intents Filter xc nh Intent c php gi d liu n.V d: khi to mi mt BroadcastReceivers . import Android.content.BroadcastReceiver; import Android.content.Context;import Android.content.Intent;public class MyBroadcastReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {//TODO: React to the Intent received.

}}

Thng thng th BroadcastReceivers s cp nht ni dung, khi ng dch v , cp nht ngi dng cui, hoc thng bo ngi s dng bng cch s dng qun l Notification Manager.V d oan code sau y cho thy cch ng k

BroadcastReceivers trong code hoc trong Mainifest.

public class LifeformDetectedBroadcastReceiver extendsBroadcastReceiver {public static final String BURN=com.paad. alien.action.BURN_IT_WITH_FIRE;@Overridepublic void onReceive(Context context, Intent intent) {// Get the lifeform details from the inten t. Uri data = intent.getData();String type = intent.getStringExtra(type);double lat = intent.getDoubleExtra(latitude, 0);double lng = intent.getDoubleExtra(longitude, 0); Location loc = new Location(gps); loc.setLatitude(lat);loc.setLongitude(lng);if (type.equals(alien)) {Intent startIntent = new Intent(BURN, data); startIntent.putExtra(latitude, lat); startIntent.putExtra(longitude, lng); context.startActivity(startIntent);}}} g k Broadcast Recei vers trong fi l e Mani fest:

g k Broadcast Recei vers s dng code:// to v ng k broadcast receiver. IntentFilter filter = new

IntentFilter(NEW_LIFEFORM_DETECTED); LifeformDetectedBroadcastReceiver r = new

LifeformDetectedBroadcastReceiver();registerReceiver(r, filter);

4.2 GII THIU ADAPTERS:

Adapter l cu ni lin kt d liu vi giao din ngi dng..

4.2.1

Mt s Adapter :

s dng c Adapter ta phi k tha lp tru tng AdapterView,

v chng ta cng c th to ra mt Adapter ty bng cch ny.

ArrayAdapter: l mt lp chung gn cc Adapter Views vo mt mng i tng, theo mc nh th ArrayAdapter lin kt c gi tr toString ca tng i tng ra TextView trong layout, chng ta c th thay th TextView bng cc iu khin khc phc tp hn bng cch s dng k thut Overriding phng thc getView()SimpleCursorAdapter : dng lin kt cc View vi con tr tr v cu truy vn cho Content Provider, n c nh ngha trong file XML layout v lin kt cc gi tr rng buc bn trong mi ct kt qu vi View tronglayout.

4.2.2

S dng Adapter hin th d liu:

p dng mt Adapter n mt class AdapterView ta ch cn gi

phng thc setAdapter ca View a vo trong tp Adapter c minh ha

trong on code sau:

ArrayList myStringArray = new ArrayList(); ArrayAdapter myAdapterInstance;int layoutID = Android.R.layout.simple_list_item_1;myAdapterInstance = new ArrayAdapter(this, layotID,myStringArray);myListView.setAdapter(myAdapterInstance);SimpleCursorAdapter cho php chng ta load d liu t Cursor n List View. SimpleCursorAdapter c to ra bng cch truyn vo cc tham s bi cnh(context) hin hnh, mt layout, mt Cursor v hai gi tr: tn cc ct v mt mng cc gi tr cha d liu ct hin th:String uriString = content://contacts/people/;Cursor myCursor = managedQuery(Uri.parse(uriString), null, null, null, null); String[] fromColumns = new String[] {People.NUMBER, People.NAME};int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView}; SimpleCursorAdapter myAdapter;myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,myCursor, fromColumns,

myListView.setAdapter(myAdapter) ;

toLayoutIDs);

4.3 V D S DNG INTENT LIN LC GIA CC ACTIVITY:

Chng ta c 2 lp Activity: Activity1 v Activity2 . Thit lp 2 layout cho 2Activities trn ng vi mi lp trn s c layout tun t sau: activity1.xml, activity2.xml.

Tip theo ng k trong Manifest:

4-5

Trong Activity1.java: x l 2 s kin, nhn v gi tr c gi t Activity2, gi v truyn gi tr vo Activity2.

- Hm x l khi click Button:

//x l button c nhn@Overridepublic void onClick(View v) {

// To intent mi v t action = "Calculate" Intent intent = ne w Intent(); intent.setAction("Calculator");

}

- Hm nhn gi tr:

//t st activity(c ngha l kt thc n ri y)//finish();

//x l kt qu tr v t Activity Result@Overrideprote cted void onActivityResult(int requestCode, int resultCode, Intent data) {//ng pass khngif(requestCode != INTENT_REQUEST_CODE) {txtNum1.setText(""); txtNum2.setText(""); re turn;}//nu ng l intent t Activity Resulte ls e if(resultCode == RESULT_OK){//Ly kt qu c tr vString strNum1 = data.getStringExtra("sA"); String strNum2 = data.getStringExtra("sB");//Thit lp gi tr mi cho 2 Editbox txtNum1.setText(strNum1); txtNum2.setText(strNum2);}e ls e if(resultCode == RESULT_CANCELED){txtNum1.setText("0");txtNum2.setText("0");}}

Trong Activity2: x l 2 s kin, nhn v gi tr c gi t Activity1, gi v truyn gi tr vo Activity1.

- Hm x l khi click Button:

@Overridepublic void onClick(View v) {Intent returnResult = ne w Intent("Calculator");// Ly d liu sau khi tnh tonString strMul = txtMul.getText().toString(); String strSum = txtSum.getText().toString();// ?a d liu vo Extras ca intent returnResult.putExtra("sA", strSum); returnResult.putExtra("sB", strMul);// Kim tra d liu, nu rng th gi m CANCEL// ,nu khng gi m OK v intent cha kt quif(strSum.equals("") || strMul.equals(""))setResult(RESULT_CANCELED,returnResult);e ls esetResult(RESULT_OK,returnResult);// Thng bo kt thc Activity finish();}- Hm nhn gi tr: trong onCreate()// Ly d liu gi t Activity 1 qua intentString strA = getIntent().getStringExtra("A");String strB = getIntent().getStringExtra("B");// Tnh ton vi d liuint A = Integer.parseInt(strA);

int B = Integer.parseInt(strB);int sum = A+B; strA = Integer.toString(sum);int mul = A*B; strB = Integer.toString(mul);// lu kt qu ra mn hnh txtSum.setText(strA); txtMul.setText(strB);//x l nt ResetbtnReset.setOnClickListener(ne w View.OnClickListener() {@Overridepublic void onClick(View v) {Intent returnCancel = ne w Intent("Calculator");setResult(RESULT_CANCELED,returnCancel);finish();

}});

Chy chng trnh ta c:

4-6 Kt qu Demo Intents

.

4.4 K THUT LU TR D LIU TRONG ANDROIDCc k thut duy tr d liu trong Android nhanh chng, gn nh, hiu qu v mnh m:

Shared Preferences: Khi mun lu tr UI state ,user preferences hay application setting, chng ta mun c mt c ch gn nh lu tr mt tp hp cc gi tr c bit n, Shared Preferences cho php chng ta lu tr nhm ca key/value ca d liu gc. Fi l es: Android cho php to v ti cc tp tin trn thit b di ng.

SQLi te Databases: qun l cu trc d liu l cch tt nht . Android cung cp th vin quan h c s d liu SQLite, mi ng dng c th to ra mt c s d liu ca mnh n kim sot hon ton trn . Content Provi ders: Thay v theo c ch lu tr ring ,Content Providers cung cp ni dung cho php a ra mt giao din s dng v chia s

d liu c nhn. Chng ta c th truy cp Content Providers s dng h thng c php.

4.5 LU TR D LIU NG DNG M T CC N GIN:C hai c ch lu d liu trong Android l lu theo kiu name/value hoc key/value.

4.5.1

To v lu d liu vi Share Preferences:

to hoc sa i d liu dng Shared Preferences chng ta gi hm

getSharedPreferences trong ng dng Context,a vo tn Shared Preferences mun thay i, Shared Preferences s chia s gia cc thnh phn d liu trong ng dng hin s dng n nhng khng c sn trong ng dng khc. sa i Shared Preferences Chng ta gi lp Shared Preferences.Editor, nhn i tng Editor bng cch gi edit trong i tng ShardePreferences mun thay i. sa, lu gi commit trn Editor,nh don code sau:public static final String MYPREFS = mySharedPreferences;protected void savePreferences(){// to i tng lu tr v truy xut d liu shared preferenceint mode = Activity.MODE_PRIVATE;SharedPreferences mySharedPreferences = getSharedPreferences(MYPREFS, mode);// nhn v mt editor sa i shared preferences.SharedPreferences.Editor editor = mySharedPreferences.edit();// lu tr vo . shared preference editor.putBoolean(isTrue, true); editor.putFloat(lastFloat, 1f); editor.putInt(wholeNumber, 2); editor.putLong(aNumber, 3l); editor.putString(textEntryValue, Not Empty);// Commit the changes. editor.commit();}

4.5.2

Truy xut Shared Preferences

lu truy cp Shared Preferences th cng dng phng thc

getSharedPreferences ,a vo tn c a Shared Preferences m Chng ta mun truy cp, dng phng thc type-safe get trch xut cc gi tr lu.

V D:

public void loadPreferences() {// ly v i tng Shared Preferences int mode = Activity.MODE_PRIVATE; SharedPreferences mySharedPreferences = getSharedPreferences(MYPREFS,mode);// nhn gi trboolean isTrue = mySharedPreferences.getBoolean(isTrue, false);float lastFloat = mySharedPreferences.getFloat(lastFloat, 0f);int wholeNumber = mySharedPreferences.getInt(wholeNumber, 1); long aNumber = mySharedPreferences.getLong(aNumber, 0); String stringPreference;stringPreference = mySharedPreferences.getString(textEntryValue,);}

4.5.2.1 Lu tr trng thi Activity

Nu mun lu thng tin Activity m khng cn phi chia s vi cc thnh phn khc , Chng ta c th gi Activity.getPreferences(); m khng c n phi ch nh preferences name. Vic truy xut ti SharedPreferences b gii hn trong phm vi mt Activity, mi Actitvity ch h tr mt SharedPreferences khng c t tn.V d dng Activity Shared Preferences:protected void saveActivityPreferences(){// to i tng lu tr v truy xut d liu shared preference SharedPreferences activityPreferences = getPreferences(Activity.MODE_PRIVATE);// Retrieve an editor to modify the shared preferences.SharedPreferences.Editor editor = activityPreferences.edit();//ly ID text viewTextView myTextView = (TextView)findViewById(R.id.myTextView);// // nhp gi tr mi vo i tng Shared Preferences.editor.putString(currentTextValue,myTextView.getText().toString());// p dng thay ieditor.commit();}

4.5.2.2 Lu tr v phc hi trng thi th hin:

Bng cch overriding s kin onSaveInstanceState ca Activity, Chng ta c th dng tham s Bundle lu tr cc gi tr. Lu tr cc gi tr ny ta dng phng

thc get() and put() nh gii thiu trn trc khi a vo x l Bundle trong lp

cha.

V d th hin on code sau:

private static final String TEXTVIEW_STATE_KEY =TEXTVIEW_STATE_KEY;@Overridepublic void onSaveInstanceState(Bundle outState) {TextView myTextView = (TextView)findViewById(R.id.myTextView);// lu trng thi th hin ca textview outState.putString(TEXTVIEW_STATE_KEY, myTextView.getText().toString());super.onSaveInstanceState(outState);}

Cc Bundle lu truyn trong cc phng thc onRestoreInstanceState v onCreate nu ng dng bt buc phi khi ng li trong cc session,on code sau y s cho thy lm th no trch xut gi tr t Bundle v s dng chng cp nht trng thi Activity.@Overridepublic void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main);TextView myTextView = (TextView)findViewById(R.id.myTextView);String text = ;if (icicle != null && icicle.containsKey(TEXTVIEW_STATE_KEY))text = icicle.getString(TEXTVIEW_STATE_KEY);myTextView.setText(text);}

4.6 LU V C CC TP TIN TRONG ANDROID:

Cng nh cc tiu chun java I/O cc lp v phng thc trong Android cng cung cp openFileInput v openFileOutput n gin ha vic c v vit t nhng dng v t local file, nh on code di y:String FILE_NAME = tempfile.tmp;

//m mt file mi

FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);// c file.

FileInputStrea m fis = openFileInput(FILE_NAME);

hnh.

Nhng phng php ny ch h tr cc tp tin trong cc th mc ng dng hin

Nu tp tin chng ta ch nh khi to mt FileOutputStream khng tn ti, th

Android s to n cho chng ta, thm mt tp tin hin c th xc nh c ch

Context.MODE_APPEND.

Theo mc nh, cc tp tin c to ra bng cch gi phng thc openFileOutput gi ti mt ng dng khc, ngoi ra chng ta c th ch nh mt Context.MODE_WORD_READABLE hoc Context.MODE_WORD _WRITEABLE khi to ra m tp tin c sn trong cc ng dng nh trong on code sau:String OUTPUT_FILE = publicCopy.txt;FileOutputStream fos = openFileOutput(OUTPUT_FILE, Context.MODE_WORLD_WRITEABLE);

4.6.1

Truy xut cc tp tin trong Resources:

Nu ng dng ca chng ta i hi ngun ti nguyn t tp tin bn ngoi chng ta c th gp chng trong gi res/raw trong project c a chng ta. ch c cc tp tin gc chng ta gi phng thc openRawResource t ngun ng dng, nhn c mt InputStream da trn cc quy nh ngun, a vo mt filename l tn bin t lp R.raw nh sau:Resources myResources = getResources();InputStream myFile = myResources.openRawResource(R.raw.);

4.6.2

Cc cng c qun l tp tin

Android cung cp mt s cng c qun l tp tin c bn gip qun

l h thng tp tin.Trong s nhng tin ch ny nm trong gi java.io.File .

del eteFi le: xa tp tin c to bi ng dng hin hnh. fi l eLi st: tr v mng cc tp tin c to bi ng dng hin hnh.

4.7 C S D LIU TRONG ANDROID

Android cung cp y cc quan h c s d liu thng qua th vin SQLite m khng p t bt k hn ch no. S dng SQLite c th to c s d liu quan h c lp cho mi ng dng.

Tt c cc c s d liu trong Android c lu trong th mc

/data/data//databases chia s c s d liu qua cc ng dng ta

dng Context Provider( nh phn sau):

Nhng phn sau y s tp chung vo tnh thit thc ca vic to v qun l c

s d liu SQLite trong Android.

4.7.1

Gii thiu SQLite:

SQLite l h thng qun l cc quan h c s d liu (RDBMS), n cng

c coi l:

M ngun m

Tiu chun

Gn nh

n lp

4.7.2

Cursors v Content Values:

Content Values l mt i tng s dng chn cc dng mi vo

bng c s d liu, mi i tng Content Values i din gi tr cho mt dng.

Truy vn trong Android c tr v l i tng Cursor. Thay v gii nn v tr li mt bn sao ca cc gi tr kt qu, Cursors hnh ng nh con tr n mt tp hp cc d liu nm bn di. Cursor qun l vic kim sot v tr (row) trong tp kt qu truy vn c s d liu.Cc lp con tr bao gm mt s chc nng iu hng kt qu truy vn bao gm, nhng khng gii hn, nhng iu sau y: moveToFirst :chuyn con tr ti dng u tin moveToNext : chuyn con tr ti dng tip theo. moveToPrevious: chuyn con tr ti dng duyt trc . getCount :tr v s dng ca kt qu truy vn. getColumnIndexOrThrow: tr v ch s ca ct xc nh getColumnName: tr v tn ca ct c ch s truyn vo getColumnNames: tr v mng tn cc ct moveToPosition: a con tr n dng xc nh. getPosition: tr v v tr con tr

Khi mun bt u vng i hot ng ca Cursor th gi phng thc

:startManagingCursor vo kt thc vng i con tr th gi

:stopManagingCursor.

4.7.3

S dng SQLiteOpenHelper:

SQLiteOpentHelper l mt lp tru tng v l mi trng tt to,

truy xut v cp nht c s d liu.Gi getReadableDatabases hoc getWriteableDatabases m hoc tr v d liu trong trng hp c/ghi trong c s d liu nh sau:dbHelper = new myDbHelper(context, DATABASE_NAME, null,DATABASE_VERSION); SQLiteDatabase db;try {db = dbHelper.getWritableDatabase();}catch (SQLiteException ex){db = dbHelper.getReadableDatabase();}

4.7.4

Truy xut v to C s d liu khng dng SQLiteHelper:

Chng ta c th truy xut n c s d liu m khng cn s dng lp

SQLiteHelper vi phng thc openorCreateDatabases trong ng dng Context

nh sau:

private static final String DATABASE_NAME = myDatabase.db; private static final String DATABASE_TABLE = mainTable; private static final String DATABASE_CREATE =create table + DATABASE_TABLE + ( _id integer primary key autoincrement, + column_one text not null);;SQLiteDatabase myDatabase;private void createDatabase() {myDatabase = openOrCreateDatabase(DATABASE_NAME, Context.MODE_PRIVATE, null);myDatabase.execSQL(DATABASE_CREATE);

4.7.5

V D:

}

Truy vn c s d liu

// tr v tt c cc ct 1,3 v ID

String[] result_columns = new String[] {KEY_ID, KEY_COL1, KEY_COL3}; Cursor allRows = myDatabase.query(true, DATABASE_TABLE, result_columns,null, null, null, null, null, null);//tr v tt cc ct vi ct 3 c gi tr nh sn// sp xp theo ct 5String where = KEY_COL3 + = + requiredValue;String order = KEY_COL5;Cursor myResult = myDatabase.query(DATABASE_TABLE, null, where, null, null, null, order);

4.7.6

V d:

Ly kt qu t Cursors

int GOLD_HOARDED_ COLUMN = 2;Cursor myGold = myDatabase.query(GoldHoards, null, null, null,null,null, null);float totalHoard = 0f;if (myGold.moveToFirst()) {do {float hoard = myGold.getFloat(GOLD_HOARDED_COLUMN); totalHoard += hoard;} while(myGold.moveToNext());}

4.7.7

float averageHoard = totalHoard / myGold.getCount();

Thm, cp nht v xa dng:

Thm:ContentValues newValues = new ContentValues();//a gi liu vo content newValues.put(COLUMN_NAME, newValue); [ ... cc ct khc tng t ... ]// thm vo CSDLmyDatabase.insert(DATABASE_TABLE, null, newValues);

Cp nht:ContentValues updatedValues = new ContentValues();// a gi liu vo content updatedValues.put(COLUMN_NAME, newValue);

4.7.8

[ ... cc ct khc tng t... ]String where = KEY_ID + = + rowId;// cp nht.myDatabase.update(DATABASE_TABLE, updatedValues, where, null); Xa dng:myDatabase.delete(DATABASE_TABLE, KEY_ID + = +rowId, null);

Thao tc trn c s d liu Android

import Android.content.Context; import Android.database.*; import Android.database.sqlite.*;import Android.database.sqlite.SQLiteDatabase.CursorFactory;import Android.util.Log;public class MyDBAdapter {private static final String DATABASE_NAME = myDatabase.db; private static final String DATABASE_TABLE = mainTable; private static final int DATABASE_VERSION = 1;// kha chnh.public static final String KEY_ID=_id;// tn v ch s ct.public static final String KEY_NAME=name;public static final int NAME_COLUMN = 1;// TODO: Create public field for each column in your table.// cu SQL to bngprivate static final String DATABASE_CREATE = create table + DATABASE_TABLE + ( + KEY_ID + integer primary key autoincrement, + KEY_NAME + text not null);;// bin Databaseprivate SQLiteDatabase db;// p dng cho ng dng no private final Context context;//database helperprivate myDbHelper dbHelper;public MyDBAdapter(Context _context) {context = _context;dbHelper = new myDbHelper(context, DATABASE_NAME, null,DATABASE_VERSION);}

public MyDBAdapter open() throws SQLException {db = dbHelper.getWritableDatabase();return this;}public void close() {db.close();}public long insertEntry(MyObject _myObject) { ContentValues contentValues = new ContentValues(); return db.insert(DATABASE_TABLE, null, contentValues);}public boolean removeEntry(long _rowIndex) {return db.delete(DATABASE_TABLE, KEY_ID += + _rowIndex, null) > 0;}public Cursor getAllEntries () {return db.query(DATABASE_TABLE, new String[] {KEY_ID, KEY_NAME},null, null, null, null, null);}public MyObject getEntry(long _rowIndex) { MyObject objectInstance = new MyObject();return objectInstance;}public int updateEntry(long _rowIndex, MyObject _myObject) { String where = KEY_ID + = + _rowIndex; ContentValues contentValues = new ContentValues();return db.update(DATABASE_TABLE, contentValues, where,null);}private static class myDbHelper extends SQLiteOpenHelper {public myDbHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);}// Called when no database exists in@Overridepublic void onCreate(SQLiteDatabase _db) {_db.execSQL(DATABASE_CREATE);}//gi khi database c phin bn mi@Overridepublic void onUpgrade(SQLiteDatabase _db, int _oldVersion,

int _newVersion) {// Log the version upgrade.Log.w(TaskDBAdapter, Upgrading from version +_oldVersion + to +_newVersion +, which will destroy all old data);_db.execSQL(DROP TABLE IF EXISTS +DATABASE_TABLE);//to csdl mi onCreate(_db);}}}

4.7.9

Gii thiu Content Providers

S dng Content Provider bng lp ContenResolver.ContentResolver cr = getContentResolver();

4.7.9.1 Truy vn trong Content:

Nh trong c s d liu, kt qu tm kim s c tr v Cursors trong mt tp kt qu. Chng ta c th trch xut cc gi tr t Cursor bng cch s dng cc k thut c m t trc trong phn c s d liu trn Ly kt qu t Cursors:Content Provider c cch truy vn hnh thc rt ging vi cc truy vn c s d liu. S dng phng php query trn i tng ContentResolver.// ly tt c dngCursor allRows = getContentResolver().query(MyProvider.CONTENT_URI, null, null, null, null);

//tr v tt cc ct vi ct 3 c gi tr nh sn// sp xp theo ct 5String where = KEY_COL3 + = + requiredValue;String order = KEY_COL5; Cursor someRows = getContentResolver().query(MyProvider.CONTENT_URI,null, where, null, order);

4.7.9.2 Thm, cp nht v xa dng:

c th hin qua cc on code sau:

Thm :

// to contentvaluesContentValues newValues = new ContentValues();// cho vo csdlnewValues.put(COLUMN_ NAME, newValue); [ ... lp li tng t nh nhng ct khc ... ]Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI, newValues);// to dng cho vic thmContentValues[] valueArray = new ContentValues[5];int count =getContentResolver().bulkInsert(MyPro vider.CONTENT_URI, valueArray) ;

Xa:// xa dng xc nh

getContentResolver().delete(myRowUri, null, null);// xa 5 dngString where = _id < 5; getContentResolver().delete(MyProvider.CONTENT_URI, where, null);

Cp nht:

ContentValues newValues = new ContentValues();newValues.put(COLUMN_ NAME, newValue);// cp nht cho 5 dng String where = _id < 5; getContentResolver().update(MyProvi der.CONTENT_URI, newValues, where,null);

4.7.9.3 S dng Media Store Provider

Cc Android Media Store qun l tp tin hnh nh, kho video, m thanh. Bt c khi no chng ta thm mt tp tin a phng tin mi cho h thng tp tin Android l c th b sung vo Media Store dng cho cc ng dng khc.

Lp MediaStore bao gm mt s phng php tin li n gin ha cc tp tin chn vo Media Store. V d, on m sau y cho thy lm th no chn mt hnh nh trc tip vo Media Store:Android.provider.MediaStore.Images.Media.insertImage(getContentResolver(), sourceBitmap, my_cat_pic,Photo of my cat!);

4.7.9.4 S dng Contacts Provider

Truy cp vo Content Provider c bit mnh m trn mt thit b truyn thng. Android phi by tt c cc thng tin c sn t cc databases a ch lin h n bt k ng dng qua READ_CONTACTS. Trong v d sau, Activitys mt con tr n tt c mi ngi trong c s d liu lin lc, to ra mt mng cc chui cha tn ca mi lin lc v s in thoi.// ly d liu vo cursorCursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null);// qun l cursor startManagingCursor(cursor);// ly ch s ctint nameIdx = cursor.getColumnIndexOrThrow(People.NAME);int phoneIdx = cursor. getColumnIndexOrThrow(People.NUMBER); String[] result = new String[cursor.getCount()];if (cursor.moveToFirst())do {//ly tnString name = cursor.getString(nameIdx);// s in thoi.String phone = cursor.getString(phoneIdx);result[cursor.getPosition()] = name + ( + phone + );} while(cursor.moveToNext());

4.7.9.5 ng k d dng Provider

S dng th authorities xc nh trong file XML nh sau:

4.8 MT NG DNG DEMO S DNG CONTENTPROVIDER QUN L SCH:

Chng trnh c th cp nht sch, xa v thm sch mi. Hin th ln ListView ngi dng nhn thy. Ta c thm mt lp BookProvider.java k tha ContentProvider thao tc vi d liu.C th Code c th tham kho CD km theo. ng dng c tn l

Android_ContentProviderUserDemo.

4.9 MAPS, GEOCODING, LOCATION BASED SERVICES

4.9.1

S dng dch v nh v

Location Based Services (LBS) l mt thut ng chung dng m t

s khc nhau v k thut, v dng tm v tr thit b hin hnh. Hai yu t

chnh ca LBS l:

LocationMangager: qun l kt ni vi dch v nh v trong Android..

LocationProvider: l mt lp tru tng c bn ca cc cng ngh tm kim v tr khc nhau xc nh v tr thit b. S dng Location Manager ta c th :

Xc nh v tr.

Theo di s chuyn ng.t trng thi bo ng cho vic pht hin mt s chuyn ng vo v ra khi mt khu vc xc nh.

4.9.2

Ci t trn mi trng gi lp vi Test Providers

Dch v nh v (LBS) ph thuc vo cc thit b phn cng cho vic tm

kim cc v tr hin ti. Khi pht trin v kim th vi cc mi trng gi lp, th phn cng l o v chng ta c th trong nhng v tr kh ging nhau.B li Android bao gm cc mc ni cho php chng ta mc ni vi

location Provider th nghim vi ng dng location based.

4.9.3

Cp nht v tr vi Emulator Location Providers

Dng Location Controls c sn t DDMS trong Eclipse nh hnh di

y thay i trc tip v tr trong th nghim GPS_PROVIDER.

Hinh 4-7

Trong hnh trn c cc tab Manual, KML v GPX

S dung tab Manual chng ta c th xc nh v / kinh .

S dng tab KML v GPX cho php chng ta ti cc tp tin KML

(Keyhole Markup Language) v GPX (GPS Exchange Format) tng ng.Lu v tr GPS s tr v t getLastKnownLocation s khng thay i tr khi c t nht mt ng dng yu cu cp nht v tr.

4.9.4

Chn mt Location Provider

Ty thuc vo thit b m c nhng k thut ring, Android c th dng

xc nh v tr hin ti, mi k thut, mi Location Provider s cung cp nhng kh nng khc nhau nh xc nh cao, tc , s chnh xc hoc cc thng tin lin quan. c c i tng LocationProvider ta gi getProvider v truyn vo tn Provider. V d di y th Provider l GPS_PROVIDERString providerName = LocationManager.GPS_PROVIDER;LocationProvider gpsProvider;gpsProvider = locationManager.getProvider(providerName);

4.9.5

Tm mt Providers c sn

Lp LocationManager bao gm cc chui hng s v tr v tn ca nh

cung cp cho hai Location Provider ph bin nht. LocationManager.GPS_PROVIDER LocationManager.NETWORK_ PROVIDER

c danh sch tt c tn ca nh cung cp trn thit b ta gi getProvider, s dng Boolean bit nu chng ta mun tt c, hoc ch ly mt Provider u tin.boolean enabledOnly = true;List providers = locationManager.getProviders(enabledOnly);

4.9.6

Tm kim mt Provider theo tiu ch

S dng lp Criteria yu cu nh cung cp x l chnh xc nhng sliu c sn nh: v v kinh , tc , cao, chi ph v yu v cu nng lng in.

Criteria criteria = new Criteria(); criteria.setAccuracy(Criteria.ACCURACY_COARSE); criteria.setPowerRequirement(Criteri a.POWER_LOW); criteria.setAltitudeRequired(false); criteria.setBearingRequired(false); criteria.setSpeedRequired(false); criteria.setCostAllowed(true);

Chng ta c th dng getBestProvider l s kt hp tt nht tr v cho Location Provider hoc dng getProvider, s dng getBestProvider nh cung cp s tr li cc tiu ch tt nht, s dng Boolean cho php hn ch nhng kt qu t nh cung cp ang c hot ng.String bestProvider = locationManager.getBestProvider(criteria, true); List matchingProviders =locationManager.getProviders(criteria,false);

4.9.7

Tm mt a ch (Finding Your Location)

Mc ch ca dch v nh v l tm ra v tr vt l ca thit b.

truy cp vo Location Manager thc hin cc yu cu

LOCATION_SERVICES ta s dng phng thc getSystemService nh sau:

String serviceString = Context.LOCATION_SERVICE; LocationManager locationManager;locationManager = (LocationManager)getSystemService(serviceString);

Trc khi s dng Location Manager th cn thm mt hoc nhiu th uses-permission trong file mainfest truy cp vo cc phn cng ca LBS trong bao gm c fine v coarse nh sau:

Chng ta c th tm thy v tr bng cch xc nh mt Location Provider s dng phng thc getKnowLocation v a vo tn ca Location Provider.V d:String provider = LocationManager.GPS_PROVIDER;Location location = locationManager.g etLastKnownLocation(provider);

4.9.8

Theo di s di chuyn (Tracking Movement)

S dng phng thc requestLocationUpdate cp nht bt k mt v

tr, khi v tr hin ti thay i chng ta s dng mt LocationListener. LocationListener thc hin v ng k nhn thng tin. LocationListener rt linh hot v nhiu tnh nng cho php chn nhiu loi s kin v v tr da trn c tnh khc nhau.Phng thc requestLocationUpdate chp nhn mt Location Provider

hoc Criteria xc nh nh cung cp c s dng.

on code sau s th hin mt yu cu cp nht thng xuyn da trn mc ti thiu v thi gian v khong cch.String provider = LocationManager.GPS_PROVIDER;int t = 5000; // milliseconds int distance = 5; // metersLocationListener myLocationListener = new LocationListener() {public void onLocationChanged(Location location) {// Update application based on new location.}public void onProviderDisabled(String provider){// Update application if provider disabled.}public void onProviderEnabled(String provider){// Update application if provider enabled.}

public void onStatusChanged(String provider, int status,Bundle extras){// Update application if provider hardware status changed.

4.9.9

}};locationManager.requestLocationUpdates(provider, t, distance, myLocationListener);

S dng Goecoder

Geocoding cho php chuyn gia cc a ch v cc m t khc

vo kinh / v ca bn ta . iu ny cung cp cho chng ta mt khung cnh gip d nhn bit cc v tr v ta c s dng trong cc dch v da trn v tr v hot ng da trn bn . thc hin vic ny lp Geocoder thc hin mt cuc gi mng (t ng) cho mt dch v web.Lp Geocoder cung cp hai chc nng truy cp m a l:

Forward Geocodi ng: tm v v kinh ca ia ch.

Reverse Geocodi ng: chuyn a ch ra v , kinh . Cch to mt Geocoder:Geocoder geocoder = new Geocoder(getApplicationContext(), Locale.getDefault());C hai chc nng m ho a l tr v mt danh sch cc i

tng Address. Mi danh sch c th cha nhiu kt qu.

4.9.10 Reverse Geocoding

Tr v a ch khi c cung cp kinh , v .

thc hin vic tra cu chuyn i chng ta a vo mt v v kinh n Geocoder v phng thc getFromLocation s. Reverse Geocoding s tr v mt danh sch a ch ph hp, nu Geocoder khng gii quyt c a ch ny vi cc quy nh th n s tr v null.Location =locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);double latitude = location.getLatitude();double longitude = location.getLongitude();Geocoder gc = new Geocoder(this, Locale.getDefault()); List addresses = null;

try {

addresses = gc.getFromLocation(latitude, longitude, 10);}catch (IOException e){}

4.9.11 Forward Geocoding

tra cu Forward Geocoding, gi getFromLocationName trn trng Geocoder. a v tr to m chng ta mun v s lng ti a ca cc kt qu tr li, chng ta s nhn c cc a ch thch hp, nh th hin trong on code di y:List result = geocoder.getFromLocationName(aSt reetAddress, maxResults);

Locale cung cp bi cnh a l gii thch cc yu cu tm kim ca chng ta nh tn ca mt v tr c th tn ti trong nhiu khu vc. Nu c th th ta xem xt la chn mt Locale khu vc trnh s nhp nhng tn, nh th hin trong on code sau:Geocoder fwdGeocoder = new Geocoder(this, Locale.US);String streetAddress = 160 Riverside Drive, New York, New York;List locations = null;try {locations = fwdGeocoder.getFromLocationName(streetAddress,10);}catch (IOException e){}// c nhiu a ch, s dng getFromLocationNameList locations = null;try {locations = fwdGeocoder.getFromLocationName(streetAddress,10,n, e, s, w);}catch (IOException e) {}

Hnh sau cho thy vic dng Geocoder chuyn mt a ch kiu

String vo mt i tng cung cp v v kinh .

4.9.12 Dng MapView

Hinh 4-8

MapView l mt control thu nh ca nhiu Google Maps API trong hnh thc View cho cc ng dng Android. MapView hin th giao din ca bn , n c c s dng qua mng nh bn l s di chuyn v thu nh, ging nh phin bn web ca Google Maps.Nhiu khi nim tiu chun Google Map API cng c mt trong Android thng qua cc MapView, v d MapView h tr ch v tinh, ch xem ng ph, v ch giao thng ta khai bo nh sau:mapView.setSatellite(true); mapView.setStreetView(true); mapView.setTraffic(true);

Chng ta cng c th truy cp vo cc Map View tm ra kinh hin hnh v phng i, cng nh cc im trung tm v hin ang nhn thy v khong v ( dng thp phn).GeoPoint center = mapView.getMapCenter();int latSpan = mapView.getLatitudeSpan();int longSpan = mapView.getLongitu deSpan();

Chng ta cng c th hin th bn iu khin zoom mt cch ty .

View zoomControls = mapView.getZoomControls(); mapView.addView(zoomControls, lp); mapView.displayZoomControls(true);

MapView l mt ViewGroup hy khai bo n trong XML.

Ch : Android:apiKey y chng ta phi ng k qua Google, n hon ton

min ph.

4.9.13 Dng MapActivity

MapActivity l mt lp c bn.Lp MapActivity x l vng i ng dng v qun l nn tng cn thit cho vic hin th bn , chng ta ch c th s dng mt MapView trong MapActivity. s dng bn trong ng dng chng ta cn phi to mt Activity mi k tha t MapActivity v cn thm vo trong file XML, trong th:

MapView iu khin ch c th c s dng trong mt Activity m rng MapActivity. Overriding phng thc onCreate t ra cc mn hnh bao gm mt MapView, v ghi ln isRouteDisplayed tr v true nu Activity s c hin th thng tin nh tuyn.on code sau s trnh by cch khi to mi lp bn c s

MyMapActivity :

import com.google.Android.maps.MapActivity; import com.google.Android.maps.MapController; import com.google.Android.maps.MapView; import Android.os.Bundle;public class MyMapActivity extends MapActivity {private MapView mapView;private MapController mapController;@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);

setContentView(R.layout.map_layout);mapView = (MapView)findViewById(R.id.map_view);}@Overrideprotected boolean isRouteDisplayed() {// IMPORTANT: This method must return true if yourActivity// is displaying driving directions. Otherwise return false.return false;}}

4.9.14 S dng Overlay

Hinh 4-9

Overlay l mt cch thm cc ch thch v x l nhn vo MapView. thm mt lp mi Overlay chng ta to mt lp mi k tha t lp Overlay, ghi cc phng thc v v cc ch thch m chng ta mun thm v ghi ln onTap phn li cho ngi dng khi click chut nh on code sau:import Android.graphics.Canvas;import com.google.Android.maps.MapView; import com.google.Android.maps.Overlay; public class MyOverlay extends Overlay {@Overridepublic void draw(Canvas canvas, MapView mapView, boolean shadow) {if (shadow == false) {

}else {

}}

[ ... v trn lp trn cng ca layout ... ]

[ ... v tn lp di, bng m ... ]@Overridepublic boolean onTap(GeoPoint point, MapView mapView) {//tr v true nu tch vo mt im mn hnh do Overlay qun l return false;}}

4.9.15 Dng MapController

Dng MapContrller quay v phng to mt MapView, dng

getController nh on code sau:

MapController mapController = myMapView.getController();

Bn cc a im trong cc lp bn Android c i din bi i

tng GeoPoint, trong v v kinh o bng microdegrees.

Trc khi chng ta c th s dng cc gi tr v v kinh lu tr trong cc i tng Location c s dng bi cc location-based services, chng ta cn phi chuyn i chng sang microdegrees v lu tr chng nh GeoPoints, nh trong on m sau y:Double lat = 37.422006*1E6; Double lng = -122.084095*1E6;GeoPoint point = new GeoPoint(lat.intValue(), lng.intValue());

Khi mun bit im v phng to hnh trong MapView ta s dng phng thc setCenter v setZoom c sn trong MapCotroller ca MapView nh on code di y:mapController.setCenter(point);mapController.setZoom(1);Phng thc setCenter s nhy ti mt v tr mi ta s dng nh sau:mapController.animateTo(point)

4.9.16 Ch khi to mt ng dng c s dng MapView

Khng ging nh cch to v chy ng dng nh cc chng trc, c mt s khc bit nho nh khi chy ng dng MapView l vic chn Emulator hay chn cc Emulator c h tr Google APIs.

Hinh 4-10 To emulator h tr Geocoder v MapView

Mt ch na l phi c khi dng MapView, sau

y l cch ly key (chng ta phi kt ni Internet) :

Ly debug.keystore

Vo Windows > Prefs > Android > Build ly ng dn nh bn di

Ly key:

Vo cmd g:

keytool -list -alias Androiddebugkey -keystore -storepass Android -keypass Android

Vo link http://code.google.com/Android/maps-api-signup.html dn MD5 fingerprint code vo v click Generate API key , site s t sinh cho chng ta 1 key.

4.10 LM VIC TRN BACKGROUND

4.10.1 Gii Thiu Services

Khng ging nh cc hot ng khc, Services trnh by mt giao din ha phong ph cho ngi dng. Services chy trn nn cp nht Content Providers, ng Intent v kch hot thng bo, Services l nhng cch thc hin x l hon ho hoc x l s kin thng xuyn ngay c khi ng dng ca chng ta khng nhn thy hot ng ca services, khng hot ng hoc b tt.Tuy khng c giao din trc quan nhng Serviecs vn c th c bt u, dng li v kim sot t cc thnh phn ng dng khc bao gm Services, Activities v Broadcast Receivers. Nu ng dng ca chng ta thng xuyn hoc lin tc thc hin cc hot ng m khng ph thuc trc tip vo d liu ngi dng a vo (input), Sevices c th l cu tr li.My nghe nhc MP3, gim st ta l nhng v d ca ng dng c thchy v cp nht m khng c mt thnh phn tng tc trc quan c th nhn thy.

Cc Services c thit k chy nn, v vy cn phi c bt u, dng li, v kim sot bi cc thnh phn ng dng khc.Trong cc phn sau y, chng ta s hc cch to ra mt Service mi v lm th no bt u v kt thc n bng cch s dng phng thc

startServices. Sau s hc cch rng buc mt Services cho mt Activity,

cung cp mt giao din phong ph hn cho tng tc.

4.10.2 To Service

xc nh mt Services ta to ra mt lp mi k tha t lp Service c

s. Chng ta cn ghi ln onBind v onCreate nh trnh by sau y:

import Android.app.Service; import Android.content.Intent; import Android.os.IBinder;public class MyService extends Service {@Overridepublic void onCreate() {// TODO: Actions to perform when service is created.}@Overridepublic IBinder onBind(Intent intent) {// TODO: Replace with service binding implementation. return null;}}

Trong hu ht cc trng hp chng ta nn ghi ln onStart. iu