Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 18

andbook Android Programing (Vietnamese version anhtn.bk@gmail.

com)

Li ni u / c ti liu ny th no Ti liu ny c vit cho cc nh pht trin lm vic vi cc ng dng Java trc v mun bt u vi nn tng Android. Ti c gng to ra n nh l mt cun s tay, lu gi cc on m v d mi ni m n ph hp. Ngoi ra, ti cng c gng chn nhiu cc hnh nh nh c th bi chng lm cho qu trnh hc tp tr nn sng ng v th gin mt ca ngi c. Nhng tht khng may, lp trnh khng phi l tt c; c mt s th c bn ca nn tng Android cn phi hc c th hiu mt cch y . y l nhng g s c m t trong nhng trang u tin ca ti liu ny. Thc s th khng cn thit phi c tt c cc trang trong ti liu ny, tuy nhin n kh l li ch. Bn c th dng n nh mt kiu ti liu tham kho. Nhng g bn s c trong cng c gii thch khi chng xut hin trong qu trnh tin trnh thc thi thc t (hands-on process). Tt c cc on m bn thy trong ti liu ny (bao gm c cc workspace ca chng) c th c ly ti: http://andbook.anddev.org/sources/ Gii thiu Open Handset Alliance pht hnh Google Android SDK vo ngy 12/11/2007, mt vi tun sau khi gii thiu v n. S kin ny gy nn mt tc ng khng th tin ni, hu nh mi trang tin tc v IT u b ln t bi cc thng tin v vic pht hnh SDK Google Group trn ngp vi trn 2000 thng ip ch trong hai ngy u tin. tng ca nn tng Android v vn lm sng st mi ngi v cc kha hc vn thu ht nhiu hn v nhiu hn na cc lp trnh vin mi ngy. c bit, kin trc m da trn Intents v kh nng thay th ngay c cc Home-application (cc ng dng mc nh cho cc tc v chnh ca h iu hnh) to ra mt nn tng thc s mm do. Android l g mt GPhone ? Mt vi tun v vi thng trc khi Google pht hnh Android SDK c rt nhiu tin n v mt th c gi l GPhone. N ni v mt thit b c ch to bi Google cung cp tnh nng lin lc min ph bng cch hin th cc ni dung qung co ph thuc vo tng hon cnh ti ngi dng trn chnh thit b. Nhng vo 5/11/2007 Andy Rubin (trng nhm pht trin Android) ni rng : Nn tng Android c tham vng v gi tr hn nhiu mt chic in thoi.

powered by anddev.org

Page 1

Google vi Open Handset Alliance (OHA) to ra mt h thng phn mm hon chnh cho cc thit b di ng: mt h iu hnh, thnh phn giao tip phn cng v cc ng dng di ng. Nhng g c cng b mt vi tun sau cha phi l sn phm cui cng, nhng vi First Look SDK c nhiu th cha c thc hin. Cc trang tin tc chnh a tin v s kh chu ca mt vi nh pht trin ni rng Android c qu nhiu bug v thiu cc ti liu tham kho (documentation). Nhng hu ht ni rng Android khng c nhiu bug hn cc nn tng phn mm khc mc ny. Android from above Cng nhn nhn v cc c im m OHA lm ni bt trn tng Android: Tnh m Android c xy dng t di ln cho php nh pht trin to ra cc ng dng di ng hp dn mang y cc li ch ca mt thit b cm tay. N c xy dng hon ton m. V d, mt ng dng c th gi ti mt vi chc nng c bn ca in thoi nh thc hin cc cuc gi, gi tin nhn vn bn, hoc s dng camera, cho php nh pht trin to ra cc ng dng phong ph cho ngi dng. iu ny l ng, l mt nh pht trin bn c th lm mi th, t gi mt tin nhn ngn gn vi 2 dng code ti thay th c hnh nn giao din chnh ca thit b ca bn. C th d dng to ra mt h iu hnh hon ton ty bin trong mt vi tun, cung cp nhng tnh nng m cc ng dng mc nh ca Google khng c ti ngi dng. Android c xy dng da trn nhn Linux. Ngoi ra, n s dng mt my o ring c thit k ti u ha vic s dng b nh v cc ti nguyn phn cng trn mi trng di ng. Android l m ngun m, n c th c ty m rng thm vo cc cng ngh mi. Nn tng ny s cn tip tc pht trin cng vi cc nh pht trin xy dng nn cc ng dng di ng sng to, mi m hn. y, Google ang ni v ci c gi l my o Dalvik (DalvikVM), y l mt my o register-based, c thit k bi Dan Bornstein v cc k s khc ca Google, mt thnh phn rt quan trng ca nn tng Android. Ni cch khc, register-based m chng ta ni u l khc so vi my o Java thng thng (trn cc h thng Windows, Linux ca Sun). Tt c cc ng dng c to ra ging nhau Android khng c s khc nhau gia cc ng dng c bn ca in thoi (phones core apps) v cc ng dng ca bn th ba. Tt c chng u c xy dng truy cp theo cch thc ging nhau ti cc tnh nng ca in thoi cung cp

