xây dựng ứng dụng 3d với android

Upload: daniel-vo

Post on 19-Jul-2015

3.100 views

Category:

Documents


0 download

TRANSCRIPT

Xy dng ng dng 3D vi Android 1 ______________________________________________________________________

NHN XT CA GING VIN HNG DN

............................................................................................................................. ............................................................................. ................................................................................................................................................................................... ....................... ............................................................................................................ .............................................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ........................................................................................................................................... ............................................................... ................................................................................................................................................................................................. ......... .......................................................................................................................... ................................................................................ ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ......................................................................................................................................................... ................................................. .......................................................................................................................................................................................................... ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ....................................................................................................................................................................... ................................... .......................................................................................................................................................................................................... ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................... ........................................................................... ..................................................................................................................................................................................... ..................... .............................................................................................................. ............................................................................................ ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ......................................................................................................................................... ................................................................. ................................................................................................................................................................................................... ....... ............................................................................................................................ .............................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ........................................................................................................................................................... ............................................... ..........................................................................................................................................................................................................

Ngy

Thng

Nm

Ging Vin Hng Dn

(K v ghi r h tn)

Xy dng ng dng 3D vi Android 2 ______________________________________________________________________

NHN XT CA GING VIN PHN BIN

............................................................................................................................. ............................................................................. ................................................................................................................................................................................... ....................... ............................................................................................................ .............................................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ........................................................................................................................................... ............................................................... ................................................................................................................................................................................................. ......... .......................................................................................................................... ................................................................................ ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ......................................................................................................................................................... ................................................. .......................................................................................................................................................................................................... ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ....................................................................................................................................................................... ................................... .......................................................................................................................................................................................................... ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................... ........................................................................... ..................................................................................................................................................................................... ..................... .............................................................................................................. ............................................................................................ ............................................................................................................................. ............................................................................. .......................................................................................................... ................................................................................................ ............................................................................................................................................. ............................................................. ................................................................................................................................................................................................... ....... ............................................................................................................................ .............................................................................. ............................................................................................................................. ............................................................................. ............................................................................................................................. ............................................................................. ........................................................................................................................................................... ............................................... ..........................................................................................................................................................................................................

Ngy

Thng

Nm

Ging Vin Phn Bin

(K v ghi r h tn)

Xy dng ng dng 3D vi Android 3 ______________________________________________________________________

LI CM N

Chng em xin chn thnh cm n cc thy c trong khoa Cng Ngh Thng Tin cng ton th cc thy c trng i Hc S Phm K Thut Tp.HCM truyn t cho chng em nhng kin thc qu gi trong sut nhng nm hc va qua. Chng em xin chn thnh cm n Thy Nguyn Minh o tn tnh hng dn, ch bo chng em trong sut qu trnh thc hin ti. Cui cng ti xin cm n cc bn trong khoa Cng Ngh Thng Tin, nhng ngi gip , chia s kin thc, ti liu... trong sut qu trnh thc hin nghin cu ti. Trong phm vi kh nng cho php, chng em rt c gng hon thnh ti mt cch tt nht. Song, chc chn s khng trnh khi nhng thiu st. Chng em knh mong nhn c s cm thng v nhng kin ng gp ca qu thy c v cc bn.

Nhm sinh vin thc hin Nguyn Ch Tm Nguyn Phi Cng 06/ 2011

Xy dng ng dng 3D vi Android 4 ______________________________________________________________________ MC LC

M u ....................................................................................................................... 10 PHN A: XY DNG NG DNG 3D VI ANDROID _____________________ 12 Chng 1: Tng quan v ng dng trn android ____________________________ 12 1.1 1.2 1.3 Lc s v Android:....................................................................................... 12 Nn tng Android: .......................................................................................... 13 Kin trc ng dng Android: ........................................................................ 15

1.3.1 My o Dalvik: ............................................................................................. 15 1.3.2 Cc thnh phn ca mt ng dng Android: ............................................. 16 1.4 Vng i ca ng dng Android:...................................................................... 17 1.5 Cc cng c to mt ng dng Android: ................................................ 18

1.5.1 Eclipse IDE:................................................................................................... 18 1.5.2 Android SDK: ................................................................................................ 18 1.5.3 Ci t cng c: ............................................................................................. 19 1.6 Thit b Android o (Android Virtual Device - AVD): ................................... 20 1.7 Android project: ................................................................................................. 22 1.7.1 To mt Android project mi:....................................................................... 22 1.7.2 Cu trc mt project:..................................................................................... 24 Chng 2: Cc thnh phn c bn ca mt ng dng trn Android ____________ 25 2.1 Hot ng(Activity): ....................................................................................... 25

2.1.1 To mt Activity:............................................................................................ 25 2.1.2 Vng i ca Activity: .................................................................................. 27

Xy dng ng dng 3D vi Android 5 ______________________________________________________________________ 2.1.3 Khi ng mt Activity: ............................................................................... 28 2.1.4 Lin lc gia 2 activity: ................................................................................ 28 2.2 Trnh thu pht (BroadcastReceiver): ........................................................... 29

2.2.1 Chu k sng: .................................................................................................. 29 2.2.2 Mt s broadcast thng dng: ...................................................................... 30 2.2.3 Hm onReceive(): ......................................................................................... 30 2.3 Dch v (Service):............................................................................................ 31

2.3.1 To ra mt Service: ....................................................................................... 31 2.3.2 Vng i ca Services: ................................................................................. 33 2.3.3 Kt ni dch v: .............................................................................................. 34 2.4 Trnh cung cp ni dung (Content Providers): ........................................... 37

2.4.1 Gii thiu: ...................................................................................................... 37 2.4.2 To mt Content Provider mi: ................................................................... 37 2.4.3 Truy vn, thm, cp nht v xa ni dung trong Content Provide: .......... 42 2.4.4 Native Android Content Provider: ............................................................... 46 Chng 3: Thit k giao din ____________________________________________ 49 3.1 Mt s lp h tr thit k giao din cho ng dng Android: ......................... 49 3.2 Android Widget Toolbox: .................................................................................. 49 3.3 Cc kiu Layout: ................................................................................................. 50 3.4 To cc View: ...................................................................................................... 53 3.4.1 Chnh sa cc View c sn: .......................................................................... 53 3.4.2 To cc iu khin ghp (compound control): ............................................ 54 3.4.3 To cc Control ty chnh: ........................................................................... 56 3.5 To giao din Activity vi cc View: ................................................................. 57

Xy dng ng dng 3D vi Android 6 ______________________________________________________________________ 3.6 Menu: ................................................................................................................... 58 3.6.1 Menu trong Android: .................................................................................... 58 3.6.2 Cc kiu Menu Item ...................................................................................... 60 3.6.3 To mt Menu: .............................................................................................. 61 Chng 4: X l bt ng b ____________________________________________ 63 4.1 Thread: ............................................................................................................... 63 4.2 4.3 4.4 Handler: ........................................................................................................... 64 AlarmManager (bo hiu): ............................................................................ 66 Notification (thng bo): ................................................................................ 67

Chng 5: p dng OpenGL ES to ng dng 3D trn Androi _____________ 70 5.1 Gii thiu v OpenGL ES: ................................................................................. 70 5.3 Php chiu trc giao (Orthographic Projection): ............................................ 71 5.4 Php chiu phi cnh (Perspective Projection ): ............................................. 75 5.5 Php bin i (Transformations): ..................................................................... 80 Hnh 19 Kt qu php bin i ............................................................................. 84 5.6 Chiu su (Depth): .............................................................................................. 84 5.7 Mu sc v t bng (Color and Shading): ........................................................ 87 5.8 Hnh khi (Solid Shapes): .................................................................................. 89 5.9 B lc mt sau (Backface Culling): ................................................................... 92 5.10 nh sng (Lighting):......................................................................................... 92 5.11 nh hng nh sng (Directional Lighting): ................................................ 97 5.12 Dn cht liu (Texture Mapping): ................................................................ 101

Xy dng ng dng 3D vi Android 7 ______________________________________________________________________ 5.13 Hm cht liu (Texture Functions): .............................................................. 108 5.14 Pha trn mu (Blending): .............................................................................. 113 5.15 Minh bch i tng (Transparency): ......................................................... 120 PHN B: CHNG TRNH DEMO ____________________________________ 126 Chng 6: Demo k thut v hnh 3D trn Android ________________________ 126 6.1 Gii thiu chng trnh: .................................................................................. 126 6.2 Cc chc nng: .................................................................................................. 126 6.2.1 Menu: ........................................................................................................... 126 6.2.2 Hnh nh mt s chc nng trong chng trnh: ..................................... 132 PHN C: KT LUN _________________________________________________ 137 PH LC ___________________________________________________________ 138 TI LIU THAM KHO ______________________________________________ 139

Xy dng ng dng 3D vi Android 8 ______________________________________________________________________ DANH MC HNH Hnh 1 Cu trc Android ________________________________________________ 15 Hnh 2 My o Dalvik __________________________________________________ 16 Hnh 3 To mt AVD __________________________________________________ 21 Hnh 4 Trnh m phng thit b Android. ___________________________________ 22 Hnh 5 To mt Android project __________________________________________ 23 Hnh 6 Vng i ca Activity ____________________________________________ 27 Hnh 7 Vng i ca service _____________________________________________ 33 Hnh 8 Hot ng kt ni dch v _________________________________________ 36 Hnh 9 - Quan h gia cc thnh phn trn ___________________________________ 49 Hnh 10 - H thng cc view vi cc thng s layout c kt ni vi mi view _____ 51 Hnh 11 Icon menu ____________________________________________________ 58 Hnh 12 Expanded menu ________________________________________________ 59 Hnh 13 - Submenu _____________________________________________________ 59 Hnh 14 - Php chiu trc giao ____________________________________________ 72 Hnh 15 Kt qu php chiu trc giao _____________________________________ 75 Hnh 16 - Php chiu phi cnh ___________________________________________ 76 Hnh 17 M t gc nhn ca camera _______________________________________ 78 Hnh 18 Kt qu php chiu phi cnh _____________________________________ 79 Hnh 19 Kt qu php bin i ___________________________________________ 84 Hnh 20 Kt qu chiu su ______________________________________________ 87 Hnh 21 Kt qu mu sc v t bng ______________________________________ 89 Hnh 22 Kt qu hnh khi ______________________________________________ 92 Hnh 23 Kt qu nh sng _______________________________________________ 97 Hnh 24 Kt qu nh hng nh sng ____________________________________ 101 Hnh 25 Kt qu dn cht liu ___________________________________________ 113

