Download as pdf or txt
Download as pdf or txt
You are on page 1of 37

Mc lc

1 2 3 4 Lch s Android Khi nim Android Kin trc Android Pht trin ng dng trn Android 4.1 4.2 Ngn ng lp trnh Mt s lu 2 2 3 7 7 7 8 9 11 12 13 15 15 19 22 25 29 33

4.2.1 Vn phn mnh phin bn Android trn th trng: 4.2.2 Vn kch thc mn hnh 4.3 Mi trng lp trnh cho Android

4.3.1 Cc thnh phn c bn ca mt project Android trn Eclipse 4.3.2 File AndroidManifest.xml 4.4 Cc thnh phn c bn ca mt ng dng Android

4.4.1 Activity 4.4.2 Intent 4.4.3 Service 4.4.4 Content Provider 4.4.5 View 4.4.6 Lu tr d liu

1. Lch s Android
Thng 7/2005, Google mua li cng ty pht trin phn mm in thoi Android, nhng cha cng b s s dng cho mc ch g. tr li cho cu hi , thng 11/ 2007, sau 2 nm pht trin, Google cng b h iu hnh in thoi di ng m ngun m Android, cng vi s thnh lp Lin minh di ng m (Open Handset Alliance) bao gm hn 65 nh sn xut phn cng in thoi ln trn th gii nh Intel, HTC, China Mobile, T-Mobile,....

Hnh 1 - Cc thnh vin ca "Lin minh di ng m"

T nm 2007, h iu hnh Android tri qua nhiu ln cp nht, vi phin bn gn y nht l Gingerbread 2.3, ra ngy 06/12/2010. Tnh n thng 6/2010, c khong 70 mu in thoi di ng s dng h iu hnh Android, cha k cc thit b in t khc nh my tnh bng (tablet computers), ebook readers, Google TV,...

2. Khi nim Android


Android l h iu hnh in thoi di ng m ngun m min ph do Google pht trin da trn nn tng ca Linux. Bt k mt hng sn xut phn cng no cng u c th t do s dng h iu hnh Android cho thit b ca mnh, min l cc thit b y p ng c cc tiu chun c bn do Google t ra (c cm ng chm, GPS, 3G,...) (Xem thm: Android Compatibility Definition Document)

Cc nh sn xut c th t do thay i phin bn Android trn my ca mnh mt cch t do m khng cn phi xin php hay tr bt k khon ph no nhng phi m bo tnh tng thch ngc (backward compatibility) ca phin bn ch ring . Android l nn tng cho thit b di ng bao gm mt h iu hnh, midware v mt s ng dng ch o. B cng c Android SDK cung cp cc cng c v b th vin cc hm API cn thit pht trin ng dng cho nn tng Android s dng ngn ng lp trnh java. Nhng tnh nng m nn tng Android h tr: Application framework: Cho php ti s dng v thay th cc thnh phn sn c ca Android. Dalvik virtual macine: My o java c ti u ha cho thit b di ng.

Intergrated browser: Trnh duyt web tch hp c xy dng da trn WebKit engine. Optimized graphics: H tr b th vin 2D v 3D d vo c t OpenGL ES 1.0. SQLite: DBMS dng lu tr d liu c cu trc.

H tr cc nh dng media ph bin nh: MPEG4, H.264, MP3, AAC, ARM, JPG, PNG, GIF. H tr thoi trn nn tng GSM (Ph thuc vi phn cng thit b). Bluetooth, EDGE, 3G v WiFi (Ph thuc vi phn cng thit b). Camera, GPS, la bn v cm bin (Ph thuc vi phn cng thit b). B cng c pht trin ng dng mnh m.

3. Kin trc Android


Lc sau th hin cc thnh phn ca h iu hnh Android:

Hnh 2 - M hnh kin trc nn tng Android

Applications
H iu hnh Android tch hp sn mt s ng dng c bn nh email client, SMS, lch in t, bn , trnh duyt web, s lin lc v mt s ng dng khc. Ngoi ra tng ny cng chnh l tng cha cc ng dng c pht trin bng ngn ng Java.

Application Framwork
Tng ny ca h iu hnh Android cung cp mt nn tng pht trin ng dng m qua cho php nh pht trin ng dng c kh nng to ra cc ng dng v cng sng to v phong ph. Cc nh pht trin ng dng c t do s dng cc tnh nng cao cp ca thit b phn cng nh: thng tin nh v a l, kh nng chy dch v di nn, thit lp ng h bo thc, thm notification vo status bar ca mn hnh thit b Ngi pht trin ng dng c php s dng y b API c dng trong cc ng dng tch hp sn ca Android. Kin trc ng dng ca Android c thit k nhm mc ch n gin ha vic ti s dng cc component. Qua bt k ng dng

no cng c th cng b cc tnh nng m n mun chia s cho cc ng dng khc (VD: ng dng email c mun cc ng dng khc c th s dng tnh nng gi mail ca n). Phng php tng t cho php cc thnh phn c th c thay th bi ngi s dng. Tng ny bao gm mt tp cc services v thnh phn sau: Mt tp phong ph v c th m rng bao gm cc i tng View c dng xy dng ng dng nh: list, grid, text box, button v thm ch l mt trnh duyt web c th nhng vo ng dng. Content Provider: Cho php cc ng dng c th truy xut d liu t cc ng dng khc hoc chia s d liu ca chng.

Resource Manager: Cung cp kh nng truy xut cc ti nguyn noncode nh hnh nh hoc file layout. Notification Manager: Cung cp kh nng hin th custom alert trn thanh status bar. Activity Manager: Gip qun l vng i ca mt ng dng.