cho ngi dng mt di cc ng dng v dch v phong ph. Vi cc thit b c xy dng trn nn tng Android, ngi dng c ton quyn ty chnh in thoi cho ph hp s thch ca h. H c th thay i hnh nn, cch hin th b quay s hoc mt vi ng dng. Thm ch h c th ci t in thoi s dng ng dng xem nh yu thch ca chnh h hin th cho tt c cc bc nh thay cho ng dng mc nh ca h iu hnh. Mt ln na, tt c iu ny l ng. Cc nh pht trin c th ty chnh 100% cc thit b Android. H thng lin lc ca Android c bn da trn ci c gi l Intents, c th nhiu hoc t hn mt mt hnh ng cn c x l. Mt v d cho iu ny l: android.provider.Telephony.SMS_RECEIVED One can simply listen on that Intent by writing about 5 lines of definitions (khng hiu phi dch th no ? :D). H thng sau s nhn ra rng c nhiu hn mt ng dng mun x l Intent ny v ngh ngi dng la chn mt th m anh ta hoc c ta s thch x l Intent. Ph v cc ro cn ng dng Android ph v cc ro cn xy dng cc ng dng mi v sng to. V d, mt nh pht trin c th kt hp thng tin t trang web vi d liu trn mt thit b di ng nh danh b ngi dng, lch, hoc v tr a l cung cp cc kinh nghim chnh xc hn ti ngi dng. Vi Android, mt nh pht trin c th xy dng mt ng dng cho php ngi dng xem v tr ca bn b h v thng bo khi h trong cc vng ln cn c c hi gp nhau. Nhanh chng v d dng pht trin ng dng Android cung cp mt lng ln cc th vin v cng c hu ch c th c s dng xy dng cc ng dng phong ph. V d, Android cho php nh pht trin ly thng tin v a im ca thit b, v cho php thit b giao tip vi mt peer-topeer social applications. Ngoi ra, Android cng bao gm mt tp cc cng c c xy dng t nn tng cung cp cho cc nh pht trin kh nng can thip su vo h thng, to ra cc ng dng c hiu sut cao. Kh Web 2.0 pht trin, vic to ra cc ng dng vi ni dung phong ph trong vng vi pht l iu hon ton c th. Android mang ti s pht trin vi mt tc khng tng. Cng xem xt mt v d: Mt ngy no ti tnh c bit n ng dng Buzzword DrivingDirections trong Android Documentation. Qu trnh pht trin ng dng trong bc nh (xem ti liu gc) mt khong 1 gi (bao gm c giao din ngi dng n gin v tt

c cc bc nh m bn thy). C th to ra mt ng dng phc tp nh th ny trn mt nn tng di ng khc ? Khng. Ngoi ra ng dng ny cng c th c ci tin vi v tr GPS hin ti ca thit b bng cch x l mt vi dng code. Google lm ni bt sc mnh ca Android trong vic cung cp dch v nh v. Google Maps hon ton mt m trn Android nh th n c pht trin cho chnh Android. N c th hon ton h tr phng to v cho php ko th bn bng cch thm ba k t trong on m Java ca ng dng Android mc nh v ba dng trong m XML. Mt c tnh th v khc d dng c s dng vi Android l Animations v trnh chiu a phng tin. T phin bn m5, Android SDK cha cc hm cho php pht cc d liu nh dng GeoCoding, sau m rng cho mp3, ogg-Vorbis, MIDI v mt s nh dng khc. Dalvik.equals(Java) == false Ti sao l Dalvik ? My o Dalvik c t bi Bornstein theo tn mt lng chi Iceland, ni t tin ca ng sng. Nh bn bit phn u, Dalvik l tn ca my o Android. N ch l mt my o thng dch thc thi cc file nh dng thc thi ca Dalvik (Dalvik Executable *.dex), mt nh dng c ti u ha cho lu tr v s dng b nh hiu qu. y l mt my o register-based, v n c th chy cc class c bin dch bi mt trnh bin dich Java c chuyn thnh nh dng tng thch vi n bi cng c dx. My o chy mc trn cng ca nhn Linux 2.6 v da trn cc chc nng pha di ca h thng (ging nh lung v trnh qun l b nh mc thp). DalvikVM cng c ti u ha chy a th hin vi mt very low memoryfootprint. Mt vi my o cung cp c ch bo v cc ng dng ca chng khng b nh hng bi mt ng dng gp li khc. S khc bit vi my o Java thng thng My o Java c th tm thy trn hu ht cc my tnh ngy nay l stack-based VM. DalvikVM th khc, l mt register-based, bi v mt vi x l di ng c ti u ha cho thao tc register-based. My o register-based cng cho php thi gian thc thi nhanh hn. The Android Code Challenge (ADC) The ADC l mt tng ca Google khuyn khch cng ng xy dng cc ng dng hp dn cho nn tng Android bng cch trao gii cho 50 ng dng thu ht nhiu nht.