Xy dng ng dng 3D vi Android 9 ______________________________________________________________________ Hnh 26 Pha mu (GL_ONE, GL_ZERO) _________________________________ 117 Hnh 27 Pha mu (GL_ONE, GL_ONE) __________________________________ 118 Hnh 28 Pha mu (GL_ONE, GL_ONE_MINUS_DST_ALPHA) ______________ 119 Hnh 29 Pha mu (GL_SRC_ALPHA, GL_ONE) ___________________________ 119 Hnh 30 Pha mu (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) _______ 120 Hnh 31 Hiu ng sng m ____________________________________________ 125 Hnh 32 - Menu chnh __________________________________________________ 130 Hnh 33 - Menu More __________________________________________________ 130 Hnh 34 - Menu v hnh _________________________________________________ 131 Hnh 35 - Menu pha mu ________________________________________________ 131 Hnh 36 - Menu php bin i ____________________________________________ 132 Hnh 37 - Menu php chiu ______________________________________________ 132 Hnh 38 Kt hp cc php bin i _______________________________________ 133 Hnh 39 Demo chiu su _______________________________________________ 133 Hnh 40 Demo v mt tr _______________________________________________ 134 Hnh 41 Demo v mt nn _____________________________________________ 134 Hnh 41 Demo v mt nn ct __________________________________________ 135 Hnh 42 Demo v mt cu______________________________________________ 135 Hnh 43 M phng ng hm 3D _______________________________________ 136

Xy dng ng dng 3D vi Android 10 ______________________________________________________________________

M u

Hin nay ngnh cng nghip phn mm ang rt pht trin v ngnh cng nghip phn mm trn in thoi di ng cng khng nm ngoi xu th . Tuy cn nhiu hn ch trong phn cng ca in thoi di ng nhng n th hin c sc mnh ca mnh trong rt nhiu cc lnh vc khc nhau nh gii tr, cc tin ch, thanh ton in t v.v Ngnh cng ngh phn mm di ng vn cn kh non tr Vit Nam v vy vic nghin cu v pht trin cc ng dng trn di ng l rt cn thit. Cc h iu hnh nh Window Mobile, Symbian phn no cng gy t nhiu kh khn cho nhng ai c nh xy dng cc ng dng trn n. i vi Window Mobile l mt cng ngh ca Microsoft v hon ton ng i vi ngi dng, nh pht trin ng dng ch da hon ton vo cng ngh m Microsoft cung cp, cn Symbian th vic cu hnh c th lp trnh trn n cng v vn kh khn, c bit l n s dng ngn ng C/C++ lm nn tng lp trnh r rng l khng thun tin trong vic pht trin ng dng. Xut pht t nhu cu thc t , Google mnh dn nghin cu v a ra mt nn tng h iu hnh mi, chnh l Android. Mt nn tng h iu hnh m ngun m hon ton v da vo mt ngn ng lp trnh rt mnh l Java pht trin ng dng. Chnh v Android h tr Java ngay t trong nn tng ca n, nn vic vit ng dng, ngay c s dng cc chc nng ca phn cng l hon ton d dng thng qua vic s dng b cng c h tr lp trnh c cung cp hon ton min ph, l Android SDK. Nhm thc hin nhn thy nhu cu ca con ngi trong lnh vc gii tr trn di ng ngy cng cao v Android chnh l nn tng ng dng c th pht trin trong tng lai. Chnh v vy nhm thc hin chn ti Xy dng ng dng 3D vi

Xy dng ng dng 3D vi Android 11 ______________________________________________________________________ Android nhm hiu r v cc k thut lp trnh trn thit b ng, c bit l cc k thut xy dng ha 3D trn di ng c th to nn mt game 3D hon chnh. Nhng v thi gian, cng nh nng lc ca nhm c hn, cho nn ch gii hn vic tm hiu cch thc hot ng, nghin cu c bn cc chc nng, s dng b cng c Android SDK v mt s hm chc nng ca OpenGL ES v mt s hnh nh 3D c bn mc ch nghim thu qu trnh tm hiu. ti bao gm: Phn A: Xy dng ng dng 3D vi Android Chng 1: Tng quan v ng dng trn Android Chng 2: Cc thnh phn c bn ca mt ng dng trn Android Chng 3: Thit k giao din Chng 4: X l bt ng b Chng 5: p dng OpenGL ES to ng dng 3D trn Androi Phn B: Chng trnh Demo Chng 6: Demo k thut v hnh 3D trn Android Phn C: Kt lun Ti liu tham kho

Xy dng ng dng 3D vi Android 12 ______________________________________________________________________ PHN A: XY DNG NG DNG 3D VI ANDROID

Chng 1: Tng quan v ng dng trn android

1.1 Lc s v Android: Android c pht hnh phin bn u tin 11/11/2007, l mt mi trng h iu hnh hon chnh da trn h iu hnh nhn Linux V2.6. Lc u, ch trin khai i vi Android l lnh vc in thoi di ng, gm cc loi in thoi thng minh v cc loi thit b in thoi kiu gp chi ph thp. Tuy nhin, phm vi y cc dch v in ton ca Android v s h tr chc nng phong ph ca n c tim nng m rng ra ngoi th trng in thoi di ng. Android cn c th hu ch i vi cc nn tng v ng dng khc. Nn Android l sn phm ca Open Handset Alliance (Lin minh thit b cm tay m), mt tp on cc t chc cng hp tc vi nhau xy dng nn mt loi in thoi di ng tt hn. Tp on do Google ng u ny gm cc nh vn hnh (in thoi) di ng, cc nh sn xut thit b cm tay, sn xut linh kin, cc nh cung cp nn v gii php phn mm v cc cng ty tip th. T mt quan im pht trin phn mm, Android tr thnh trung tm ca th gii m ngun m v rt c tim nng pht trin. Thit b cm tay c kh nng Android u tin trn th trng l thit b G1 do HTC sn xut v c bn trn T-Mobile. N tr nn sn c sau gn mt nm n i, khi m cc cng c pht trin phn mm sn c duy nht ch l mt s bn pht hnh B cng c pht trin phn mm (SDK) c ci tin dn tng bc. Khi ngy pht hnh G1 gn n, nhm Android pht hnh SDK V1.0 v cc ng dng bt u vt ln nhm hng ti nn tng mi ny. kch thch i mi v pht trin cc ng dng ca Android, Google ti tr hai vng cuc thi Cc thch thc nh pht trin Android, v hng triu la c

Xy dng ng dng 3D vi Android 13 ______________________________________________________________________ vo cc ng dng d thi hng u. Vi thng sau G1, Android Market c pht hnh, cho php ngi s dng duyt v ti v cc ng dng trc tip vo in thoi ca h. Trong vng 18 thng, mt nn di ng mi chnh thc c mt trn th trng v s l i th cnh tranh nng k ca cc nn di ng ph bin trc nh Symbian hay Window Mobile. Android cung cp kh y cc cng c c bn v c thit k sao cho cc nh pht trin c th tn dng ti a li th ca thit b cm tay xy dng nn cc ng dng thc s thuyt phc. H c th to mt ng dng c th gi thc hin cc chc nng li trong in thoi nh thc hin cuc gi, gi tin nhn SMS, dng camera hay chia s thng tin c nhn ln trang web chn hn nh thng tin lin lc, v tr a l, lch biu Cc nh pht trin cn c th lm bt c vic g trn thit b Android bi v h thng Android giao tip thng qua cc Intents n n gin l mt chui m t mt hnh ng no v d: android.provider.Telephony.SMS_RECEIVED. Android cn cung cp sn cc dch v nh v (v y l mt th mnh ca Google) cng vi mt tp cc ng dng v Map vi cc tnh nng rt n tng nh d ng, tnh khong cch a im, tm bn Ngoi ra cn c mt s tnh nng ni bt

khc nh Animation v ng thi cng h tr media-playback.Android dn hon thin qua cc phin bn, m phin bn mi nht hin nay l Android 3.1.

1.2 Nn tng Android: Vi kh nng rng ri ca Android, s rt d dng nhm ln n vi mt h iu hnh my tnh bn. Android l mt mi trng phn tng, xy dng trn nn ca h iu hnh nhn Linux, v n bao hm nhiu chc nng phong ph. H thng giao din ngi s dng gm c: Ca s Khung hnh

Xy dng ng dng 3D vi Android 14 ______________________________________________________________________ Cc tiu trnh hin th cc phn t ph bin nh cc hp bin son, danh sch, danh sch th xung. Android gm mt trnh duyt c th nhng vo c, c xy dng da trn WebKit, chnh l my (engine) trnh duyt m ngun m cng ang l ng c ca trnh duyt Safari ca iPhone. Android khoe ra mt mng di do nhiu ty chn kt ni, gm WiFi, Bluetooth v d liu khng dy qua mt kt ni di ng (nh GPRS, EDGE v 3G). Mt k thut ph bin trong cc ng dng Android l lin kt ti Google Maps hin th mt a ch trc tip trong mt ng dng. Vic h tr cho cc dch v da trn a im (chng hn nh GPS) v cc dng c o gia tc cng c sn trong gi phn mm Android, mc d khng phi tt c cc thit b Android c trang b vi cc phn cng cn thit. Ngoi ra cn c c h tr my nh na (camera). V mt lch s, c hai lnh vc m cc ng dng di ng gng sc theo kp cc i tc my tnh bn l ha/a phng tin v phng thc lu tr d liu. Android gii quyt thch thc v ha bng s h tr dng sn cho ha 2D v 3D, gm c th vin OpenGL. Gnh nng lu tr d liu c gim nh v nn Android c gm c c s d liu SQLite m ngun m ph bin. Hnh 1 cho thy mt khung hnh n gin ha v cc tng phn mm Android.

Xy dng ng dng 3D vi Android 15 ______________________________________________________________________

Hnh 1 Cu trc Android

1.3 Kin trc ng dng Android: 1.3.1 My o Dalvik: Cc ng dng Android c vit bng ngn ng lp trnh Java v chng chy trong mt my o (VM). iu quan trng phi lu rng VM khng phi l mt my o Java m l my o Dalvik (Dalvik Virtual Machine), mt cng ngh m ngun m. Chic my o ny da trn vic ng k (register-based) v c thit k bi Dan Bornstein v mt vi k s ca Google. Thut ng register-based ni ln s khc bit gia my o Android vi my o JAVA thng thng. Tng t nh my o JAVA, y cng ch l mt my o thng dch, nhng thng dch cc file c nh dng .dex (Dalvik Execute) mt nh dng gip ti u b nh v kh nng lu tr ca my o Cc my o JAVA ngy nay ch yu da trn ngn xp (Stack-based), vi tnh