Libraries
System C library: mt th hin c xy dng t BSD ca b th vin h thng C chun (libc), c iu chnh ti u ha cho cc thit b chy trn nn Linux. Media libraries: B th vin h tr trnh din v ghi cc nh dng m than v hnh nh ph bin. Surface manager: Qun l hin th ni dung 2D v 3D. LibWebCore: Mt web browser engine hin i c s dng trong trnh duyt ca Android ln trong trnh duyt nhng web view c s dng trong ng dng. SGL: Engine h tr ha 2D. 3D libraries: Mt th hin c xy dng da trn cc APIs ca OpenGL ES 1.0. Nhng th vin ny s dng cc tng tc 3D bng phn cng ln phn mm ti u ha hin th 3D. FreeType: Bitmap and vector font rendering. SQLite: Mt DBMS nh gn v mnh m.

Android Runtime

H iu hnh Android tch hp sn mt tp hp cc th vin ct li cung cp hu ht cc chc nng c sn trong cc th vin li ca ngn ng lp trnh Java. Mi ng dng ca Android chy trn mt tin trnh ca ring n cng vi mt th hin ca my o Dalvik. My o Dalvik thc t l mt bin th ca my o Java c sa i, b sung cc cng ngh c trng ca thit b di ng. N c xy dng vi mc ch lm cho cc thit b di ng c th chy nhiu my o mt cch hiu qu. Trc khi thc thi, bt k ng dng Android no cng c convert thnh file thc thi vi nh dng nn Dalvik Executable (.dex). nh dng ny c thit k ph hp vi cc thit b hn ch v b nh cng nh tc x l. Ngoi ra my o Dalvik s dng b nhn Linux cung cp cc tnh nng nh thread, low-level memory management.

Linux Kernel
H iu hnh Android c xy dng trn b nhn Linux 2.6 cho nhng dch v h thng ct li nh: security, memory management, process management, network stack, driver model. B nhn ny lm nhim v nh mt lp trung gian kt ni phn cng thit b v phn ng dng. Di y l m hinh hp tc gia my o Dalvik v Navite code:

Hnh 3 - M hnh hp tc gia my o Dalvik v Navite code JNI: Java Native Interface (Tng t khi nim Application Programming Interface). Java Native Interface: l mt b framework cho php m lnh vit bng Java chy trn my o java c th gi hoc c gi bi mt ng dng vit bng native code (ng dng c vit cho mt phn cng c th v trn mt h iu hnh c th) hoc nhng b th vin vit bng C, C++ hoc Assembly.

Bng cch s dng JNI, Android cho php cc ng dng chy trn my o Dalvik c th s dng nhng phng thc c vit bng cc ngn ng cp thp nh: C, C++, Assembly. Qua cc nh pht trin ng dng c th xy dng ng dng da trn cc b th vin vit bng C, C++, Assembly nhm tng tc thc thi ca ng dng hoc s dng nhng tnh nng mc thp m ngn ng Java khng h tr. Tuy nhin ngi pht trin ng dng cn phi cn nhc s gia tng phc tp ca ng dng khi quyt nh s dng cc b th vin ny.

4. Pht trin ng dng trn Android


Ngn ng lp trnh
Ngn ng lp trnh chnh thc ca Android l Java. Mc d cc ng dng trn Android c pht trin da trn nn tng Java, nhng Android khng h J2ME v J2SE, l hai ngn ng lp trnh ph dng cho cc thit b di ng. Da trn my o Java ca Sun, Google tinh chnh v pht trin nn my o Dalvik bin dch m Java vi tc bin dch nhanh hn v nh hn. n phin bn Froyo 2.2, Android h tr Just-in-time Compiler (JIT) lm tng tc bin dch Java ln gp 2-5 ln so vi cc phin bn trc.

Hnh 4 - Biu so snh tc ca my o Java gia cc phin bn Android (Cng ln cng tt)

Bng cch s dng cc frameworks ca hng th ba (VD: PhoneGap, Titanium,...), cc nh lp trnh web cng c th pht trin ng dng Android mt cch d dng bng cc ngn ng web ph dng nh HTML, CSS, Javascript. Tuy nhin s lng cc ng dng i theo chiu hng ny cha nhiu. Ngoi ra cc ng dng ca Android s dng SQLite qun l c s d liu.

Mt s lu

Vn phn mnh phin bn Android trn th trng:


Do Android l h iu hnh m ngun m v min ph, bt k mt nh sn xut phn cng no cng c th s dng v ty bin Android ci t trn cc thit b ca mnh. iu ny dn n vn phn mnh (fragmentation) khi trn th trng tn ti nhiu mu in thoi Android, mi mu chy mt phin bn Android khc nhau. i khi cc phin bn Android ny cn khc nhau v giao din hay chc nng, do cc nh sn xut t ch thm vo m ngun ca Android. Mt v d tiu biu chnh l giao din Sense UI ca HTC.

Hnh 5 - So snh giao din nguyn bn ca Android v giao din Sense ca ring hng HTC thit k

Mt khc, do vic cp nht h iu hnh ph thuc hon ton vo cc nh sn xut, th nn sau khi Google cng b phin bn Android mi , ngi s buc phi ch kh lu mi c cp nht. Do vn phn mnh ny, trn th trng mt lc tn ti nhiu phin bn Android khc nhau, v ngi pht trin ng dng Android buc phi xem xt n kh nng ng dng do mnh vit ra c th s khng chy uc hay thiu di mt s chc nng quan trng khi cha trn cc my chy phin bn Android c. Mt v d tiu biu l ng dng chnh thc ca mng x hi Twitter ch c th chy trn phin bn Android 2.1, tc c 1/ 2 th trng ngi dng in thoi Android khng th s dng ng dng ny.

Hnh 6 - Thng k s lng in thoi s dng cc phin bn Android