Tt nhin, ADC vi hn 10 triu la tin thng ca n thc s hp dn vi cc nh pht trin phn mm to ra cc ng dng thc s hu ch. To ra cc ng dng Android Trong chng ny chng ta s tm hiu cch to ra mt ng dng Android. Gii phu mt ng dng Android C bn thnh phn trong vic xy dng mt ng dng Android: Activity Intent Receiver Service Content Provider

Khng phi mi ng dng u cn c bn phn trn, nhng ng dng ca bn s vit s l s kt hp ca mt vi phn trong chng. Mt khi bn quyt nh c cc thnh phn bn cn cho ng dng ca mnh, bn nn lit k chng trong mt file gi l AndroidManifest.xml. y l mt file XML ni bn khai bo cc thnh phn ca ng dng v cc tnh nng v cc yu cu ca chng. Chng ta s sm cp ti nhng g m AndroidManifest.xml chu trch nhim. Activity Activities l thnh phn thng s dng nht trong bn thnh phn xy dng ng dng Android. Mt activity thng thng l mt screen trong ng dng ca bn. Mi activity c thc thi bi mt lp k tha t lp c s Activity. Lp ca bn s hin th mt giao din ngi dng bao gm cc View v cc trnh p ng s kin. Hu ht cc ng dng cha nhiu cc screen. V d, mt ng dng tin nhn vn bn c th c mt screen hin th danh sch cc ti khon gi tin nhn i, v mt screen th hai vit tin nhn ti ti khon c chn, v mt screen khc hin th cc tin nhn c hoc thay i cc ci t. Mi mt screen s c ci t nh l mt activity. Di chuyn sang screen khc thc cht l bt u mt activity mi. Trong mt vi trng hp mt Activity c th tr v mt gi tr ti mt activity trc v d l mt activity cho php ngi dng chn mt bc nh s tr v bc nh c chn ti ngi gi. Khi mt screen mi c m ra, screen trc c tm dng v a vo trong history stack. Ngi dng c th di chuyn ngc li ti screen trc c m trong lch s. Cc screen cng c th chn xa hn khi history stack khi n khng cn ph hp khi chng tr li. Android ghi nh li cc history stack cho mi ng dng c np t mn hnh chnh.