Xy dng ng dng 3D vi Android 16 ______________________________________________________________________ cht ny cho php rt ngn thi gian thc thi chng trnh. Mi ng dng Android chy trong mt c th ca my o Dalvik, khi n lt, c th my o ny nm trong mt tin trnh do nhn Linux qun l, nh trnh by di y.

Hnh 2 My o Dalvik

1.3.2 Cc thnh phn ca mt ng dng Android: Mt ng dng Android gm 4 thnh phn chnh sau: Hot ng (Activity): mt ng dng c mt giao din ngi dng nhn thy c, s c thc hin bng mt Activity. Activity dng Views to nn giao din ha ngi dng, hin th thng tin v p li cc hnh ng ca ngi dng. Khi ngi dng chn mt ng dng t mn hnh ch hoc trnh khi chy ng dng th mt Activity c khi ng. Activity trong Android cng tng t nh mt Form trong cc ng dng desktop truyn thng.

Xy dng ng dng 3D vi Android 17 ______________________________________________________________________ Dch v (Services): cc service lm vic n di ng dng, c s dng thc hin cc x l thng thng khi cn v thm ch ngay c lc cc Activity khng hot ng hoc n i.Mt dch v nn c s dng i vi bt k ng dng no cn tn ti trong mt thi gian di, chng hn nh mt trnh gim st mng hoc ng dng kim tra cp nht. Trnh cung cp ni dung (Content Providers): c th coi nh l mt my ch c s d liu. Cng vic ca n l qun l truy cp v chia s d liu ang tn ti, chng hn nh mt c s d liu SQLite. N c th c cu hnh cho php cc ng dng khc truy xut v ngc li. Nu ng dng rt n gin th khng nht thit phi to ra mt trnh cung cp ni dung. Trnh thu pht (Broadcast Receivers): bng cch to v ng k mt Broadcast Receiver, ng dng Android c th lng nghe ton b cc Intent theo mt chun c th c ch nh. Cc Broadcast Receiver s chy ng dng mt cch t ng p ng mt Intent gi n, hay x l mt phn t d liu hoc p ng mt s kin, chng hn nh nhn mt vn bn thng bo. Vic tch ri s ph thuc gia cc thnh phn trong ng dng gip vic chia s cng nh trao i gia cc ng dng khc tr nn d dng hn. 1.4 Vng i ca ng dng Android: Khng ging nh cc ng dng trn cc nn tng khc, cc ng dng Android khng c mt iu khin n vng i ca chng. Thay vo , cc thnh phn ng dng phi lng nghe vic thay i trng thi bn trong ca ng dng v tc ng tr li mt cch hp l. Mi mt ng dng Android trong chnh tin trnh ca n, chy mt th hin ring bit ca Dalvik. Vic qun l b nh v tin trnh ca mi ng dng Android c iu khin mt cch ring trong lc runtime.

Xy dng ng dng 3D vi Android 18 ______________________________________________________________________ Android qun l ti nguyn mt cch cht ch, n s lm bt c vic g m bo cho thit b duy tr p ng. iu ny c ngha l cc tin trnh s b hy i m khng c mt cnh bo no nu cn gii phng ti nguyn cho cc ng dng c u tin cao. 1.5 Cc cng c to mt ng dng Android: bt u pht trin cc ng dng Android, chng ta cn c B cng c pht trin phn mm Android (SDK) v mi trng pht trin tch hp Eclipse (Eclipse IDE). Vic pht trin Android c th din ra trn Microsoft Window, Mac OS X hoc Linux. Trong tiu lun ny, nhm thc hin s pht trin ng dng Android bng Microsoft Window.

1.5.1 Eclipse IDE: Cc ng dng Android c vit bng ngn ng Java, nhng bin dch v thi hnh bng my o Dalvik. Vit m bng ngn ng Java trong Eclipse l rt trc quan. Eclipse cung cp mt mi trng Java phong ph, gm c vic tr gip theo ng cnh v cc mch nc gi v m. Khi b m Java c bin dch thnh cng, Android Developer Tools s m bo rng ng dng c ng gi mt cch ng n, gm c tp tin AndroidManifest.xml.

1.5.2 Android SDK: B cng c pht trin ng dng Android SDK l cng c gi lp thit b o trn my tnh pht trin ng dng vi cc hm API h tr cho nhng lp trnh vin lp trnh trn cc thit b di ng s dng nn tng Android thng qua ngn ng lp trnh Java. SDK gm c:

Xy dng ng dng 3D vi Android 19 ______________________________________________________________________ android.jar : tp tin lu tr Java cha ton b cc lp SDK Android cn thit xy dng ng dng. documention.html v th mc docs: ti liu SDK c cung cp ti ch v trn web, ch yu n dng JavaDocs, to iu kin d dng cho vic hng dn trong nhiu gi SDK. Ti liu cng gm c hng dn pht trin mc cao v cc lin kt n cng ng Android rng ri. Th mc sample (cc v d mu): th mc con samples cha b m ngun y dng cho mt lot cc ng dng, gm c ApiDemo, n s dng nhiu API. ng dng mu l mt ni khm ph tuyt vi khi bt u pht trin ng dng Android. Th mc tools (cc cng c): cha ton b cc cng c dng lnh xy dng nn cc ng dng Android. Cng c c dng ph bin v hu ch nht l tin ch adb (Android Debug Bridge). Usb_driver: th mc cha cc trnh iu khin cn thit kt ni mi trng pht trin vi mt thit b c kh nng chy Android, chng hn nh G1 hay in thoi c pht trin Android Dev 1. Cc tp tin ny l i hi duy nht i vi cc nh pht trin ang s dng nn Windows. 1.5.3 Ci t cng c: Chun b: o Phn mm Eclipse IDE (phin bn 3.2 tr ln), c th ti trc tip t trang web http://www.eclipse.org/downloads/ o B cng c Android SDK phin bn mi nht, ti thi im thc hin tiu lun ny l phin bn r11, c th ti t trang web http://developer.android.com/sdk/index.html

Xy dng ng dng 3D vi Android 20 ______________________________________________________________________ Bt u vic ci t: o Gii nn chng trnh Eclipse vo mt th mc no (v d: D:\eclipse\) o Gii nn b Android SDK vo mt th mc bt k (v d: D:\Android_SDK_r11\) o Chy chng trnh Eclipse. o Vo menu Help Software Updates o Chn tab Available Software o Chn Add Site, nhp vo ng dn sau: http://dl-ssl.google.com/android/eclipse/ o Chn OK. o Ch cho chng trnh c ci t. o Sau khi ci xong, tip tc vo menu Window Preferences o Chn tab Android, ch ng dn n th mc gii nn Android SDK trn ( y l D:\Android_SDK_r11\). o Hon tt. Lu : Cch ci t trn i hi my tnh phi c ni mng Internet. 1.6 Thit b Android o (Android Virtual Device - AVD): Cc ng dng Android c th c chy trn mt thit b tht s hoc trn trnh m phng Android (Android Emulator) km vi SDK Android. T phin bn SDK 1.5, Google gii thiu khi nim v thit b Android o. Mt thit b Android o ch n gin l mt tp cc thuc tnh cu hnh c p dng cho hnh nh ca mt thit b m phng hin th ng dng ln n. Cch to mt thit b Android o nh sau: - Trong Eclipse window Android SDK and AVD manager.

Xy dng ng dng 3D vi Android 21 ______________________________________________________________________ - ca s mi hin ra, chn mc Virtual devices bm nt New, hin ra mt ca s mi nh hnh sau y:

Hnh 3 To mt AVD - Mc Name: t tn cho thit b, tn g cng c, ct l d nh v phn bit, khng cha khon trng v cc k t c bit. - Mc Target: chn phin bn h iu hnh Android. - Mc SD Card: in kch thc b nh ca thit b hoc ly mt file SD Card c sn. - Nhn nt Create AVD.

Xy dng ng dng 3D vi Android 22 ______________________________________________________________________

Hnh 4 Trnh m phng thit b Android. 1.7 Android project: 1.7.1 To mt Android project mi: - Trong Eclipse, chn File New Android Project. - Mt ca s mi hin ra, in cc thng tin tng ng vo ca s. - Project name: tn project. - Chn phin bn Android. - Application name: tn ng dng.

Xy dng ng dng 3D vi Android 23 ______________________________________________________________________ - Package name: tn gi. - Create activity: tn hot ng. - Min SDK Version: API Level tng ng vi phin bn Android. - Nhn nt Finish.

Hnh 5 To mt Android project

Xy dng ng dng 3D vi Android 24 ______________________________________________________________________ 1.7.2 Cu trc mt project: Mt Android project gm cc th mc sau: Th mc src cha source code ng dng. Gm cc package v cc class. Th mc gen cha cc file t ng pht sinh (m thng gp nht l R.class). Th mc res cha cc resource dng trong ng dng (thng qua ID). Th mc assets cha cc resource file m ng dng cn dng (di dng file). File Manifest l file khai bo thng tin v ng vi h thng (nh ng dng gm nhng mn hnh no, c service no xin cc quyn g, phin bn bao nhiu, dng t SDK phin bn no). File th vin.

Xy dng ng dng 3D vi Android 25 ______________________________________________________________________

Chng 2: Cc thnh phn c bn ca mt ng dng trn Android

2.1 Hot ng(Activity): Mi mt Activity i din cho mt mn hnh. Cc ng dng phc tp c th c nhiu hn mt Activity. Cn to mt Activity cho mi mn hnh cn hin th. C th l t nht mt mn hnh chnh iu khin cc chc nng ca ng dng, cc activity khc nhm mc ch nhp thng tin, cung cp cc khung nhn khc nhau trn d liu hoc h tr cc chc nng khc. Hu ht cc Activity c thit k chim gi ton b mn hnh, tuy nhin c th to cc Activity c mt na trong sut, cc Activity ni, hoc cc dialog.

2.1.1 To mt Activity: to mt Activity mi, cn tha k t lp Activity, s dng cc View cung cp cc tng tc vi ngi dng, khai bo cc thnh phn giao din v thc thi cc chc nng ca ng dng.

package com.paad.myapplication; import android.app.Activity; import android.os.Bundle; public class MyActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); } }