(Ngun -http://developer.android.com/resources/dashboard/platform-versions.html T12/2010)

Vn kch thc mn hnh


Mt ln na, do trn th trng c rt nhiu nh sn xut in thoi Android, v mc d Google yu cu tt c mi in thoi Android phi p ng 1 s tiu ch chung v phn cng (mn hnh cm ng, GPS, 3G,...), cc nh sn xut hon ton t do quyt nh kch c v phn gii in thoi. Nh vy, cc nh pht trin ng dng Android phi chun b trc kh nng ng dng ca mnh s chy trn mt lot cc kch c mn hnh ln nh khcnhau. Tuy nhin, c mt iu chc chn: 100% cc in thoi Android u s dng mn hnh cm ng a im, cn bn phm vt l hay cm ng quang th ty my. Di y l bng cha thng s cc kch thc mn hnh ca cc thit b s dng Android tiu biu:

Hnh 7 - Bng thng k cc kiu mn hnh in thoi Android (Ngun: slides thuyt trnh gii thiu Android Hi tho Google I/O T6/2010)

Mi trng lp trnh cho Android


Android SDK bao gm cc cng c ring l nh: debugger, cc th vin, trnh gi lp in thoi Android, cc ti liu h tr v code mu. Hin Android cung cp b cng c ny trn nhiu nn tng h iu hnh khc nhau (Windows, Linux, Mac,...), min l c sn Java Development Kit, Apache Ant v Python2.2 tr ln. Mi trng lp trnh (IDE) chnh thc ca Android l Eclipse (t phin bn 3.2) vi s h tr ca plugin Android Development Tools (ADT). Tuy nhin, ngi lp trnh c th s dng bt k 1 IDE hay trnh son tho vn bn no vit code Java v XML ri bin dch nn ng dng hon chnh bng cch s dng dng lnh (command lines). ng dng Android c ng gi thnh cc file .apk v uc lu trong th mc / data/app ca h iu hnh Android.Java Development Kit (JDK) 5.0. Mt s cng c h tr lp trnh Android tiu biu: SQLite Manager: L mt addon ca Firefox gip qun l c s d liu SQLite ca Android. DroidDraw: Gip thit k file XML giao din ng dng. Balsamiq Mockups v AdobeFireworks: Gip nhanh chng phc tho tng v giao din s b ca ng dng. StarUML: V cc lc UML h tr phn tch thit k.

Cc thnh phn c bn ca mt project Android trn Eclipse

Hnh 8 - Cu trc th mc v file ca mt d n phn mm Android trn Eclipse

AndroidManifest.xml: file XML m t ng dng v cc thnh phn uc cung cp bi ng dng (activities, services,...). build.xml: Mt file cha m script Ant (ant.apache.com) nhm compile v ci t ng dng ln my. default.properties: file property to bi script Ant trn. bin/ : ni cha ng dng sau khi c compile. bin/classes/ : cha cc lp Java c compile. bin/classes.dex : cha cc file executable to bi cc lp Java. bin/yourapp.ap_ : cha cc ti nguyn ca ng dng, ng gi thnh 1 file zip. bin/yourapp-debug.apk hay bin/yourapp-unsigned.apk : cha chnh ngdng Android ca ta.

libs/ : ni cha cc file Java JAR ng dng yu cu (third party). src/ : ni cha m ngun Java ca ng dng. res/ : cha cc ti nguyn ca ng dng, nh cc icons, GUI layouts,... res/drawable/ : cha file hnh nh (PNG, JPEG,...). res/layout/ : cha UI layout, di dng XML. res/menu/ : chi tit cc menu, di dng XML. res/raw/ : cha cc file khc (CSV cha thng tin account,...). res/values/ : cha cc strings, dimensions,... res/zml/ : cha cc file XML khc cn cho ng dng. assets/ : ni cha cc files tnh (static) c yu cu i km vi ng dng.

File AndroidManifest.xml
L nn tng ca mi ng dng Android, file AndroidManifest.xml c t trong th mc root v cho bit nhng thnh phn c trong ng dng ca: cc activities, cc services,...cng nh cch cc thnh phn y gn b vi nhau. Mi file manifest u bt u vi mt th manifest: <manifest android" ... </manifest> xmlns:android="http://schemas.android.com/apk/res/

package="com.commonsware.android.search">

Khi to file manifest, iu quan trng nht l phi cung cp thuc tnh ca package, tc tn ca Java package dng lm c s cho ng dng ca ta. Sau khi t tn package, sau ny khi cn ghi tn lp trong file manifest, ta c th rt ngn, chng hn vi lp com.yourapp.android.search.Someclass ta ch cn ghi .Someclass l . Cc thnh phn manifest khc l : uses-persmission: ch nh cc quyn m ng dng ca ta uc cp hot ng tri chy (nh ni, cc ng dng Android nm di nhiu lp bo mt khc nhau).

permission: ch nh cc quyn m cc activities hay services yu cu cc ng dng khc pha c mi c truy cp d liu ca ng dng ca ta. instrumentation: ch nh phn code cn c gi khi xy ra nhng s kin quan trng (chng hn khi ng activities) nhm phc v vic ghi ch (logging) v tra sot (monitoring) uses-library: nhm kt ni vi cc thnh phn c sn ca Android (nh service tra bn ,...) uses-sdk: c th c hoc khng, ch ra phin bn caAndroid m ng dng ny yu cu. application: nh ngha phn trung tm ca ng dng ca file manifest. V d file AndroidManifest: <manifest android" xmlns:android="http://schemas.android.com/apk/res/

package="com.commonsware.android"> <uses-permission android:name="android.permission.ACCESS_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_GPS" /> <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" /> <uses-permission android:name="android.permission.ACCESS_CELL_ID" /> <application> ... </application> </manifest>

Tt nhin, phn quan trng ca 1 file manifest chnh l thnh phn application. Mc nh, khi ta to 1 project Android mi, ta c sn 1 thnh phn activity: <manifest android" <application> <activity android:name=".Now" android:label="Now"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" / > </intent-filter> </activity> </application> </manifest> xmlns:android="http://schemas.android.com/apk/res/

package="com.commonsware.android.skeleton">

Thnh phn ny cung cp cc thng tin sau android:name : tn class hin thc activity ny. android:label : tn activity. intent-filter : Mt thnh phn con, ch ra di iu kin no th activity ny c hin th.

Cc thnh phn c bn ca mt ng dng Android Activity

nh ngha Activity
L thnh phn ti quan trng ca bt k mt ng dng Android no. Thut ng Activity ch mt vic m ngi dng c th thc hin trong mt ng dng Android. Do gn nh mi activity u tng tc vi ngi dng, lp Activity m nhn vic to ra mt ca s (window) ngi lp trnh t ln mt giao din UI vi setContentView(View). Mt activity c th mang nhiu dng khc nhau: Mt ca s ton mn hnh (full screen window), mt ca s floating (vi windowsIsFloating) hay nm

lng bn trong 1 activity khc (vi ActivityGroup). C 2 phng thc m gn nh mi lp con ca Activity u phi hin thc: - onCreate(Bundle) - Ni khi to activity. Quan trng hn, y chnh ngi lp trnh gi setContentView(int) km theo layout th hin UI ca ring mnh. ng thi cn c findViewById(int) gip gi cc widget (buttons, text boxes, labels,..) dng trong UI. - onPause() - Ni gii quyt s kin ngi dng ri khi activity. Mi d liu c ngi dng to ra ti thi im ny cn phi c lu vo ContentProvider. c th s dng Context.startActivity(), mi lp activity u phi c khai bo vi tag <activity> trong file AndroidManifest.xml.

Hnh 9 - Khai bo tag <activity> trong file AndroidManifest.xml

Vng i ca mt activity
Cc activity c qun l di dng cc activity stack - First-In-Last-Out: Khi mt activity mi c khi to, n s c a ln trn cng stack, cc activity khc mun chy trn nn (foreground) tr li th cn phi ch ti khi Activity mi ny kt thc. Mt Activity c 4 trng thi: Active hay Running: Khi mt activity ang chy trn mn hnh. Paused: Khi mt activity vn ang chy trn mn hnh nhng ang b mt activity trong sut (transparent) hay khng chim ton mn hnh hin th pha trn. Tuy vn lu

tr d liu, nhng cc paused activity ny s b h thng bt chm dt khi ang thiu b nh trm trng. Stopped: Khi 1 activity b che khut hon ton bi 1 activity khc. Tuy vn lu tr d liu, nhng cc stopped activity ny s thng xuyn b h thng bt chm dt dnh ch cho cc tin trnh khc. Killed hay Shut down: Khi 1 activity ang paused hay stopped, h thng s xa activity y ra khi b nh.

Hnh 10 - Lc vng i ca 1 activity

Da vo lc trn, thy c c 3 vng lp quan trng sau: Vng i ton din (Entire Lifetime): Din ra t ln gi onCreate(Bundle) u tin v ko di ti ln gi onDestroy() cui cng.

Vng i thy c (Visible Lifetime): Din ra t khi gi onStart() v ko di ti khi gionStop(). vng i ny, activity c hin th trn mn hinh nhng c th khng tng tc vi ngi dng trn nn. Cc phng thc onStart(0 v onStop() c th c gi nhiu ln. Vng i trn nn (Foreground Lifetime): Din ra t khi gi onResume(0 v ko di ti khi gi onPause(). vng i ny, activity nm trn mi activity khc v tng tc c vi ngi dng. 1 activity c th lin tc thay i gia 2 trng thi paused v resumed, chng hn khi thit b sleep hay 1 intent mi c a ti. Ton b vng i ca 1 activity c nh ngha nh cc phng thc sau:

public class Activity extends ApplicationContext { protected void onCreate(Bundle savedInstanceState); //Gi khi mi to activity setup cc view, binding d liu,... //Km theo sau lun l onStart(). protected void onRestart(); //Gi sau khi activity b stopped v trc khi c khi ng li. //Km theo sau lun l onStart(). protected void onStart(); //Gi khi activity hin ln trc mt ngi dng. //Km theo sau l onResume() nu activity hin ln nn hay onStop(0 nu b n i. protected void onResume(); //Gi khi activity bt u tng tc vi ngi dng v ang trn cng ca activity stack. //Km theo sau lun l onPause(). protected void onPause();

//Gi khi h thng sp khi ng li 1 activity khc trc. //kotheo sau l onresume nu activity tr li trn cng hay onStop() nu b n i. protected void onStop(); //Gi khi activity khng cn hin th trc ngi dng //Km theo sau l onRestart() nu activity hin ln tr li hay onDestroy nu sp xo activity i. protected void onDestroy(); //Gi ngay trc khi kt thc activity, xy ra khi hm finish() c gi hoc khi h thng yu cu buc phi kt thc. }

Intent

nh ngha Intent
Khi Tim Berners pht minh ra giao thc Hypertext Transfer Protocol (HTTP), ng cng pht minh ra mt nh dng URLs chun. nh dng ny l mt h thng cc ng t i km cc a ch. a ch s xc nh ngun ti nguyn nh Web page, hnh nh hay cc server-side program. ng t s xc nh cn phi lm ci g vi ngun ti nguyn : GET nhn d liu v, POST a d liu cho n thc thi mt cng vic no . Khi nim Intent cng tng t, Intent l mt m t tru tng ca mt hnh ng c thc thi. N i din cho mt hnh ng i km vi mt ng cnh xc nh. Vi Intent th c nhiu hnh ng v nhiu component (Mt th hin ca mt class java dng thc thi cc hnh ng c c t trong Intent) dnh cho Intent ca Android hn l so vi HTTP verbs (POST, GET) v ngun ti nguyn (hnh nh, web page) ca giao thc HTTP, tuy nhin khi nim vn tng t nhau. Intent c s dng vi phng thc startActivity() m mt Activity, v dng vi broadcastIntent gi n n bt k BroadcastReceiver lin quan no, v dng vi startService(Intent), bindService(Intent, ServiceConnection, int) giao tip vi cc Service chy di nn.

Intent cung cp mt chc nng cho php kt ni hai chng trnh khc nhau trong qu trnh thc thi (runtime) (Cung cp kh nng cho php hai chng trnh khc nhau giao tip vi nhau). Chc nng quan trng v c s dng nhiu nht ca mt Intent l m mt Activity, ni m n c thc dng nh mt vt kt ni cc Activity li vi nhau (Truyn thng tin gia hai Activity khc nhau).

Hnh 11 - S dng Intent trao i thng tin gia hai chng trnh

Thnh phn chnh ca Intent bao gm: Action: Xc nh hnh ng s c thc thi, cc hnh ng ny c th l: ACTION_VIEW, ACTION_EDIT, ACTION_MAIN Data: Cc d liu c s dng hnh ng (Action) thao tc trn n, nh bn ghi v mt ngi no trong c s d liu cha cc contact ca thit b. V d v thnh phn action/data: ACTION_VIEW content://contacts/people/1 hin th thng tin lin lc ca ngi c m l 1. ACTION_DIAL content://contacts/people/1 gi in cho ngi c m l 1. ACTION_DIAL tel:123 gi n s in thoi 123 Ngoi ra, Intent cn c cc thuc tnh ph sau: Category: thng tin chi tit v hnh ng c thc thi, v d nh CATEGORY_LAUNCHER c ngha l n s xut hin trong Launcher nh ng dng c mc level cao (top-level application), trong khi CATEGORY_ALTERNATIVE cha thng tin danh sch cc hnh ng thay th m ngi dng c th thc thi trn phn d liu m Intent cung cp. Type: Ch nh 1 kiud liu chnh xc (kiu MIME) c mang bi intent. Thng th type c suy ra t chnh d liu. Bng cch thit lp thuc tnh type, bn c th v hiu ha s phng on kiu d liu v ch nh r mt kiu chnh xc.

Component: Ch nh r tn ca lp thnh phn (Mt th hin ca mt class java dng thc thi cc hnh ng c c t trong Intent) s dng cho Intent . Thng thng th n c xc nh bng cch tm kim thng tin trong Intent (Cc thng tin nh Action, data/type, v category) v ni chngvi cc component (Mt th hin ca mt Class java dng thc thi cc hnh ng c c t trong Intent) c th p ng c cc yu cu s l ca Intent. Extracts: l mt i tng Bundle dng cha cc thng tin km theo c dng cung cp thng tin cn thit cho component. V d: Nu c mt Intent c t hnh ng send email th nhng thng tin cn cha trong i tng Bundle l subject, body

Intent Resolution
Intent c 2 dng chnh sau: Explicit Intents: Xc nh r mt component (Mt th hin ca mt class java dng thc thi cc hnh ng c c t trong Intent) (thng qua phng thc setComponent(ComponentName) hoc setClass(Context, Class)) cung cp lp s thc thi cc hnh ng c c t trong Intent. Thng thng th nhng Intent ny khng cha bt k thng tin no khc (nh category, type) m n gin ch l cch ng dng m cc Activity khc bn trong mt Activity. Implicit Intents: Khng ch nh mt component no c, thay vo , chng s cha thng tin h thng c th xc nh component c sn no l tt nht thc thi hiu qu cho Intent . Khi s dng Implicit intents, do tnh cht chuyn quyn ca loi Intent ny,ta cn phi bit phi lm g vi n. Cng vic ny c m nhim bi tin trnh ca Intent resolution, n gip ch nh Intent n mt Actvity, BroadcastReceiver, hoc Service (hoc thnh thong c thl 2 hay nhiu hn mt activity/receiver) c th x l cc hnh ng c c t trong Intent. Bt c thnh phn no (Activity, BroadcastReceiver, Service) khi mun s dng trong ng dng u phi c ng k trong file AndroidManifest.xml. Trong cnnh ngha mt th <intent-fillter> cung cp cc thng tin h thng c th xc nh c ci m cc component ny (Activity, BroadcastReceiver, Service) c th x l c (nhng action m component ny c th thc hin c). Intent Fillter l bn c t c cu trc ca cc gi tr ca Intent dng xc nh component ph hp thc hincc hnh ng c c t trong Intent. Mt Intent

Fillter ni cc hnh ng, categories v d liu (hoc thng qua type hoc sheme) trong Intent. Intent Fillter c khai bo trong AndroidManifest.xml v s dng th intentfillter. Mt Intent Fillter c cc thnh phn chnh sau: Action: Tn hnh ng m component c th thc thi. Type:Kiu hnh ng m component c th thc thi. Category: Phn nhm cc hnh ng. i vi nhng d liu khng phi l ni dung c th (VD: URI) th vic xem xt la chn Intent ph hp s da vo lc (Scheme) ca d liu c cung cp (VD: http:// mailto: )

Lut xc nh component ph hp Intent


xc nh mt thnh phn l ph hp vi mt Intent h thng s tin hnh xem xt t trn xung. Trc tin khi mt Intent c gi, Android s tm kim nhng component (Activity, BroadcastReceiver, Service) c action-name ph hp vi Intent. Nu c component ph hp Android sm component ln thc thi cc hnh ng theo yu cu. Nu c nhiu hn 1 component c action-name ph hp th Android s yu cu ngi dng chn component ph hp. Ngc li nu khng c component no ph hp Android s tin hnh xem xt kiu d liu ca Intent cung cp xem c component no c nng lc s l kiu d liu khng. Nu khngc Android s tin hnh xem xt scheme ca d liu tm kim component ph hp. Nu vn khng tm c component ph hp Android s tin hnh xem xt cc component c chung Category vi Intent xc nh component.

Service

nh ngha Service
Mt service l mt thnh phn ca ng dng, th hin mong mun ng dng thc hin cc hnh ng trong khi khng tng tc vi ngi dng hoc cung cp chc nng cho cc ng dng khc s dng. Ni mt cch n gin, service l cc tc v (task) chy ngm di h thng nhm thc hin mt nhim v no . Mi class Service phi cha

th <service> c khai bo trong file AndroidManifext.xml. Services c th c bt u bi Context.startService() v Context.bindservice() Cng nh cc i tng ca ng dng khc, services chy trn lung (Thread) ca tin trnh chnh. C ngha l nu service ca bn d nh chy cc hnh vi c cng ln hoc cc hnh vi c th gy nghn mch, n s t sinh ra lung (Thread) ca chnh n lm thc hin cc tc v c c t trong Service. Cn lu : Service khng phi l mt tin trnh c lp. i tng Service khng chy trn tin trnh (process) ca ring n (tr khi c mt yu cu t bit), Service chy trn tin trnh ca chng trnh. Service khng phi l mt lung (thread). Service c cha 2 c trng c bn sau: L mt chc nng ng dng thng bo vi h thng v vic m n mun thc hin pha di nn (ngay c khi ngi dng khng tng tc trc tip ti ng dng). iu ny tng ng vi vic gi phng thc Context.startservice(), n s yu cu h thng ln lch cho service chy cho n khi b chnh service hay ngi no dng n li. L mt chc nng cho php ng dng cung cp cc chc nng ca n cho cc ng dng khc. iu tng ng vi vic gi Context.bindService(), cho php mt long-standing connection c to ra service c th tng tc vi n. Khi mt Service c to ra, vic h thng cn lm l to ra thnh phn v gi hm onCreate() v bt k lnh callback thch hp no trn lung chnh. N ph thuc vo Service thi hnh hnh vi thch hp no, chng hn to lung th hai thc hin tin trnh.

Vng i ca 1 Service
C 2 l do mt service c chy bi h thng. Bng cch gi phng thc Context.startService() v Context.bindService(). Nu ngi dng gi phng thc Context.startService() th h thng s nhn v mt i tng service (to mi n v gi hm onCreate() nu cn thit) v sau li gi phng thc onStartCommand(Intent, int ,int) vi cc bin c cung cp bi client. Service mi c to ra ny s chy cho ti khi c lnh gi phng thc Context.stopService() hoc stopSelf(). D cho mt service c c start bao nhiu ln i na th n s b tt ngay khi phng thc Context.stopService() hoc phng thc stopSelf() c gi.Service c th dng phng

thc stopSelf(int) m bo rng service s khng c tt cho n khi Intent khi to n c x l.

Hnh 12 - Lc vng i ca 1 Service

Da theo hnh trn, 1 service c bt u bi phng thc startService() l service dng thc hin cc tc v ngm di nn, service c bt u bi phng thc bindService() l service c dng cung cp cc chc nng cho cc chng trnh khc.

BroadcastReceiver
L lp nhn v cc intents c gi bi sendBroadcast(). C th to instance cho lp ny bng 2 cch: hocvi Context.registerReceiver() hay thng qua tag <receiver> trong file AndroidManifest.xml. C hai lp broadcast quan trng cn xt n: Broadcasts bnh thng (Normal broadcasts): c gi bi context.sendBroadcast ti cc receivers hon ton khng theo 1 trt t no, dn ti i khi tn ti cng 1 lc nhiu receivers khc nhau. Tuy nhanh nhng khng th trao i kt qu nhn v gia cac1 receivers vi nhau.

Broadcasts c th t (Ordered broadcasts) - c gi bi Context.sendOrderedBroadcast() ti tng receiver mt. Nh vy, kt qu nhn v ca 1 receiver c th tr thnh input ca 1 receiver khc, hay c th ngay lp tc dng vic broadcast ti cc receiver khc. Trt t chy cc receivers c quyt nh bi thuc tnh android:priority trong intent-filter tng ng.

Content Provider
L ni lu tr v cung cp cch truy cp d liu do cc ng dng to nn. y l cch duy nht m cc ng dng c th chia s d liu ca nhau. Android cung cp sn content providers cho 1 s kiu d liu thng dng nh m thanh, video, thng tin s in thoi,... (Xem thm trong gi android.provider). Ngi lp trnh cng c th t to ra cc class con (subclass) ca Content Provider lu tr kiu d liu ca ring mnh. Cch thc hot ng ca Content Provider: Mi content provider, tuy c th khc nhau v cch thc lu tr d liu, u s dng chung 1 interface tm v tr v d liu, bao gm vic thm, bt v sa d liu. Vic ny c thc hin thng qua cc i tng ContentResolver khi gi getContentResolver() ContentResolver cr = getContentResolver();
M hnh d liu

Content providers s dng d liu di dng 1 table n gin, trong mi hng l 1 record v mi ct l d liu ca 1 kiu nht nh.

Hnh 13 - V d m hnh d liu thng tin s in thoi trong my

Mi record c 1 trng _ID c nht lin kt vi cc bng khc.


URI (Uniform Resource Identifier)

URI l dy cc k t string c dng :

M 1 trang web trong trnh duyt, bt u vi http:// Ch ti cc file ti nguyn c sn trong my (VD: 1 file video, danh sch contacts,...), bt u vi "content://" Da vo hnh 13 sau:

Hnh 14 Cc thnh phn ca 1 URI A Tin t mc nh ca 1 URI, khng thay i c. B Xc nh content provider. i vi cc ng dng hng th 3, y chnh l tn y ca 1 lp. C Xc nh loi d liu no cn ly v. Nu ngun cung cp ch cho ly 1 loi duy nht th c th trng, hoc nu c nhiu loi th c th phn ra tng phn 1 (land/bus, land/train, sea/ship,) D ID ca 1 record, khi cn ly v ch duy nht 1 record. Khi to 1 content provider, Android t ng to 1 constant cho URI ca provider m bo code hiu qu v d cp nht sau ny. Constant ny - CONTENT_URI s xc nh cho ContentProvider phi lin kt vi bng no ca ngun cung cp. V d: URI cho bng lin kt s in thoi vi tn ngi l: android.provider.Contacts.Phones.CONTENT_URI URI cho bng lin kt hnh i din vi tn ngi l: android.provider.Contacts.Photos.CONTENT_URI
Tm kim 1 Content Provider

bt u tm kim (query) 1 content provider, trc nht ngi lp trnh cn c trong tay cc yu t sau: URI xc nh provider. Tn cc trng (field) d liu s ly v. Cc kiu d liu ca nhng trng trn.

ID, ch khi cn tm 1 record xc nh no . bt u tm kim, ngi lp trnh c th dng 1 trong 2 phng thc: ContentResolver.query() hoc Activity.managedQuery(). C 2 phng thc trn u c chung arguments v u tr v 1 i tng con tr (Cursor)

public final Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) public final Cursor managedQuery (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

u tin, d vi query() hay managedQuery() th ta u cn cung cp URI ca bn cung cp, tc CONTENT_URI. Ch nu mun gii hn ch tm kim 1 URI duy nht, ta thm ID vo cuiURI nh sau: content://.../23, vi 23 l ID ta cn tm kim Hoc ta c th dng cc hm h tr nh ContentUris.withAppended() v Uri.withAppendedPath(). V d: Uri myPerson ContentUris.withAppendedId(People.CONTENT_URI,23); =

Cc bin truyn vo khc ca query() v managedQuery() l: projection - Tn ca ct d liu cn tr v. Nu NULL th tr v tt c cc ct. selection - Tn cc hng d liu s tr v. S dng vi WHERE ging nh khi truy vn SQL. Nu NULL th tr v tt c cc hng. selectionArgs - quy nh gi tr tr v,VD: selectionArgs = {value_as_string} s p kiu d liu tr v di dng string. sortOrder - Xc nh th t sp xp cc hng. S dng vi ORDER BY ging nh khi truy vn SQL. Nu NULL th khng theo th t g c.
To mi 1 Content provider

to mi 1 content provider, cn phi tho mn cc iu kin:

Thit lp h thng lu tr d liu nh th no: bng cc file hay s dng c s d liu SQLite. Extend lp ContentProvider. Khai bo 1 content provider trong file AndroidManifest.xml nh ngha 1 lp con ContentProvider, ta cn hin thc 6 phng thc tru tng (abstract) c khai bo trong lp ContentProvider: query() insert() update() delete() getType() onCreate() Phng thc query() phi tr v 1 i tng Cursor. Mc d Cursor v c bn l 1 interface, Android cung cp sn 1 s i tng Cursor to sn. V d; SQLiteCursor dnh cho c s d liu SQLite, MatrixCursor cho d liu khng lu trong SQLite. Android cng khuyn nn gi ContentResover.notifyChange() bo cho cc listeners bitd liu s c hiu chnh. Ngoi ra ngi lp trnh cng nn thm vi thao tc sau gip vic truy xut cc lp hiu qu hn: nh ngha mt Uri dng public static final, vi tn l CONTENT_URI (nh trnh by trn). nh ngha tn cc ct m content provider s tr v. Thg thng th y cng chnh l tn cc ct trong c s d liu SQLite m chng i din. Tip theo, ngi lp trnh nn nh ngha cc public static String constants cac1 ng dng khc c th ghi r tn cc ct v cc hng dn khc 1 ct interger tn "_id" (vi constant _ID) cng cn c nh nghia s dng khi cn ly v cc record c nht. Trong SQLite, trng _ID nn c kiu nh sau:INTEGER PRIMARY KEY AUTOINCREMENT, trong thnh phn AUTOINCREMENT khng nht thit phi c, nhng nn c a vo m bo cc ID lun c nht, trnh trng hp khi xa 1 row th ID ca row tip theo s c cp ID ging h ca row va b xa. Cc ghi ch gip ngi khc ghi c bit c d liu nh th no.

Nu content provider ny x l 1 kiu d liu hon ton mi, ngi lp trnh cn nh ngh 1 kiu MIME mi tr v trong s th hin ca ContentProvider.getType(). khai bo 1 Content Provider mi, trc nht cn phi khai bo trong tag <provider> ca file AndroidManifest.xml.

Hnh 15 - Khai bo tag <provider> trong file AndroidManifest.xml Trong , thuc tnh name l tn y ca lp con ContentProvider, v authorities l phn xc nh provider ca URI "content:"

View
View l thnh phn c bn xy dng giao din ngi dng cho 1 ng dng Android. View l 1 lp cn bn ca widgets (widgets c dng to cc nt nhn, text fields,...). Lp con ViewGroup l lp cn bn ca layouts, c th coi nh 1 ci hp v hnh cha nhiu Views hay ViewGroups khc v xc nh cc thuc tnh layout. S dng Views: Trong 1 ca s mn hnh, mi views u c sp xp theo th t trn 1 cy trong 1 hay nhiu file XML nm trong res/layout. Khi to 1 cy cha cc views, ngi lp trnh cn xc nh nhng gi tr sau: Cc thuc tnh - Chng hn nh xem 1 TextView s hin th ch g. Mi view c nhng thuc tnh v phng thc khc nhau. Mc tp trung (Focus) - Thay i s tp trung tu theo input ca ngi dng vi requestFocus(). Listeners - nh cc listeners c hnh ng khi 1 s kin g xy ra vi setOnFocusChangeListener(View.OnFocusChangeListener) Nhn thy hay khng - vi setVisibility(int)

Hnh 16 - V d 1 cy Views

Mt s Views thng dng: TextView: Hin th 1 khung text v cho php ngi dng thay i. ImageView: Hin th 1 hnh nh xc nh t file ti nguyn hay qua 1 content provider. Button: Hin th 1 nt nhn. Checkbox: Hin th 1 nt nhn vi 2 trng thi khc nhau. KeyboardView: Hin th bn phm o nhp liu. WebView: Hin th cc trang web bng Webkit.

Mt s ViewGroups thng dng: LinearLayout: Cc view c xp theo 1 hng hay 1 ct duy nht.

Hnh 17 - LinearLayout

AbsoluteLayout: Cho php xc nh chnh xc v tr ca tng view.

Hnh 18 - AbsoluteLayout

TableLayout: Sp xp cc view theo cc ct v hng. Mi hng c th c nhiu view, m mi view s to nn 1 .

Hnh 19 - TableLayout

RelativeLayout: Cho php xc nh v tr cc view theo mi quan h gia chng (VD; canh tri, phi,...)

Hnh 20 - RelativeLayout

FrameLayout: L 1 placeholder cho php t ln 1 view duy nht. View t ln FrameLayout lun c canh l tri pha trn.

Hnh 21 - FrameLayout

ScrollView: L 1 FrameLayout c bit cho php trt (scroll) 1 danh sch di hn kch thc mn hnh.

Hnh 22 - ScrollView

Lu tr d liu
Android c nhiu cch lu tr d liu. Mt cch n gin nht l s dng h thng preferences. Android cho php cc activity v ng dng lu gi preferences theo dng cp t kha v gi tr, nm gia cc ln gi mt activity. Mc ch chnh l lu tr thng tin cu hnh chi tit m ngi dng hiu chnh, chng hn trang web ngi dng xem gn y nht. Bn c th lu tr bt k thng tin no trong preferences bng t

kha c kiu String v kiu d liu nguyn thy (boolean, String) Preferences c th dng cho activity c lp hay c chia s gia cc activity ca mt ng dng. V tng lai, Preference c th c chia s gia cc ng dng vi nhau. Bn cnh vic s dng Preferences lu tr d liu th cng cn mt cch n gin khc thc hin cng vic lu tr d liu l s dng tp tin. Android cung cp 2 m hnh truy cp tp tin: Mt cho cc tp tin c ng gi sn cho ng dng. Mt dnh cho tp tin c to trn thit b thc thi ng dng . i vi d liu tnh, chng hn danh sch cc t dng kim tra chnh t. Cch n gin nht thc hin iu l lu vo mt tp tin, v tp tin ny phi c t trong th mc res/raw ca project. Nh vy, tp tin s c t trong tp tin APK ca ng dng nh mt ngun ti ngun c bn. Ngoi 2 phng php trn, Android cn h tr h qun tr c s d liu quan h SQLite qun l d liu ln v c quan h phc tp. Nh vy, ngi lp trnh c th thc hin qun l d liu mt cch d dng, linh hot hn.

H qun tr c s d liu SQLite SQLite l g


Khi lp trnh trn di ng hay cc thit b c dung lng b nh hn ch, ngi ta thng dng SQLite. SQLite l mt h qun tr c s d liu nhng c hin thc t chun SQL-92. Ging vi ci tn ca n, SQLite chim dung lng nh (khong 275KB) nn vic truy xut d liu c nhanh chng, khng chim dng qu nhiu ti nguyn h thng. Do SQLIte l phn mm m ngun m nn n khng b gii hn tc quyn. V l do m SQLite c nhiu hng s dng (Adobe, Apple, Google, Sun, Symbian) v cc d n m ngun m (Mozila, PHP, Python). c bit, i vi Android, SQLite rt thch hp to c s d liu cho cc ng dng trn nn Android. T khi SQLite c giao din SQL th n cng c s dng d dng v thng dng hn. Sqlite tuy nh hn so vi cc h c s d liu khc nhng cng khng khc bit nhiu. SQLite cng s dng ngn ng truy vn SQL (SELECT, INSERT, DELETE), thch hp cho cc ng dng trn in thoi, c bit l ng dng trn h iu hnh Android v Android Runtime c th cha c SQLite m khng cn phi chia nh ra.

SQLite c mt h thng culnhSQL y vi cc triggers, transactions... Cc cu truy vn cng nh cc h c s d liu khc. SQLite nh bn thu nh ca so vi cc h CSDL khc, v vy n khng th c y cc ch nng trn chic in thoi di ng ca bn. SQLite l mt la chn thch hp dnh cho ng dng trn h iu hnh Android. Ngoi dung lng lu tr nh gn, SQLite cn cho php s dng Unicode, kiu d liu khng c ci t trong mt s phin bn Android.

c trng ca SQLite
SQLite c hin thc t tiu chun SQL-92 ca mt ngn ng SQL nhng vn cn cha mt s khim khuyt. Tuy SQLite h tr triggers nhng bn khng th vit trigger cho view. Hoc SQLite khng h tr lnh ALTER TABLE, do , bn khng th thc hin chnh sa hoc xa ct trong bng. SQLite khng h tr rng buc kha ngoi , cc transactions lng nhau, php kt right outer join, full outer join. SQLite s dng kiu d liu khc bit so vi h qun tr c s d liu tng ng. Bn c th insert d liu kiu string vo ct kiu integer m khng gp phi bt k li no. Vi tin trnh hoc lung c th truy cp ti cng mt c s d liu. Vic c d liu c th chy song song, cn vic ghi d liu th khng c php chy ng thi. Ngoi cc khim khuyt trn th Sqlite cung cp cho ngi dng gn nh y cc chng nng m mt h c s d liu cn c nh to database; to bng; thm, xa, sa d liu.

SQLite Manager

SQLite Manager l cng c hiu qu h tr cho vic xy dng c s d liu cho ng dng Android l SQLite Manager, mt add-on min ph ca Firefox (https:// addons.mozilla.org/en-US/firefox/addon/5817)

Hnh 23 - Mn hnh lm vic ca addon SQlite Manager

S dng SQLite Manager qun l c s d liu Android

To database mi : Vo menu Database/ New Database To bng mi: Ti Database va to, nhp chut phi chn Create table. Thit lp cc gi tr thch hp. X l d liu: Chn bng cn nhp v chn tab Browse & Search Nt Add: Thm d liu Nt Duplicate: Nhn i d liu

Nt Edit: Chnh sa d liu Nt Delete: xa d liu Thc thi cu truy vn: Chn tab Execute SQL, Nhp cu lnh SQL vo khung Enter SQL v chn Run SQL. Kt qu s c trnh by khung pha di. Nu cu SQL c li s c hin th ti Last Error. Ty chnh Database: Chn tab DB Settings v thit lp cc gi tr nh mong mun Import Database vo ng dng Android Sau khi to CSDL bng SQLite Manager,chn menu File/Export Database. Lu file .sql va to vo my. import database vo ng dng, ngi lp trnh cn : Build and Run chng trnh Android. Khi ng my o xong, chn nt DDMS gc trn bn phi chng trnh Eclipse xem cu trc file. Vo th mc cha database c dng dn nh sau : /data/data/your.app.package/databases/your-db-name Sau chn nt import v chn tp tin database. Lu : Phi i tn file t *.sql thnh * trc khi import vo chng trnh.

You might also like