Intent v Intent Filters Android s dng mt lp c bit gi l Intent di chuyn t screen ny sang screen khc. Intent m t ci m mt ng dng mun lm. Hai thnh phn quan trng nht ca ca mt cu trc d liu intent l hnh ng v d liu. Cc gi tr c trng cho hnh ng l MAIN, VIEW, PICK, EDIT D liu c lu gi di dng mt URI. V d, hin th mt website trong mt trnh duyt, bn c th to ra mt Intent vi hnh ng VIEW v tp d liu ti Website-URI. New Intent(android.content.Intent.VIEW_ACTION, ContentURI.create(http://anddev.org)); C mt lp lin kt gi l IntentFilter. Trong khi mt intent l c tc dng nh l mt yu cu lm mt cng vic g , mt intent filter l mt m t ca ci m intents ca mt activity c kh nng x l. Mt activity hin th thng tin lin lc cho mt ngi s cng b mt IntentFilter ni rng n bit lm th no x l hnh ng VIEW khi nhn c d liu m t v ngi . Cc activity cng b cc IntentFilter ca chng trong AndroidManifest.xml file. Di chuyn gia cc screen l hon ton ph thuc vo vic gii quyt cc intent. di chuyn tin, mt activity gi startActivity(myIntent). H thng sau s tm kim intent filter cho tt c cc ng dng c ci t v chn ly activity m intent filter ca n ph hp nht vi myIntent. Activity mi c thng bo v ni dung ca intent, l nguyn nhn m n c a ra. Trnh gii quyt cc intent xut hin thi im chy khi startActivity c gi, n c hai li ch: Cc activity c th ti s dng cc chc nng t mt thnh phn khc n gin bng cch to ra mt yu cu trong form ca mt Intent. Cc activity c th c thay th bt k lc no bi mt Activity mi vi mt IntentFilter tng ng.

Intent Receiver Bn c th s dng IntentReceiver khi bn mun on m trong ng dng ca mnh c thc hin phn ng li mt s kin t bn ngoi, v d, khi chung in thoi ku, hoc khi d liu trn mng c nhn, hoc vo lc na m. Intent receiver khng hin th mt UI, mc d chng cng c th hin th mt Notification thng bo cho ngi dng nu mt vi th xut hin. Intent receiver cng c ng k trong AndroidManifest.xml, nhng bn cng c th ng k chung t code s dng Context.registerReceiver(). ng dng ca bn khng cn thit phi ang chy intent receiver ca n c gi; h thng s khi ng ng dng ca bn, nu cn, khi mt intent receiver c kch hot. Cc ng dng cng c th gi

qung b intent ca Content.broadcastIntent(). Service

chnh

chng

ti

cc

ng

dng

khc

vi

Mt Service l mt on m long-lived v chy m khng cn c mt UI. Mt v d tt v service l mt media player ang pht cc bi ht t mt playlist. Trong mt ng dng media player, hu nh chc chn s c mt hoc nhiu cc activity cho php ngi dng chn cc bi ht v pht chng. Tuy nhin, music playback bn thn chng khng nn c x l bi mt activity bi v ngi dng s mong mun l bi nhc s tip tc c pht ngay c khi chuyn sang mt screen mi. Trong trng hp ny, media player activity c th bt u mt service s dng Context.startService() chy ngm v gi cho bi ht c pht lin mch. H thng s gi cho music playback service chy cho ti n hon thnh (bn c th hc thm v quyn u tin cho cc service trong h thng bng cch c Life Cycle of an Android Application). Ch l bn c th cn kt ni ti mt service (v bt u n nu n cha c bt u) vi phng thc Context.bindService(). Khi kt ni ti mt service, bn c th giao tip vi n thng qua mt giao din c cung cp bi service. V d vi music service, giao din s cho php bn tm dng, tip tc pht bi ht Content Provider Cc ng dng c th cha cc d liu ca chng trong cc file, mt CSDL SQL thu gn, hoc mt vi c ch khc. Tuy nhin, mt content provider li rt hu dng nu bn mun d liu trong ng dng ca mnh c th c chia s vi ng dng khc. Mt content provider l mt lp thc thi mt tp cc phng thc chun cho php cc ng dng khc lu tr v ly ra cc kiu ca d liu c x l bi content provider ny. Android User Interface UI trong Android c th c xy dng theo hai cch, nh ngha m XML hoc vit m Java. nh ngha cu trc giao din trong XML l c khuyn co bi v n tun theo m hnh Model-View-Control quy nh rng giao din lun nn c tch ri vi cc phn chng trnh logic. Ngoi ra, vi m XML vic p ng giao din ca mt chng trnh vi cc mn hnh phn gii khc nhau l d dng hn nhiu. nh ngha mt UI trong XML l rt n gin nh to mt ti liu HTML thng thng. Hy xem mt Androids XML-Layouts. Mi thnh phn u c cu trc cht ch v c th c m rng theo cu trc cy:
<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World"/> </LinearLayout>

Cu trc phn cp ca cc thnh phn Screen Thnh phn thc thi c bn ca mt ng dng Android l cc activity mt i tng ca lp android.app.Activity. Mt activity c th lm nhiu th, nhng bn thn chng khng c s hin din trn screen. lm cho cc activity ca bn c mt screen presence (s hin din trn mn hnh) v thit kt giao din cho n, bn cn lm vic vi cc view v viewgroups thnh phn c bn ca giao din ngi dng c s dng trong Android. Views Mt view l mt i tng k tha t lp c s android.view.View. N l mt cu trc d liu m cc thuc tnh cha layout v ni dung cho mt vng hnh ch nht xc nh trn mn hnh. Mt i tng View x l measuring, layout, drawing, thay i focus, scrolling v cc hnh ng tc ng ln vng mn hnh m n biu din. Lp View cng c dng nh l mt lp c s cho tt c cc widget mt tp cc lp con c thc thi y v cc thnh phn tng tc mn hnh. Cc Widget x l measuring v drawing ca chnh chng, bn c th s dng chng xy dng giao din ca bn nhanh hn. Danh sch cc widget c th s dng nh: TextView, EditText, Button, RadioButton, Checkbox, ScrollView, Viewgroups Mt viewgroup l mt i tng ca lp android.view.Viewgroup. Ging nh tn ca n ch ra, mt viewgroup l mt kiu c bit ca mt i tng view m chc nng ca n l cha v qun l mt tp cc view v viewgroup con, Viewgroup cho php bn thm kt cu cho giao din ca bn v xy dng cc thnh phn screen phc tp nh l mt thc th n.

Lp Viewgroup cng l lp c s cho cc layout, mt tp cc lp con c thc thi y cung cp cc kiu b tr mn hnh thng thng nht. Cc layout mang ti cho bn mt cch xy dng mt cu trc cho mt tp cc view. A Tree-Structured UI Trn nn tng Android, bn nh ngha mt giao din ngi dng ca Activity s dng mt cy ca cc nt l cc view v viewgroup, nh hin th trong s di y. Cy ny c th n gin hay phc tp ty vo nhng g bn cn to ra n, v bn c th xy dng n s dng tp cc widget v layout c xy dng sn ca Android hoc cc kiu view ty chnh do chnh bn to ra.

gn mt cy hin th ti mt screen, Activity ca bn gi phng thc setContentView() ca n v a vo mt tham chiu ti i tng nt gc ca cy. Mt khi h thng Android tham chiu ti i tng nt gc, n c th lm vic trc tip vi cc nt lm v cc hin th c th ca cy. Khi Activity ca bn c kch hot v nhn c focus, h thng thng bo ti activity ca bn v yu cu nt gc nh gi v v cy. Nt gc sau yu cu cc nt con ca n t v chng ln lt, mi nt viewgroup trong cy l chu trch nhim vic v ca cc nt con trc tip ca n. Nh nhc ti phn trc, mi view group chu trch nhim nh gi vng trng cho php ca n, cc layout ca con n, v gi ti draw() trn mi con cho php n t v. Nt con c th yu cu v kch thc v v tr ca n trong cha, nhng i tng s c quyt nh cui cng v kch thc ca con ti mi v tr. So snh cc thnh phn giao din ca Android v Java Swing Mt vi nh pht trin c ti liu ny tng lm vic vi cc thnh phn giao din Swing trc y a ra mt vi s ging nhau gia Android v Java Swing:

Cc Activity trong Android l gn ging vi JFrame trong Swing Views v JComponent TextViews v JLabel EditTexts v JTextField Button v JButton

Thit lp b lng nghe s kin ti mt View l kh ging nhau gia Android v Swing:
// Android myView.setOnClickListener(new OnClickListener(){ ... // Swing myButton.addActionListener(new ActionListener() {...

File AndroidManifest.xml AndroidManifest.xml l mt file cn thit cho mi ng dng Android. N cha trong th mc root ca ng dng, v m t cc gi tr ton cc cho cc package ca bn, bao gm cc thnh phn ng dng (activity, service, etc) m package cng khai vi bn ngoi, kiu ca d liu cho mi Activity c th x l, v lm th no chng c th c kch hot. Mt iu quan trng khi cp ti file ny l cc IntentFilter ca n. Cc b lc m t ni no v khi no activity c th c bt u. Khi mt acivity (hoc h iu hnh) mun thc thi mt hnh ng nh l mm t trang Web hoc m mt mn hnh la chn danh b, n to ra mt i tng Intent. i tng intent ny c th gi mt s thng tin m t nhng g bn mun lm, nhng d liu g cn thit hon thnh n vi mt s t thng tin khc. Android so snh thng tin trong mt i tng Intent vi nhng g intent filter cng b bi mi ng dng v tm kim activity thch hp nht x l d liu hoc thc thi mt hnh ng c bit bi ngi gi. Nu c nhiu hn mt ng dng c kh nng x l Intent ny, ngi dng s nhn c mt ngh la chn ng dng m anh ta mun s dng x l. Ngoi ra, file ny cng m t cc Activity, Content Provider, Service, Intent Receiver, bn cng c th xc nh quyn hn trong AndroidManifest.xml. Mt

file

AndroidManifest.xml

gin

dng

nh

sau

Hu nh mi file AndroidManifest.xml s cha m t v khng gian tn (namespace) (xmlns:android=http://schemas.android.com/apk/res/android) trong thnh phn u tin ca n. M t ny cho php s dng mt lot cc thuc tnh (cc attribute trong XML element) chun a dng ca Android, l nhng thuc tnh hu ch c s dng cung cp d liu cho hu ht cc thnh phn trong file ny. Hu ht mi manifest cng bao gm mt tag <application> cha mt vi tag m t v Application, IntentReceiver, etc c s dng trong ng dng ny. Nu bn mun to ra mt Acitivity cho php kch hot trc tip thng qua ngi dng, bn s cn phi n h tr mt MAIN action v LAUNCHER category. Kt qu nh hnh :

Sau y l danh sch chi tit v cu trc ca mt tp tin AndroidManifest.xml, m t tt c cc <tags> c sn, vi cc v d tng ng: <manifest>

y l nt gc ca mi file AndroidManifest.xml. N cha thuc tnh gi (packageattribute), ch ti mt vi package pha ngoi Activity. Cc ng dn cho cc Activity s l ng dn tng i da trn gi tr package-attribute ny. <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.anddev.android.smstretcher"> <user-permission> M t mt s cho php bo mt m package ca bn cn phi c cp cho php n hot ng mt cch chnh xc (v d nh khi bn mun gi SMS hoc s dng danh b in thoi). Cc quyn hn c cp bi ngi dng trong sut qu trnh ci t ng dng ca bn. <uses-permission android:name=" android.permission.RECEIVE_SMS"/> <permission> M t mt s cho php bo mt c th c s dng hn ch cc ng dng c th truy cp vo cc thnh phn v cc tnh nng trong package ca bn (hoc khc). S lng: 0+ <instrumentation> M t m ca mt thnh phn thit b c sn kim tra cc tnh nng ca gi ny hoc gi khc. S lng: 0+

<application> Thnh phn gc cha cc m t ca cc thnh phn mc ng dng cha trong package. Thnh phn ny cng c th bao gm cc thuc tnh ton cc v/hoc cc thnh phn mc nh ca ng dng nh label, icon, theme, quyn hn cn c, etc. S lng: 0 hoc 1 <application android:icon="@drawable/icon"> Bn c th c 0+ cho mi thnh phn con sau y : <activity> Activity l thnh phn chnh ca mt ng dng tng tc vi ngi dng. Mn hnh ban u ngi dng nhn thy khi kch hot mt ng dng l mt activity, v hu ht cc mn hnh khc h s dng s c ci t l cc activity ring bit c m t vi cc tag activity

<activity android:name=".Welcome" android:label="@string/app_name"> Ch : mi activity phi c mt <activity> tag trong manifest cho d l n s c cng khai vi th gii bn ngoi hay ch c nh s dng trong package ca n. Nu mt Activity khng c tag tng ng trong manifest, bn s khng th kch hot hay s dng n. Ty chn, h tr tm kim mun vo thi gian chy, bn c th thm 1+ thnh phn <intent-filter> m t cc action m activity h tr <intent-filter> M t mt kiu Intent m mt component h tr. Cc gi tr kiu khc nhau c th c xc nh di thnh phn ny, cc thuc tnh c th c ly t y cung cp duy nht mt label, icon, hoc thng tin khc cho hnh ng c m t. <action> Mt kiu action m component h tr. V d: <action android:name="android.intent.action.MAIN" /> <category> Mt kiu category cc component h tr. V d: <category android:name="android.intent.category.LAUNCHER" /> <data> Mt kiu MIME (xem MIME-header trn Internet bit thm), URI scheme, URI authority hoc URI path m cc component h tr. Bn cng c th thm 1+ thnh phn meta-data trong activity ca bn: <meta-data> Thm mt mnh thng tin d liu cho activity cc client c th ly v thng qua ComponentInfo.metaData (gn ging metadata trong cc HTML document). <receiver> Mt IntentReceiver cho php mt ng dng lng nghe v nhng s thay i trn d liu hoc cc hnh ng xy ra, ngay c khi n ang khng chy. Ging nh vi activity tag, bn c th ty chn thm 1+ thnh phn <intent-filter> m receiver h

tr hoc cc gi tr <meta-data>, chng c ngha tng t nh vi khi t trong <activity>. <receiver android:name=".SMSReceiver"> <service> Mt Service l mt thnh phn c th chy ngm trong mt khong thi gian. Ging nh vi cc activity tag, bn c th ty chn thm mt hoc nhiu cc thnh phn <intent-filter> m service h tr hoc cc gi tr <meta-data>. <provider> Mt ContentProvider l mt thnh phn qun l bo m ton vn d liu v xut bn cho php cc ng dng khc truy cp ti chng. Bn cng c th ty chn thm mt hoc nhiu cc gi tr <meta-data> ging nh trn. D nhin, mi mt tag trn s cn c mt tag ng </closed> hoc ng trc tip <directly/>.

Resources and the magic R.java Cc ti nguyn ca mt d n v file R.java c quan h rt cht ch vi nhau. Cc ti nguyn (Resources) Cc ti nguyn l cc file m rng (khng phi cc file m ngun) c s dng bi cc on m ng dng ca bn v c bin dch vo trong ng dng giai on bin dch. Android h tr mt s lng cc kiu file khc nhau bao gm: XML, PNG v JPEG file. Cc file XML c rt nhiu nh dng khc nhau ty thuc vo ci m chng m t. Cc ti nguyn nm ngoi m ngun, v cc file XML c bin dch thnh dng nh phn, nh dng cho php np nhanh chng tng hiu sut. Cc chui cng c nn thnh mt dng s dng hiu qu hn. Danh sch cc ti nguyn Cc kiu ti nguyn v ni m chng c t: Cc file lay-out -> /res/layout/ Images -> /res/drawable/ Animations -> /res/anim/ Styles, strings, arrays -> /res/values/ : c nh ngha bi cc file XML Raw file nh mp3 hoc video -> /res/raw/

S dng cc ti nguyn trong code: S dng cc ti nguyn trong code ch l vn cn phi bit c mt tham chiu y ti ID ca ti nguyn v kiu i tng m ti nguyn ca bn c bin dch. y l mt c php tham chiu ti mt ti nguyn: android.R.resource_type.resource_name hoc R.resource_type.resource_name resource_type l mt lp con ca R gi kiu xc nh ca resource.resource_name l tn thuc tnh cho ti nguyn c nh ngha trong cc file XML hoc tn file (khng c phn m rng) cho cc ti nguyn c nh ngha bi cc kiu file khc. Mi kiu ti nguyn s c thm vo thnh mt lp con xc nh ca lp R, ph thuc vo kiu ti nguyn ca n. Cc ti nguyn c bin dch bi chnh ng dng ca bn c th c tham chiu ti m khng cn c tn package (n gin nh R.resource_type.resource_name). Android cha mt s cc ti nguyn chun nh screen style v button background. ch ti chng trong code, bn phi xc nh chng vi ch th gi android u, nh v d sau: android.R.drawable.button_background. Tham chiu ti cc ti nguyn Mt gi tr cung cp trong mt thuc tnh (hoc ti nguyn) cng c th l mt tham chiu ti mt ti nguyn khc. y l cch thng xuyn c s dng trong cc file layout cung cp cc chui (m chng nh v c) v cc image (tn ti trong mt file khc), mc d mt tham chiu c th l bt k loi ti nguyn no bao gm c cc color v s nguyn. V d, nu chng ta c cc ti nguyn v mu, chng ta c th vit mt file layout cha cc thit lp v kch thc v mu ca vn bn l cc gi tr c cha trong cc ti nguyn khc: <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/opaque_red" android:text="Hello, World!" />

Ch l y l vic s dng tin t @ ch ti mt ti nguyn c tham chiu, theo sau l tn ti nguyn tham chiu dng @[package:]type/name. Trong trng hp ny chng ta khng xc nh r mt package bi v chng ta tham chiu ti mt ti nguyn trong chnh package hin ti ca chng ta (package ca ng dng). tham chiu ti mt ti nguyn ca h thng, bn cn phi vit: <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@android:color/opaque_red" android:text="Hello, World!" /> Mt v d khc, bn lun lun nn s dng mt ti nguyn tham chiu khi cung cp cc chui trong mt file layout bit v tr. <EditText android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@android:color/opaque_red" android:text="@string/hello_world" />

Alternate Resources & Localization Ti nguyn thay th v a phng ha l mt gii php rt hu ch bn s thch vi Android. Gi s bn phi thit k mt GUI khp vi khung cnh v nh hng mn hnh cng mt lc iu ny gn nh l khng th. Bn c th cung cp cc ti nguyn khc cho ng dng ca bn cho ph hp vi ngn ng giao din hoc cu hnh phn cng ca thit b. Ch rng bn c th thm vo bao gm cc chui, layout, v tt c cc ti nguyn khc, nhng SDK khng cung cp cc phng thc cho php bn xc nh chnh xc ti nguyn no s c thit lp s dng. Android pht hin thit lp ring ph hp cho phn cng v v tr, v np chng. Ch ngi dng c th la chn thit lp ngn ng thay th s dng panel ci t trn thit b. bao gm cc ti nguyn thay th, to ra cc th mc ti nguyn song song vi mt s qualifier c thm vo tn ca th mc xc nh cu hnh m n s c

p dng (v d nh ngn ng, nh hng mn hnh ngang-dc, dpi, phn gii, ). V d, y l mt d n khc nhau gia ting Anh v ting c: MyApp/ Res/ Values-en/ Strings.xml Values-de/ Strings.xml Android cung cp mt vi kiu qualifier, vi cc gi tr khc nhau. s dung, thm chng vo cui ca tn th mc ngn cch bi du gch ngang. Bn c th thm nhiu qualifier cho mi mt tn th mc, nhng chng phi xut hin theo th t chng c lit k y. V d, mt th mc cha cc ti nguyn cho v c cu hnh xc nh y s ging nh sau: MyApp/ res/ drawable-en-rUS-port-92dpi-finger-keyshidden-12key-dpad-480x320/ Thng thng, bn s ch xc nh mt vi ty chn cu hnh c th m c nh ngha cho ti nguyn . Bn c th b bt k mt trong cc gi tr ny t danh sch hon chnh, min l cc gi tr cn li vn theo ng th t. V d: MyApp/ res/ drawable-en-rUS-finger/ drawable-port/ drawable-port-160dpi/ drawable-qwerty/ Android s la chn cc file ti nguyn ph hp nht vo thi gian chy ph thuc v cu hnh hin ti trn thit b. The magic R.java

Mt file R.java ca mt d n l mt file c sinh t ng nh ch mc cho tt c cc ti nguyn ca d n ca bn. Bn s dng lp ny trong m ngun nh l mt cch ngn gn tham chiu ti cc ti nguyn bn thm vo trong d n ca bn. iu ny s tr nn rt mnh m vi cc tnh nng hon thnh code ca cc IDE nh Eclipse bi v n cho php bn nhanh chng tng tc v xc nh v tr tham chiu bn ang tm kim. Ngoi ra, bn c c thi gian bin dch an ton m cc ti nguyn bn mun s dng thc s tn ti. Hello World The Android way. (t phn ny v sau l hng dn ci t s dng v vit ng dng HelloWorld nn b qua :D)

You might also like