Xy dng ng dng 3D vi Android 26 ______________________________________________________________________ Mt lp Activity c bn a ra mt mn hnh rng cha ca s hin th. V vy vic cn thc hin u tin l khai bo b cc cho n bng cch s dng cc View v layout. Activity UI c to thnh bi cc View. View l cc iu khin giao din ngi dng, hin th d liu v cung cp tng tc n ngi dng. gn mt giao din cho mt Activity, s dng phng thc setContentView trong lp Activity c k tha. @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); MyView myView = new MyView(this); setContentView(myView); } C 2 cch thit lp giao din cho Activity: bng code hoc thng qua file nh ngha layout . trn l cch to giao din bng code, sau y l cch to giao din ngi thng qua layout, truyn tham s vo cho phng thc setContentView l mt resource ID @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); } dng mt Activity cn khai bo bn trong file manifest. Thm vo mt th activity mi bn trong nt application. Th activity ny bao gm cc thuc tnh cho siu d liu (label, icon,). Mt Activity m khng c khai bo mt th activity tng ng s khng c khi chy.

Xy dng ng dng 3D vi Android 27 ______________________________________________________________________ V d sau m t cch lm th no khai bo Activity c to phn trn: 2.1.2 Vng i ca Activity:

Hnh 6 Vng i ca Activity

Xy dng ng dng 3D vi Android 28 ______________________________________________________________________ 2.1.3 Khi ng mt Activity: khi ng mt Activity, chng ta dng Intent: o Khai bo tng minh: cung cp chnh xc thng tin ca activity cn gi (nu cng ng dng ch cn cung cp tn class, nu ng dng khc nhau th cung cp tn package, tn class). V d: on code bn di s khi ng activity tn l TargetActivity.

Intent intent = new Intent(getApplicationContext(),TargetActivity.class); startActivity(intent); o Khai bo khng tng minh: cung cp thao tc cn lm g, vi loi d liu no, thao tc thuc nhm no h thng s tm activity tng ng khi ng. V d: on code bn di s khi ng mt activity no ng c kh nng xem nh.

Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivity(intent); Vi cch khi ng activity khng tng minh, chng ta cn phi bit mt cht v Intent-filter. Intent-filter s gip mt activity ng k vi h thng mnh c th lm c thao tc g, trong nhm no, vi loi d liu no. Nh vy khi intent v intentfilter khp nhau, activity s c h thng khi ng. 2.1.4 Lin lc gia 2 activity: C th khi ng mt activity vi mt yu cu no v activity kia khi lm xong cng vic s tr li kt qu cho activity trc. V d activity A yu cu mt

Xy dng ng dng 3D vi Android 29 ______________________________________________________________________ activity lm gip vic chp nh, activity B p ng c vic ny, sau khi user chp nh xong s tr li file nh cho activity A. lin lc 2 activity chng ta lm nhu sau: Khi khi ng mt activity, ta c th gi km d liu trong intent nh v d sau: intent.putExtra("value1", new String("Hello")); intent.putExtra(value2", new Long(100)); Bn pha activity c khi ng, c th ly d liu c gi nh sau: getIntent().getExtras().getString("value1"); getIntent().getExtras().getLong("value2");

2.2 Trnh thu pht (BroadcastReceiver): BroadcastReceiver l mt trong bn loi thnh phn trong ng dng Android. Chc nng ca n l dng nhn cc s kin m cc ng dng hoc h thng pht i. C 2 cch pht-nhn l: Khng c th t: receiver no iu kin th nhn ht, khng phn bit v chng tch ri nhau. C th t: receiver no ng k u tin hn th nhn trc, v c th truyn thm thng tin x l cho cc receiver sau. 2.2.1 Chu k sng: BroadcastReceiver ch c duy nht mt phng thc onReceive(). Khi c s kin m BroadcastReceiver ng k nhn c pht i, th phng thc onReceive() ca BroadcastReceiver s c gi. Sau khi thc thi xong phng thc ny, vng i ca BroadcastReceiver kt thc.

Xy dng ng dng 3D vi Android 30 ______________________________________________________________________ Lu khi s dng: Ngay khi onReceive() kt thc, h thng coi nh receiver khng cn hot ng v c th gii phng tin trnh cha receiver ny bt c lc no. Trnh x l cc code qu lu trong onReceive(). Khng c x l bt ng b, ch callback trong Receiver (c th nh hin th Dialog, kt ni service) 2.2.2 Mt s broadcast thng dng: o Bo h thng khi ng xong. o Bo pin c s thay i. o Bo c package mi ci vo hoc xa i. o Bo tt my. o Bo cm sc, rt sc. o Thng bo tin nhn ti. o Thng bo cm, rt th nh. o Thng bo c cuc gi i. o Broadcast do ngi pht trin ng dng t nh ngha (gip lin lc hoc thng bo mt s kin gia cc ng dng).

2.2.3 Hm onReceive(): Phng thc ny c gi khi c s kin tng ng c pht i. trong phng thc ny, ta truyn vo context (ng cnh) v intent (ni nhn). o context: v lp Receiver khng k tha t lp Context nn cn truyn context m receiver ny ang chy vo. Th nht l c th x l cc phng thc yu cu truyn thm Context, th hai l s dng cc phng thc ca lp Context.

Xy dng ng dng 3D vi Android 31 ______________________________________________________________________ o intent: intent c truyn vo s c y thng tin nh s kin no m receiver ny ng k xy ra dn n onReceive() c gi, c gi km thng tin g hoc d liu g hay khng. Xem cc api: Intent.getAction(); Intent.getExtra(String dataName);

2.3 Dch v (Service): Service l mt trong 4 loi thnh phn ca mt ng dng Android. Service chy nn v khng tng tc trc tip vi ngi dng. S dng Service : Dng trong cc ng dng nghe nhc. Dng x l cc thao tc mt thi gian v khng nht thit phi hin th ln activity (download, upload). i khi cn mt ng dng vn hnh lin tc x l nhng vic mong mun m khng lm phin ngi dng. Lm nhng thao tc tnh ton, x l u n no v kt qu khi no ngi dng cn th mi xem. 2.3.1 To ra mt Service: to ra mt Service, ta to ra mt class mi k tha lp Service v override cc phng thc onStart(),onCreate() v onBind().

import android.app.Service; import android.content.Intent; import android.os.IBinder; public class MyService extends Service {

@Override

Xy dng ng dng 3D vi Android 32 ______________________________________________________________________ public void onStart(Intent intent, int startId) { // TODO: Actions to perform when service is started. }

@Override public void onCreate() { // TODO: Actions to perform when service is created. }

@Override public IBinder onBind(Intent intent) { // TODO: Replace with service binding implementation. return null; } } bt u mt Service, s dng phng thc startService. Nu Service yu cu quyn truy cp khng tn ti trong ng dng th mt ngoi l SecurityException s c a ra. C 2 cch bt u mt Service mi. + Cch 1: khi ng ngm. V d: startService(new Intent(MyService.MY_ACTION)); + Cch 2: khi ng tng minh. V d: startService(new Intent(this, MyService.class)); dng mt Serivce, s dng phng thc stopService, truyn vo Intent xc nh Service cn ngng hot ng. V d:

ComponentName service = startService(new Intent(this, BaseballWatch.class)); // ngng dch v bng cch xc nh tn dch v

Xy dng ng dng 3D vi Android 33 ______________________________________________________________________ stopService(new Intent(this, service.getClass())); // ngng dch v bng cch tng minh try { Class serviceClass = Class.forName(service.getClassName()); stopService(new Intent(this, serviceClass)); } catch (ClassNotFoundException e) {} 2.3.2 Vng i ca Services:

Hnh 7 Vng i ca service

o Khi c mt context no gi startService() khi ng mt dch v mong mun. Nu dch v cha c to th s gi onCreate() ri gi tip onStart() v khi dch v chy nn bn di.

Xy dng ng dng 3D vi Android 34 ______________________________________________________________________ o Nu sau li c mt context mun khi ng dch v ny m dch v ang chy th ch c phng thc onStart() ca dch v c gi. o D dch v c c gi khi ng bao nhiu ln th cng ch c th hin ca dch v v ch cn gi stopService() mt ln kt thc dch v. 2.3.3 Kt ni dch v: Khi mt Activity c kt ni ti mt Service, n duy tr mt tham chiu n mt thc th Service. kt ni n thc th ny, thc thi phng thc onBind nh sau: private final IBinder binder = new MyBinder(); @Override public IBinder onBind(Intent intent) { return binder; } ------------public class MyBinder extends Binder { MyService getService() { return MyService.this; } } S kt ni gia Service v Acitvity c th hin qua mt ServiceConnection. iu cn lm l thc thi mt ServiceConnection mi, override phng thc onServiceConnected v onServiceDisconnected. // tham chiu n dch v private MyService serviceBinder;

Xy dng ng dng 3D vi Android 35 ______________________________________________________________________ // x l kt ni gia service v activity private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { // c gi khi lin kt c thc hin serviceBinder = ((MyService.MyBinder)service).getService(); } public void onServiceDisconnected(ComponentName className) { // nhn khi dch v ngt kt ni mt cch bt ng serviceBinder = null; } thc hin vic kt ni, gi phng thc bindService: @Override public void onCreate(Bundle icicle) { super.onCreate(icicle);

// kt ni dch v Intent bindIntent = new Intent(MyActivity.this, MyService.class);

bindService(bindIntent, mConnection, Context.BIND_AUTO_CREATE); }

Hot ng ca bindService(): kt ni dch v

Xy dng ng dng 3D vi Android 36 ______________________________________________________________________

Hnh 8 Hot ng kt ni dch v Thng thng, vng i ca dch v khi c client kt ni t u nh sau: o Cng bt u bng onCreate() ri n onBind() v dch v chy di nn. o Khi khng cn client kt ni ti th dch v gi onUnbind() ri onDestroy(). C mt s trng hp khng thng thng, v d nh: o C mt context khi ng mt dch v, sau c mt s client kt ni (bind) ti service. o C nhiu client cng lc kt ni ti dch v. o Mt activity va gi startService() va gi bindService().

Xy dng ng dng 3D vi Android 37 ______________________________________________________________________ 2.4 Trnh cung cp ni dung (Content Providers): 2.4.1 Gii thiu: C th coi trnh cung cp ni dung nh l mt my ch c s d liu. Cng vic ca n l qun l truy cp v chia s d liu ang tn ti, chng hn nh mt c s d liu SQLite. N c th c cu hnh cho php cc ng dng khc truy xut v ngc li. Nu ng dng rt n gin th khng nht thit phi to ra mt trnh cung cp ni dung. Content Provider gip tch bit tng ng dng ra khi tng d liu. N c y cc quyn iu khin v c truy xut thng qua m hnh URI n gin nh l c th thm, xa, cp nht d liu ca cc ng dng.

2.4.2 To mt Content Provider mi: 2.4.2.1 To Content Provider: to mt Content Provider cn tha k li t lp tru tng ContentProvide, override li phng thc onCreate. import android.content.*; import android.database.Cursor; import android.net.Uri; import android.database.SQLException; public class MyProvider extends ContentProvider { @Override public boolean onCreate() { // TODO: Construct the underlying database. return true; } }

Xy dng ng dng 3D vi Android 38 ______________________________________________________________________

Nn cung cp mt bin static CONTENT_URI tr v mt URI ca provider ny. Content URI phi l duy nht gia cc provider, v th nn da vo tn package xc nh URI, hnh thc chung cho vic nh ngha mt Content Provider URI l: content://com..provider./

V d: content://com.paad.provider.myapp/items Content URI c th 2 dng th hin. V d trn l URI dng request tt c cc gi tr. Vic thm vo cui /, s request mt record n. content://com.paad.provider.myapp/items/5 Cc n gin nht lm

vic ny l s dng URIMatcher. Cu hnh

UriMatcher phn tch hnh thc ca n khi provider ang c truy xut n thng qua mt Content Resolver. Xt v d sau:

public class MyProvider extends ContentProvider { private static final String myURI = content://com.paad.provider.myapp/items; public static final Uri CONTENT_URI = Uri.parse(myURI); @Override public boolean onCreate() { // TODO: Construct the underlying database. return true; }

Xy dng ng dng 3D vi Android 39 ______________________________________________________________________ // to cc hng s c dng phn bit cc yu cu URI khc nhau private static final int ALLROWS = 1; private static final int SINGLE_ROW = 2;

private static final UriMatcher uriMatcher; // thng thng i tng UriMatcher, ni m mt URI kt thc bng items s // tng ng vi mt yu cu tt c item, v items/[rowID] s tng ng vi mt // hng n static { uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(com.paad.provider.myApp, items, ALLROWS); uriMatcher.addURI(com.paad.provider.myApp, items/#, SINGLE_ROW); } } 2.4.2.2 a ra truy xut Data Source: C th cung cp cc truy vn v thc thi vi Content Provdier bng cch thc hin cc phng thc delete, insert, update v query. Cc phng thc ny hot ng nh cc giao tip chung n ngun d liu bn di, chng cho php cc ng Android chia s d liu vi nhau m khng phi to mt giao tip ring cho mi ng dng. V d: mt i tng UriMatcher c s dng lc cc thc thi v cc cu truy vn. @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sort) {

Xy dng ng dng 3D vi Android 40 ______________________________________________________________________

// nu l truy vn 1 hng th hn ch kt qu switch (uriMatcher.match(uri)) { case SINGLE_ROW : // TODO: Modify selection based on row id, where: // rowNumber = uri.getPathSegments().get(1)); } return null; }

@Override public Uri insert(Uri _uri, ContentValues _initialValues) { long rowID = [ ... Add a new item ... ]

// tr v URI ca item va insert if (rowID > 0) { return ContentUris.withAppendedId(CONTENT_URI, rowID); } throw new SQLException(Failed to add new item into + _uri); }

@Override public int delete(Uri uri, String where, String[] whereArgs) { switch (uriMatcher.match(uri)) { case ALLROWS: case SINGLE_ROW: default: throw new IllegalArgumentException(Unsupported

Xy dng ng dng 3D vi Android 41 ______________________________________________________________________ URI: + uri); } } @Override public int update(Uri uri, ContentValues values, String where, String[] whereArgs) { switch (uriMatcher.match(uri)) { case ALLROWS: case SINGLE_ROW: default: URI: + uri); } } Bc cui cng trong qu trnh to mt Content Provider l nh ngha kiu MIME l kiu d liu m Provider tr v, override phng thc getType tr v mt kiu String m t cho kiu d liu. Kiu tr v bao gm c 2 hnh thc: trng n v tt c d liu. Trng n vnd..cursor.item/ Tt c vnd..cursor.dir/ throw new IllegalArgumentException(Unsupported

V d: @Override

Xy dng ng dng 3D vi Android 42 ______________________________________________________________________ public String getType(Uri _uri) { switch (uriMatcher.match(_uri)) { case ALLROWS: return vnd.paad.cursor.dir/myprovidercontent; case SINGLE_ROW: return vnd.paad.cursor.item/myprovidercontent; default: throw new IllegalArgumentException(Unsupported URI: + _uri); } } 2.4.2.3 ng k Provider: Thm Content Provider va to vo trong manifest.xml. S dng th authorities ch nh a ch ca n:

2.4.3 Truy vn, thm, cp nht v xa ni dung trong Content Provide: Content Provider c truy xut thng qua lp Content Resolver. Mi mt Context ca ng dng c mt i tng ContentResolver, c th c truy xut thng qua phng thc getContentResolver. ContentResolver cr = getContentResolver();

Xy dng ng dng 3D vi Android 43 ______________________________________________________________________ Content Resolver bao gm mt vi phng thc thc thi v truy vn n Content Providers. Mt URI dng ch nh Content Provider no c cung cp bi cc quyn c nh ngha trong manifest ca ng dng. URI l mt chui ty , v th hu ht cc provider u a ra thuc tnh CONTENT_URI. Content Provider thng a ra 2 hnh thc URI, mt l a tt c cc d liu c yu cu trn cng mt dng n l, hoc l thm vo / vo pha sau CONTENT_URI.

2.4.3.1 Truy vn: Vic truy vn trn Content Provider c hnh thc tng t nh khi truy vn trong database, dng phng thc query ca i tng ContentResolver vi cc tham s truyn vo gm: Mt URI ca Content Provider mun truy vn. Mt nh x i din cho cc ct mun cha trong tp kt qu. Mt mnh where ch nh cc dng no c tr v. C th a vo k t i din ? v s c thay th bi cc gi tr c lu bn trong cc tham s c chn. Mt mng cc i s kiu String thay th cho cc k t i din ? trong mnh where Mt chui m t th t cc dng tr v. V d: // tr v tt c cc dng Cursor allRows = getContentResolver().query(MyProvider.CONTENT_URI, null, null, null, null); // tr v tt c cc ct ca cc hng c ct 3 bng vi gi tr thit t v sp xp // theo gi tr ca ct 5 String where = KEY_COL3 + = + requiredValue;

Xy dng ng dng 3D vi Android 44 ______________________________________________________________________ String order = KEY_COL5; Cursor someRows = getContentResolver().query(MyProvider.CONTENT_URI, null, where, null, order);

2.4.3.2 Thm: Content Resolver cung cp 2 phng thc chn mt record mi vo trong Content Provider, l insert v bulkInsert. Phng thc insert tr v mt URI n record mi c thm vo, trong khi bulkInsert tr v s thnh phn thm vo thnh cng. on code sau m t cch s dng 2 phng thc trn: // to mt dng mi cho cc gi tr mun chn. ContentValues newValues = new ContentValues();

// gn gi tr cho mi hng newValues.put(COLUMN_NAME, newValue); [ ... lp li cho mi ct ... ] Uri myRowUri = getContentResolver().insert(MyProvider.CONTENT_URI, newValues);

// to mt dng mi cho cc gi tr mun chn. ContentValues[] valueArray = new ContentValues[5];

// to mt mng cc dng mi v tr v s thnh phn thm thnh cng int count = getContentResolver().bulkInsert(MyProvider.CONTENT_URI, valueArray);

Xy dng ng dng 3D vi Android 45 ______________________________________________________________________ 2.4.3.3 Xa: xa mt record khi s dng Content Resolver, s dng phng thc delete, truyn vo URI cho dng mun xa. ng thi, cng c th dng mnh iu kin where xa nhiu dng. V d: // xa mt dng c ch nh getContentResolver().delete(myRowUri, null, null); // xa 5 dng u tin. String where = _id < 5; getContentResolver().delete(MyProvider.CONTENT_URI, where, null)

2.4.3.4 Cp nht: Vic cp nht cho mt Content Provider c iu khin bi phng thc update ca Content Resolver. Phng thc update nhn URI ca Content Provider ch, mt i tng ContentValues cha tp gi tr c nh x n cc ct cn cp nht, v mt mnh where ch nh dng no c cp nht. Khi thc thi, mi dng ph hp vi iu kin trong mnh where s c cp nht v tr v s dng c cp nht gi tr thnh cng. V d: // to mt dng mi cho cc gi tr mun chn. ContentValues newValues = new ContentValues(); // to nh x thay th cc ct mun cp nht v nhng gi tr g gn cho mi ct newValues.put(COLUMN_NAME, newValue); // p dng cho 5 hng u tin String where = _id < 5;

Xy dng ng dng 3D vi Android 46 ______________________________________________________________________ getContentResolver().update(MyProvider.CONTENT_URI, newValues, where, null);

2.4.4 Native Android Content Provider: Android a ra nhiu Content Provider h tr truy xut n cc ng dng native. C th dng mt trong cc Content Provider native ny s dng cc k thut c m t trn. Nh mt s thay th, gi android.provider cha cc lp thun tin truy xut mt cch n gin n nhiu provider bao gm: Browser: Dng browser Content Provider c v iu chnh bookmarks, browser history, hoc web searches. CallLog: Hin th hoc cp nht cc cuc gi (cuc gi n, cuc gi i, cc cuc gi nh, v chi tit cuc gi. Contacts: dng rt trch, chnh sa, hoc lu tr chi tit danh b. MediaStore: cung cp s kim sot, qun l truy xut a phng tin trn thit b (audio, video, v hnh nh). Settings: Truy xut n cc thit lp ci c ca thit b, Settings cho php hin th v iu chnh cc thit lp Bluetooth, ring tone v nhiu ci t khc. Nn s dng cc Content Providers native ny bt c khi no c th, bi v khi s dng chng s bo m cho ng dng c kt hp vi cc ng dng native hoc third-party khc mt cch lin tc.

2.4.4.1 Media Store Provider: Android Media Store cung cp mt kho lu tr cc tp tin audio, video, v hnh nh. Mi khi thm mt tp tin a phng tin no vo Android filesystem, n s c thm vo Media Store cho cc ng dng khc nhn thy n.

Xy dng ng dng 3D vi Android 47 ______________________________________________________________________ Mt lp MediaStore bao gm mt s cc phng thc tin li thm cc tp tin vo Media Store mt cch n gin. V d sau y s m t vic thm vo mt tp tin hnh nh vo trong Media Store. android.provider.MediaStore.Images.Media.insertImage( getContentResolver(), sourceBitmap, my_cat_pic, Photo of my cat!);

2.4.4.2 Contacts Provider: Contact Provider thc s rt cn thit trn thic b giao tip a ra tt c cc thng tin c th t c s d liu n bt k ng dng no c quyn READ_CONTACTS. Trong v d sau y, mt Activity nhn mt Cursor n mi ngi trong c s d liu contact, to mt mng kiu String vi mi thnh phn cha tn ngi v s in thoi ca ngi . // ly mt con tr ca mi lin h Cursor cursor = getContentResolver().query(People.CONTENT_URI, null, null, null, null); // qun l vng i con tr. startManagingCursor(cursor); // cc thuc tnh ly ch s ct int nameIdx = cursor.getColumnIndexOrThrow(People.NAME); int phoneIdx = cursor. getColumnIndexOrThrow(People.NUMBER); String[] result = new String[cursor.getCount()]; if (cursor.moveToFirst()) do { // trch xut tn String name = cursor.getString(nameIdx);

Xy dng ng dng 3D vi Android 48 ______________________________________________________________________ // trch xut s in thoi String phone = cursor.getString(phoneIdx); result[cursor.getPosition()] = name + ( + phone + ); } while(cursor.moveToNext());

Xy dng ng dng 3D vi Android 49 ______________________________________________________________________

Chng 3: Thit k giao din3.1 Mt s lp h tr thit k giao din cho ng dng Android: Android cung cp mt s cng c thit k giao din: Views: l lp UI c bn cho cc control giao din. Tt c cc control giao din ngi dng, cc lp layout u c dn xut t lp Views. ViewGroups: c m rng t lp View v c th cha nhiu Views. ViewGroups cng c k tha cung cp cc lp qun l b cc nh LinearLayout. ViewGroup c dng xy dng nn cc component c th dng li (widget) hoc qun l b cc cho cc control. Activity: dng hin th giao din ngi dng. Lp ny do ngi pht trin ng dng vit.

Hnh 9 - Quan h gia cc thnh phn trn

3.2 Android Widget Toolbox: Android cung cp mt b cng c cc View chun to cc giao din ngi dng n gin, gip n gin ha vic pht trin v to s ng nht gia cc ng dng.

Xy dng ng dng 3D vi Android 50 ______________________________________________________________________ Cc control thng dng: TextView: l mt label ch c tc dng hin th vn bn, n h tr hin th nhiu dng, nh dng chui. EditText: l mt vng nhp vn bn c th chnh sa, h tr nhp nhiu dng. ListView: to v qun l mt nhm cc View hin th mt danh sch cc phn t. Mt ListView chun dng hin th chui gi tr ca mt mng cc TextView. Spinner: l mt control kt hp, hin th mt TextView v mt ListView kt hp dng chn mt item t danh sch. N c to thnh t mt TextView cha gi tr hin ti ang c chn kt hp vi mt nt m khi nhn vo s a ra mt danh sch la chn. Button CheckBox RadioButton Andoid cng h tr nhiu View cao cp hn nh: date-time picker, autocomplete input box, map, gallery, v tab sheet. 3.3 Cc kiu Layout: LayoutManager (thng gi l layout) l m rng ca lp ViewGroup, c thit k iu chnh v tr ca cc control trn mn hnh ng dng. Layout c th lng nhau to nn cc giao din phc tp. Android c mt s cc layout n gin gip xy dng UI. to nn mt b cc hp l th nn kt hp cc layout vi nhau. Cc lp layout c bn: FrameLayout: l layout n gin nht trong Layout Manager, FrameLayout t mi View con vo gc tri trn ca mn hnh. Vic thm nhiu control s chng mt ci mi ln trn ci trc .

Xy dng ng dng 3D vi Android 51 ______________________________________________________________________ LinearLayout: thm mi View theo mt ng thng, theo chiu dc hoc ngang. Mt layout theo chiu dc s c mt control trn mt dng, layout theo chiu ngang ch c mt dng cho nhiu View. N cho php ch nh gi tr weight cho mi View con iu chnh kch thc bn trong khng gian cho php. RelativeLayout: dng nh v tr cho cc View cn xng vi cc control khc cng nh vi ng bin ca mn hnh. TableLayout: gip b tr cc View theo mt li c cc dng v cc ct. Cc ct c th c thit lp co li hoc gin ra. AbsoluteLayout: trong layout ny, v tr mi View s l ta tuyt i, m bo b cc chnh xc cho cc thnh phn. Do , khng th c c s linh hot i vi cc mn hnh c kch thc khc nhau. S dng Layout s dng layout ngi ta thng dng phng php l s dng resource bn ngoi t file XML. Mt layout XML phi cha mt nt gc. Nt gc ny c th cha cc layout v cc View lng nhau xy dng nn cc giao din phc tp.

Hnh 10 - H thng cc view vi cc thng s layout c kt ni vi mi view

Xy dng ng dng 3D vi Android 52 ______________________________________________________________________

V d: File XML sau m t mt layout n gin bao gm mt TextView trn v mt EditText s dng LinearLayout b tr theo chiu ng:

Tuy nhin, cng c th to cc layout bng code. V d: LinearLayout ll = new LinearLayout(this); ll.setOrientation(LinearLayout.VERTICAL);

TextView myTextView = new TextView(this); EditText myEditText = new EditText(this); myTextView.setText(Enter Text Below);

Xy dng ng dng 3D vi Android 53 ______________________________________________________________________ myEditText.setText(Text Goes Here!);

int lHeight = LinearLayout.LayoutParams.FILL_PARENT; int lWidth = LinearLayout.LayoutParams.WRAP_CONTENT;

ll.addView(myTextView, new LinearLayout.LayoutParams(lHeight, lWidth)); ll.addView(myEditText, new LinearLayout.LayoutParams(lHeight, lWidth));

setContentView(ll);

3.4 To cc View: 3.4.1 Chnh sa cc View c sn: Chnh sa hoc k tha mt control sn c nu n cung cp cc chc nng cn thit, bng cch ghi cc handler v onDraw ca n. nh ngha li giao din cng nh cc ng x ca control mi to, cn phi ghi v tha k cc iu khin s kin (event handler) kt hp vi cc hnh vi mun thay i. V d: tinh chnh mt TextView hin th mt tp cc s h thp phn.

public class MyTextView extends TextView { public MyTextView (Context context, AttributeSet ats, int defStyle) { super(context, ats, defStyle); }

public MyTextView (Context context) { super(context); }

Xy dng ng dng 3D vi Android 54 ______________________________________________________________________

public MyTextView (Context context, AttributeSet attrs) { super(context, attrs); } @Override public void onDraw(Canvas canvas) { [ ... v trn canvas bn di text ... ] super.onDraw(canvas); [ ... v trn canvas bn trn text ... ] }

@Override public boolean onKeyDown(int keyCode, KeyEvent keyEvent) { [ ... thc hin mt x l khi bm 1 phm c th... ] // s dng cc chc nng hin c bi lp co s p ng s kin // nhn phm return super.onKeyDown(keyCode, keyEvent); } }

3.4.2 To cc iu khin ghp (compound control): Compound control l cc widget c th ti s dng, n cha nhiu control c b tr v c lin h vi nhau, n c to t nhiu control c bn. V d nh to nn mt dropdown combo box bng cch kt hp mt TextView v mt Button m khi c nhn s hin th mt ListView.

Xy dng ng dng 3D vi Android 55 ______________________________________________________________________ Khi to mt compound control cn nh ngha layout, hnh thc v cch thc tc ng ln nhau gia cc View m n cha. Compound control c to thnh t vic dn xut t lp ViewGroup. to mt compound control mi, chn mt lp layout ph hp nht xc nh v tr cho cc control, v dn xut t n: public class MyCompoundView extends LinearLayout { public MyCompoundView(Context context) { super(context); } public MyCompoundView(Context context, AttributeSet attrs) { super(context, attrs); } } Cch c a chung hn thit k giao din cho mt compound control l s dng layout resource. V d: to mt widget n gin gm mt EditText v mt Button:

Xy dng ng dng 3D vi Android 56 ______________________________________________________________________ dng c layout ny cho widget mi cn phi nh ngha li contructor ca n s dng phng thc inflate t dch v LayoutInflate. Phng thc inflate nhn tham s l layout resource v tr v mt View. Mt khi xy dng c giao din cho control, iu tip theo l nh ngha iu khin s kin cho mi control con trong n.

3.4.3 To cc Control ty chnh: Ngi pht trin c th to ra cc control theo ca mnh to c mt giao din mang tnh duy nht ph hp vi yu cu ca ngi dng. Cc control mi cn phi c tha k t lp View hoc SurfaceView. Lp View cung cp mt i tng Canvas v mt s phng thc v cng nh cc lp Paint, to mt giao din trc quan. Ngi thit k c th nh ngha li cc s kin ngi dng nh cm ng trn mn hnh, nhn phm to nn s tng tc. Trong nhng trng hp m khng i hi vic v li cng nh ha 3D th lp c s View c gii php hiu qu. Trong khi , lp SurfaceView cung cp mt i tng canvas h tr vic v t mt lung x l nn v s dng openGL cho ha 3D. y l mt la chn tuyt vi

Xy dng ng dng 3D vi Android 57 ______________________________________________________________________ cho cc iu khin i hi ha cao, cn phi cp nht lin tc hoc hin th cc ha phc tp, nh game 3D.

3.5 To giao din Activity vi cc View: Mt Activity khi cha thit k s khi ng vi mt mn hnh rng. thit lp giao din cho mn hnh rng ny cn gi phng thc setContentView khi everride li phng thc onCreate. Phng thc setContentView c th nhn mt tham s l resource ID hoc mt th hin ca View. Do , c th nh ngha giao din ng dng bng code hoc tham chiu n resource (layout). Nu dng layout resource th s tch ring vic thit k giao din v phn code x l, cung cp mt kh nng thay i linh hot giao din m khng thay i code bn trong. V d: phng thc findViewById tham chiu n cc View c nh ngha trong mt resource layout main.xml nm trong th mc res/layout ca project: @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); TextView myTextView = (TextView)findViewById(R.id.myTextView); } Hoc c th nh ngha UI bng code: @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); TextView myTextView = new TextView(this);

Xy dng ng dng 3D vi Android 58 ______________________________________________________________________ setContentView(myTextView); myTextView.setText(Hello, Android); }

3.6 Menu: 3.6.1 Menu trong Android: Menu a ra mt gii php tng tnh tin dng ca ng dng m khng chim dng khng gian trn mn hnh. Mi mt Activity c ring cho n mt menu, c hin th khi ngi dng nhn nt Menu. Android cng h tr menu ng cnh, n c gn vo bt k View no bn trong mt Activity. Mt menu ng cnh c hin th khi ngi dng nhn nt D-pad, trackball, hoc nhn vo mn hnh cm ng khong 3 giy. menu ng cnh h tr submenu, checkbox, radio button, shortcut key, v icon. Cc loi menu trong android: Icon Menu: c kt vi menu, xut hin phn di ca mn hnh thit b khi nt Menu c nhn. N hin th icon v text cho cc menu item hoc cc submenu. Icon menu h tr to ti a 6 menu item, v cc menu item ny khng th hin th checkbox, radio button, hay shortcut key.

Hnh 11 Icon menu Expanded Menu: hin th khi ngi dng chn More trong menu icon. Expand Menu hin th mt danh sch c th cun c cc menu item, v cc menu item ny

Xy dng ng dng 3D vi Android 59 ______________________________________________________________________ khng th cha cc icon m ch c th cha text, shortcut key v checkbox/ radio button.

Hnh 12 Expanded menu Submenu: mi submenu hin th bng mt ca s, tn ca submenu c hin th thanh header v mi Menu item c hin th vi y text, checkbox, shortcut key v khng th hin th icon cho cc item. Android khng h tr cc submenu lng nhau, v khng th thm mt submenu vo mt submenu.

Hnh 13 - Submenu

Xy dng ng dng 3D vi Android 60 ______________________________________________________________________ 3.6.2 Cc kiu Menu Item Android h tr hu ht cc kiu menu item truyn thng, bao gm icon, shortcut, checkbox, radio button: Checkbox v Radio button group: thit lp mt menu item l checkbox s dng phng thc setCheckable, thit lp trng thi ca checkbox dng setChecked. Mt radio button group l mt nhm cc radio button v ch c mt trong s chng c chn ti mt thi im. to mt radio button group, gn cng ID nhm cho mi item, sau gi phng thc Menu.setGroupCheckable, truyn vo ID nhm, v thit lp gi tr cho cc tham s khc l True. // to checkbox. menu.add(0, CheckBox).setCheckable(true); // to radio button group. menu.add(RB_GROUP, RADIOBUTTON_1, Menu.NONE, Radiobutton 1); menu.add(RB_GROUP, RADIOBUTTON_2, Menu.NONE, Radiobutton 2); menu.add(RB_GROUP, RADIOBUTTON_3, Menu.NONE, Radiobutton 3).setChecked(true); menu.setGroupCheckable(RB_GROUP, true, true); Shorcut Key: ch nh mt keypad shortcut cho mt Menu Item s dng phng thc setShortcut. Phng thc ny yu cu truyn vo 2 tham s, mt l phm s v mt l bn phm y . menuItem.setShortcut(0, b); Condensed Title: dng mt text hin th menu. menuItem.setTitleCondensed(Short Title); Icon: biu tng ch c hin th trn Icon Menu CHECKBOX_ITEM, Menu.NONE,

Xy dng ng dng 3D vi Android 61 ______________________________________________________________________ menuItem.setIcon(R.drawable.menu_item_icon). Menu Item Click Listener: khi mt menu c chn s c mt x l iu khin. l phng thc onOptionsItemSelected. menuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem _menuItem) { [ ... thc hin x l ... ] return true; } }); Intent: Khi mt menu item c chn, Android s thc thi startActivity vi mt i tng Intent. menuItem.setIntent(new Intent(this, MyOtherActivity.class));

3.6.3 To mt Menu: to mt menu, trong Activity override phng thc onCreateOptionsMenu, phng thc ny c thc thin ln u tin khi menu c hin th. onCreateOptionsMenu nhn mt tham s kiu Menu. Dng phng thc add trn i tng Menu ny thm vo cc item. Mi menu item cn phi ch nh cc thuc tnh sau: Nhm m item c thm vo. ID, mi item c mt ID duy nht, bi v chng c x l chung trong phng thc onOptionsItemSelected nn vic xc nh item no c chn l ph thuc vo ID c ch nh cho n. Cch sp xp th t m item c hin th.

Xy dng ng dng 3D vi Android 62 ______________________________________________________________________ Text th hin ca item, c th l mt chui cc k t hoc mt string resource. V d: static final private int MENU_ITEM = Menu.FIRST;

@Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); // nhm I int groupId = 0; // ID int menuItemId = MENU_ITEM; // cch sp xp int menuItemOrder = Menu.NONE; // Texthin th int menuItemText = R.string.menu_item;

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

Xy dng ng dng 3D vi Android 63 ______________________________________________________________________

Chng 4: X l bt ng b

4.1 Thread: Thng thng lp trnh vin dng Thread x l cc code x l nng, hoc mt thi gian c th gy chm chng trnh hoc giao din b block. Thread kh thng dng v trong Android dng lp Thread ca Java. Theo mc nh, mi ng dng chy trong mt tin trnh v code c thc thi trong thread chnh ca tin trnh . Nu code x l qu lu, khng kp phn hi li cc s kin ngi dng trong 5 giy th s xut hin dialog Application is not responding v ngi dng c th ng ng dng ngay lp tc. Nu khng b ng th ng dng s b lag, iu ny l kh chp nhn. Thread thread = new Thread() { @Override public synchronized void start() { // Khi to cc i tng cn thit ti y super.start(); } @Override public void run() { // code x l chnh ca thread trong ny super.run(); } }; thread.start(); //bt u thread

Xy dng ng dng 3D vi Android 64 ______________________________________________________________________

Lu : Thread ln u thc thi gi phng thc start(), nhng ln sau ch gi phng thc run(), khng gi start() na. Cc code x l lin quan n giao din ch c x l trong thread chnh ca ng dng (v d load nh t mng v th dng thread, nhng hin th nh ln ImageView th x l trong thread chnh) Sau khi thc thi xong phng thc run(), thread khng cn hot ng na.

4.2 Handler: Trong Android, tin vic giao tip gia 2 thread ta dng i tng Handler. C th dng Handler nh b m giy khi chi nhc, hoc chc nng tng t . Ngoi ra, c th dng Handler t x l mt yu cu no sau mt khong thi gian xc nh. Giao tip gia 2 Thread: Gi s trong phng thc run() ly xong i tng Bitmap v. Mun truyn i tng Bitmap cho Thread chnh hin th ln mn hnh: Message msg = mHandler.obtainMessage(1, bitmap); mHandler.sendMessage(msg); Trong code ca Activity (mc nh l thread chnh), ta khai bo mt i tng Handler tng tng nh sau: Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == 1) {

Xy dng ng dng 3D vi Android 65 ______________________________________________________________________ //Hin th Bitmap mImageView.setImageBitmap((Bitmap)msg.obj); } super.handleMessage(msg); } };

Trong on code trn, i tng mHandler ly ra mt message v gn m vo cho message , km theo i tng bitmap. Sau gi i. Message gi i s c nhn phng thc callback l handleMessage() ca i tng Handler. Handler cn c th gi message x l sau mt khong thi gian nh sn sendMessageAtTime hoc x l ti mt thi im nh sn sendMessageDelayed.

Lu : Handler c to trong thread no th s s dng hng i message ca thread . Nu trong hng i message vn cn message th vn cn thc thi d thot khi ng dng.

Xy dng ng dng 3D vi Android 66 ______________________________________________________________________ 4.3 AlarmManager (bo hiu): Dng AlarmManager thc hin ng k x l mt thao tc no ti mt thi im nht nh trong tng lai (thng l thi gian di, nu x l trong thi gian ngn th khuyn co nn dng Handler). Khi n thi im c t trc, d ng dng ang khng chy th n vn c gi. Nu tt my ri bt li th khng cn. Khi to mt AlarmManager: AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); Intent broadcastIntent = new Intent("org.multiuni.android.ACTION..."); PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, broadcastIntent, PendingIntent.FLAG_CANCEL_CURRENT); am.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);

Gii thch: Khi to mt i tng AlarmManager lm vic vi Alarm. To mt intent tn broadcastIntent, intent ny c dng gi broadcast khi n thi im nh sn. PendingIntent c khi to gm context, broadcastIntent trn v mt c bo rng nu c mt Alarm tng t th b n i v dng ci mi ny. Sau cng, set alarm vi 3 thng s: + B m thi gian. + Thi gian chnh xc bt alarm ln. + PendingIntent gi i (dng xc nh ti thi im bt alarm ln th cn pht intent no).

Xy dng ng dng 3D vi Android 67 ______________________________________________________________________

4.4 Notification (thng bo): Trong nhng trng hp chng ta mun hin mt thng bo v mt s kin no (tin nhn, cuc gi, email) cho ngi dng m khng mun nh hng n cng vic ca h hoc khng chc l h c ang cm in thoi hay khng, hoc bn mun hin th thng tin mt vic no ang xy ra trn in thoi (ang nghe nhc, ang trong cuc gi, thiu th nh) v mong ngi dng bit th chng ta dng Notification. Chng ta c th to mt thng bo c nhiu hnh thc khc nhau nh c m bo, rung, n led, icon Mi phng php thng bo c mt tham s id kiu int v ty chn mt tham s tag kiu String, c th l null, to thnh mt b hai (tag, id) hoc (null, id). B hai ny nhn din thng bo t ng dng, v phi l duy nht trong ng dng. Nu gi mt trong nhng phng thc thng bo vi b (tag, id) hin ang hot ng v thit lp cc thng s mi th n s c cp nht. V d, nu lt qua mt biu tng mi ca thanh trng thi th biu tng c ca thanh trng thi s c thay th bng biu tng mi. Chng ta khng khi to lp ny trc tip m ly n thng qua getSystemService(String). V d: String svcName = Context.NOTIFICATION_SERVICE; NotificationManager notificationManager; notificationManager = (NotificationManager)getSystemService(svcName); NoticationManager l mt dch v h thng dng qun l cc Notication.

Xy dng ng dng 3D vi Android 68 ______________________________________________________________________ To mt thng bo: To mt i tng Notication, truyn vo icon hin th thanh trang thi v thi gian hin th: // chn mt drawable hin th nh l mt icon ca thanh trng thi int icon = R.drawable.icon; // Text hin th ln thanh trng thi khi thng bo c chy String tickerText = Notification; // thanh trng thi m rng sp xp cc thng bo theo th t thi gian when = System.currentTimeMillis(); Notification notification = new Notification(icon, tickerText, when); Cu hnh giao din ca Notification trong ca s trng thi m rng, s dng phng thc setLatestEventInfo. Ca s trng thi m rng ny hin th icon v thi gian c khai bo trong constructor v ng thi hin th tiu v chi tit v chui thng bo. Context context = getApplicationContext(); // Text hin th trn ca s trng thi m rng String expandedText = Extended status text; // Tiu ca thanh trng thi m rng String expandedTitle = Notification Title; // Intent chy mt activity khi text c click Intent intent = new Intent(this, MyActivity.class); PendingIntent launchIntent = PendingIntent.getActivity(context, 0, intent, 0); notification.setLatestEventInfo(context, expandedTitle, launchIntent); expandedText,

Xy dng ng dng 3D vi Android 69 ______________________________________________________________________ Ci tin thng bo bng cc thuc tnh khc ca i tng Notication lm nhy n trn LED trn thit b, rung in thoi hay trnh din cc file nhc. Gi mt thng bo: thc hin gi mt thng bo, gi phng thc notify NotificationManager: int notificationRef = 1; notificationManager.notify(notificationRef, notification); cp nht mt thng bo c s dng, gi li v truyn li gi tr reference ID. Cng c th s dng ID ny hy thng bo bng cch gi phng thc cancel ca NotificationManager. notificationManager.cancel(notificationRef); Vic hy thng bo s xa thanh icon trng thi v ca s trng thi m rng. ca

Xy dng ng dng 3D vi Android 70 ______________________________________________________________________

Chng 5: p dng OpenGL ES to ng dng 3D trn Androi

5.1 Gii thiu v OpenGL ES: OpenGL ES (OpenGL for embedded systems) c pht trin bi nhm Khronos, l mt sn phm min ph bao gm cc hm API cho php to cc ng dng 2D, 3D trn cc ng dng nhng bao gm cc thit b cm tay. N nh l mt tp con ca OpenGL (Open Graphics Library), to ra tnh linh hot, mnh m trn giao din cp thp gia cc phn mm v ha. V vy OpenGL ES nh hn nhiu so vi OpenGL, nn nhiu chc nng thun tin c g b. V d, v hnh ch nht l khng trc tip h tr trong OpenGL ES, bn phi v hai tam gic to ra mt hnh ch nht. Mi phin bn OpenGL ES tng ng vi mt phin bn OpenGL. OpenGL ES 1.0 ch tp trung vo cc phn mm cho php trin khai, l tp con ca OpenGL 1.3. OpenGL ES 1.1 nhn mnh v tc phn cng ca cc hm API, l tp con ca OpenGL 1.5. OpenGL ES 2.0 ch thc thi cc hnh dng thng thng, l tp con ca OpenGL 2.0. 5.2 Dng (Rendering): y l bc khi to v thit lp OpenGL ES, khi v trn mn hnh OpenGL ES s dng k thut ca mt b m kp. Khi v, chng ta v trn b nh m. Sau khi c c tt c cc thng tin ca vic v, n s trao i gia cc b nh m v bt u v trn b nh m khc. iu ny ngn chn vic chp mn hnh bi hng s xa mn hnh v v hnh khc trn mt b nh m. Khai bo s dng th vin OpenGL ES:import javax.microedition.khronos.opengles.*;

Khai bo mt i tng gl, v d: GL10 gl;

Xy dng ng dng 3D vi Android 71 ______________________________________________________________________ Trong hm init(), chng ta s dng mt li gi glClearColor, n c s dng xc nh mu sc cho mn hnh hin th, n bao gm 4 tham s, cc tham s ny i din cho h mu RGBA v c gi tr trong khong t 0 n 1. Ba tham s u l mu , xanh l cy v xanh da tri, cn tham s th 4 l sng ti ca window. V d: t mu nn en cho mn hnh hin thprivate void init(GL10 gl) { gl.glClearColor(0.0f, 0.0f, 0.0f,0.0f); }

xa b m, ta s dng hm glClear(), tham s ca n l nhng hng s xc nh. V d: gl.glClear(GL10.GL_COLOR_BUFFER_BIT|GL10.GL_DEPTH_ BUFFER_BIT); C trng hp c nhng hm cha c chy n khi kt thc chng trnh, trnh trng hp ny, ta gi hm glFlush(), n s thc hin tt c cc hm cha c chy v kt thc i tng gl bng hm glFinish(). gl.glFlush(); gl.glFinish();

5.3 Php chiu trc giao (Orthographic Projection): C hai cch hin th i tng l s dng php chiu phi cnh v php chiu trc giao. Php chiu trc giao l php chiu song song v tia chiu vung gc vi mt phng chiu, cho kt qu nhanh hn v chi ph tnh ton t nhng li khng m t i tng mt cch chn thc.

Xy dng ng dng 3D vi Android 72 ______________________________________________________________________

Hnh 14 - Php chiu trc giao View volume c nh ngha l mt hnh hp ch nht, vt th nm trong view volume c chiu trc giao ln khung nhn, do trong php chiu trc giao, khong cch t camare n vt th khng nh hng n ln ca nh. Hnh c to ra bng cch xc nh cc nh, y l nhng im trong khng gian 3 chiu v vy cn ch r cc im trn hnh. Danh sch cc tham s Primitive Flag GL_POINTS GL_LINES GL_LINE_STRIP GL_LINE_LOOP GL_TRIANGLES Description Cc im on thng ng gp khc khng khp kn ng gp khc khp kn Tam gic

Xy dng ng dng 3D vi Android 73 ______________________________________________________________________ GL_TRIANGLE_STRIP GL_TRIANGLE_FAN Mt di tam gic c lin kt vi nhau Cc tam gic lin kt theo hnh qut

Khi v im, chc nng glPointSize c th thay i kch c ca im c v, kch c mc nh l 1. Khi v ng, c th s dng glLineWidth xc nh rng ca ng, kch c mc nh l 1. V d: hin th mt hnh vung ln mn hnh Bc u tin l xc nh ta ca hnh vung t trn mn hnh, thit lp 3 gi tr (float) x, y, z cho mi nh:float[] coords = { 0.25f, 0.25f, 0.0f, // 0 0.75f, 0.25f, 0.0f, // 1 0.25f, 0.75f, 0.0f, // 2 0.75f, 0.75f, 0.0f, // 3 };

-

Khi to chng trnh:private void init(GL10 gl) { gl.glClearColor(0.0f, 0.0f, 0.0f,0.0f);

-

Thit lp ch ma trn bng cu lnh glMatrixMode() trc khi nh ngha php chiu:gl.glMatrixMode (GL10.GL_PROJECTION);

-

Thit lp ma trn hin thi v ma trn n v bng lnh glLoadIdentity()gl.glLoadIdentity ();

Xy dng ng dng 3D vi Android 74 ______________________________________________________________________ Chc nng glOrthof c ch nh xc nh nhn theo php chiu trc giao, n bao gm cc tham s: glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top,GLfloat near, GLfloat far):gl.glOrthof(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);

-

n gi thit lp xong php chiu trc giao, tip n s v hnh bng cch s dng chc nng glVertexPointer, chc nng ny c 4 tham s: + GLint size: Xc nh s lng ta cho mi nh + GLenum type: Xc nh kiu d liu ca mi nh trong mng vi d nh GL_BYTE, GL_SHORT, GL_FLOAT v.v + GLsizei stride: Xc nh khong cch byte gia cc nh lin tip, Nu + stride bng 0 cc nh c hiu l c ng gi cht ch trong mng , gi tr ban u bng 0 + const GLvoid *pointer: Xc nh v tr b nh ca gi tr u tin trong mng, n tr ti mng.gl.glVertexPointer(3, GL10.GL_FIXED, 0, coords);

Chc nng glEnableClientState s a ra mt trong nhng tham s ch nh mng phi c kch hot:gl.glEnableClientState (GL10.GL_VERTEX_ARRAY);

-

Chc nng glDrawArray v vi cac tham s: + GLenum mode: xc nh gi tr ban u v + GLint first: Xc nh ch s ban u ca mng + GLsizei count: ch r s nh x lgl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

Xy dng ng dng 3D vi Android 75 ______________________________________________________________________ Hoc s dng hm glDrawElements() v:gl.glDrawElements(int mode, int count, int type, Buffer indices);

Kt qu hin th:

Hnh 15 Kt qu php chiu trc giao

5.4 Php chiu phi cnh (Perspective Projection ): Trong th gii thc, nu c nhiu i tng c cng mt kch c c t nhng khong cch khc nhau, th s nhn thy rng cc i tng xa hn th s trng nh hn. hin th c nh vy, ngi ta dng php chiu phi cnh. Php chiu phi cnh l php chiu m cc tia chiu khng song song vi nhau m xut pht t mt im gi l tm chiu, cho ta mt ci nhn ging tht hn nhng chi ph tnh ton nhiu hn.

Xy dng ng dng 3D vi Android 76 ______________________________________________________________________

Hnh 16 - Php chiu phi cnh Thc hin: u tin s to 2 bin chiu rng v chiu cao ca ca s v mt bin xc nh x dng php chiu trc giao hay php chiu phi cnh, iu ny cho php thay i gia 2 php chiu ta thy c s khc bit gia chng:private int w=0; private int h=0; private boolean perspective=true;

Nu mun di chuyn v tr ca camera (gc nhn) th s phi sa i ma trn chiu. iu ny l kh phc tp, c cch n gin hn l ta s dng chc nng gluLookAtf ca th vin GLU|ES, tng t chc nng trong UG l gluLookAtf. Chc nng ny s a ra 9 tham s, bao gm 3 ta hoc vectors: u tin phi xc nh ni t camera, th 2 l xc nh im mun camera c tr n, cui

Xy dng ng dng 3D vi Android 77 ______________________________________________________________________ cng l ch r vic chun ha trn vector. Thng s dng (0, 1, 0) cho vector ny. on code di y th hin ni t camera cch 2 n v t gc v nhn v pha gc.float[] gluLookAtf = { 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, };

Tip theo l on code v 3 hnh vung, mi hnh s c xut hin pha sau v dch sang bn tri ca hnh pha trc://hinh vuong red gl.glColor4f(1.0f, 0.0f, 0.0f, 1.0f); gl.glTranslatef(-0.25f, 0.0f, -1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

//hinh vuong green gl.glColor4f(0.0f, 1.0f, 0.0f, 1.0f); gl.glTranslatef(-0.25f, 0.0f, -1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

//hinh vuong blue gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); gl.glTranslatef(-0.25f, 0.0f, -1.0f); gl.glDrawArrays(GL10.GL_TRIANGLE_STRIP, 0, 4);

Chc nng reshape ban u vn gi nguyn:public void resgape(int width, int height, GL10 gl) { w=width;

Xy dng ng dng 3D vi Android 78 ______________________________________________________________________h=height;

if (height==0) height=1; gl.glMatrixMode (GL10.GL_PROJECTION); gl.glLoadIdentity (); gl.glViewport(0, 0, width, height);

Ging glOrthof to ra hnh chiu trc giao, glFrustumf c s dng to ra hnh chiu phi cnh, cc tham s cng ging nh hm glOrthof nh: tri, ph