82
1/82 ANDROID DEVELOPMENT Vuk Janjić [[email protected]]

Android Tutorial(1)

Embed Size (px)

Citation preview

1/82ANDROID DEVELOPMENTVuk Janji[[email protected]]2/82ToC4INTRO1USER INTERFACE2ADDITIONAL API FEATURES3DEBUGGING5OPTIMISATIONS6ANATOMY OF AN APPLICATION3/82Intro | quick start Android S! "So#$%are evelopmen$ !i$& J! A' "Android evelopmen$ 'ool() *clip(e +* plu,-in&./82Intro | platform ovrvi!//82Intro | platform ovrvi!0/82Intro | platform ovrvi! alvik V12 op$imi(ed $o run on (lo%-cpu) lo%-ram) lo%-po%er device(2 run( .de3 #ile( "no$ .cla((/.jar&2 1ul$iple in($ance( o# V1 can run in parallel4/82Intro | "vm vs# $vm re,i($er-5a(ed v(. ($ack-5a(ed2 re,i($er-5a(ed V1( allo% #or #a($er e3ecu$ion $ime() 5u$2 pro,ram( are lar,er %6en compiled. e3ecu$ion environmen$ - mul$iple v(. (in,le in($ance8/82Intro | $ava vs# an"roi" api Since i$ u(e( Java compiler) i$ implici$l7 (uppor$( a (e$ o# Java command( 8ompa$i5le %i$6 Java S*/ code A (u5(e$ o# Apac6e 9armon7 "open (ource) #ree Java implemen$a$ion& 1ul$i$6readin, a( $ime-(licn,. alvik implemen$( $6e ke7%ord synchronized and java.util.concurrent.* packa,e Suppor$( re#le3ion and #inali:er( 5u$ $6e(e are no$ recomended oe( no$ (uppor$2 a%$) (%in,) rmi) apple$) ...;/824INTRO1USER INTERFACE2ADDITIONAL API FEATURES3DEBUGGING5OPTIMISATIONS6ANATOMY OF AN APPLICATION1tate$Bundle saved;nstance>tate% !super.on(estore;nstance>tate$saved;nstance>tate%;value - saved;nstance>tate.get>tring$.key1%;valueA - saved;nstance>tate.get@loatArray$.keyA1%;*14/82Apps | intnt Allo%( communica$ion 5e$%een componen$(2 1e((a,e pa((in,2 =undle;ntent intent - ne' ;ntent$CurrentActivity.this? #therActivity.class%;startActivity$intent%;18/82Apps | intnt"#verridepulic void onCreate$Bundle saved;nstance>tate% !super.onCreate$saved;nstance>tate%;setContent&ie'$(.layout.main%;// Button listenerButton tn>tart - $Button% )ind&ie'By;d$(.id.tn7start%;tn>tart.set#nClick5istener$ne' &ie'.#nClick5istener$% ! pulic void onClick$&ie' vie'% ! ;ntent intent - ne' ;ntent$CurrentActivity.this? #therActivity.class%;startActivity$intent%; **%;*1;/82Apps | t&ra"Button tnBlay - $Button% )ind&ie'By;d$(.id.tnBlay%;tnBlay.set#nClick5istener$ne' &ie'.#nClick5istener$% !pulic void onClick$&ie' vie'%!// Cain 8hread locks8hread ackgroundCusic8hread - ne' 8hread$ne' (unnale$% ! pulic void run$% ! playCusic$%; **%; ackgroundCusic8hread.start$%;**%;2ervice done1? 8oast.5E:H8D75#:H%.sho'$%;**20/82Apps | notifications 'oa($ Aler$ialo, Ao$i#ica$ion8oast.make8ext$this? .:oti)ication text1? 8oast.5E:H8D7>D#(8%.sho'$%;24/82Apps | manifst+,xml version-./.01 encoding-.ut)231,4+mani)est xmlns6android-.http6//schemas.android.com/apk/res/android1package-.uk.ac.ic.doc1 android6versionCode-./1android6version:ame-./.014+application android6icon-."dra'ale/icon1 android6lael-."string/app7name14 +activity android6name-..>ampleActivity1android6lael-."string/activity7title7text7re)14 +intent2)ilter4/* ... */ +/intent2)ilter4 +/activity4+/application4+uses2sdk android6min>dk&ersion-.J1 /4+/mani)est428/82Apps | rsourcs /re(2 anim2 dra%a5le 6dpi mdpi ldpi2 la7ou$2 value( arra7(.3ml color(.3ml ($rin,(.3ml2 3ml2 ra%2;/82Apps | R#$ava Au$o,enera$ed) 5e($ i# no$ manuall7 edi$ed ,en/3tate% !super.onCreate$saved;nstance>tate%;setContent&ie'$(.layout.grid%;Hrid&ie' gridvie' - $Hrid&ie'% )ind&ie'By;d$(.id.gridvie'%; gridvie'.setAdapter$ne' Adapter@orHrid&ie'$this%%;gridvie'.set#n;temClick5istener$ ne' #n;temClick5istener$% !pulic void on;temClick$Adapter&ie'+,4 parent? &ie' v? int pos? long id% ! 8oast.make8ext$ HridBrimer.this? MM 9 pos? 8oast.5E:H8D7>D#(8%.sho'$%; **%;* 34/82Elmnts an" la%outs Frid Vie%/* Adapter@orHrid&ie'.java */pulic class Adapter@orHrid&ie' extends BaseAdapter !private Context mContext;pulic Adapter@orHrid&ie'$Context c% ! mContext - c; *pulic int getCount$% ! return m8hum;Is.length; *pulic #ject get;tem$int position% ! return null;*pulic long get;tem;d$int position% ! return 0; *// ad get&ie' implementationpulic &ie' get&ie'$int pos? &ie' convert&ie'? &ie'Hroup parent% !;mage&ie' image&ie' - ne' ;mage&ie'$mContext%;image&ie'.set;mage(esource$m8hum;Ispec$.ta/1%.set;ndicator$ .Artists1? get(esources$%.getIra'ale$(.dra'ale.selector/%% .setContent$intent%; taDost.add8a$spec%; //222 ta / 222 taDost.setCurrent8a$A%;*.2/82Elmnts an" la%outs Di($ Vie%/* list7item.xml */+,xml version-./.01 encoding-.ut)231,4+8ext&ie'android6layout7'idth-.)ill7parent1android6layout7height-.)ill7parent1android6padding-./0dp1android6text>ize-./Psp1 /4.3/82Elmnts an" la%outs Di($ Vie%/* 5ist&ie'Example.java */pulic class 5ist&ie'Example extends 5istActivity !"#verridepulic void onCreate$Bundle saved;nstance>tate% ! super.onCreate$saved;nstance>tate%; set5istAdapter$ne' ArrayAdapter+>tring4$this? (.layout.list7item? C#F:8(;E>%%; 5ist&ie' lv - get5ist&ie'$%;lv.set8ext@ilterEnaled$true%;lv.set#n;temClick5istener$ne' #n;temClick5istener$% !pulic void on;temClick$Adapter&ie'+,4 parent? &ie' vie'? int position? long id% ! 8oast.make8ext$getApplicationContext$%? $$8ext&ie'% vie'%.get8ext$%? 8oast.5E:H8D7>D#(8%.sho'$%; **%;*../82Elmnts an" la%outs =u$$on +ma,e=u$$on *di$'e3$ 86eck=o3 Eadio=u$$on 'o,,le=u$$on Ea$in,=ar.//82Elmnts an" la%outs a$eGicker 'imeGicker Spinner Au$o8omple$e Faller7 1apVie% ?e5Vie%.0/82Evnts *ven$ 9andler2 9ard%are 5u$$on( *ven$ Di($ener2 'ouc6 (creen.4/82Evnts !e7*ven$ i( (en$ $o call5ack me$6od(2 on!e7Bp"&) on!e7o%n"&) on!e7Don,pre(("&2 on'rack5all*ven$"&) on'ouc6*ven$"&pulic oolean onEeyIo'n$int keyCode? EeyEvent event% !i) $keyCode -- EeyEvent.EEQC#IE7CACE(A% !return true; // consumes the event *return super.onEeyIo'n$keyCode? event%;*Button utton - $Button% )ind&ie'By;d$(.id.utton%;utton.set#nClick5istener$ne' &ie'.#nClick5istener$% ! pulic void onClick$&ie' vie'% ! /* ... */ **%;.8/82Evntspulic class 8ouchExample extends Activity !"#verridepulic void onCreate$Bundle saved;nstance>tate% ! super.onCreate$saved;nstance>tate%; setContent&ie'$(.layout.main%; Button utton - $Button% )ind&ie'By;d$(.id.utton%; utton.set#nClick5istener$ne' #nClick5istener$% !pulic void onClick$&ie' v% ! /*...*/ * *%; utton.set#n5ongClick5istener$ne' #n5ongClick5istener$% !pulic oolean on5ongClick$&ie' v% ! // ...return true;* *%;**.;/82Mnus @p$ion( 1enuH 1*AB 5u$$on) $ied $o an Ac$ivi$7 8on$e3$ 1enuH Vie% Don,Gre(( Su5menupulic oolean onCreate#ptionsCenu$Cenu menu% !menu.add$0? CE:F7AII? 0? .Add1% .set;con$(.dra'ale.icon%;menu.add$0? CE:F7KA55BABE(? 0? .Kallpaper1%;return super.onCreate#ptionsCenu$menu%;*pulic oolean on#ptions;tem>elected$Cenu;tem item% !s'itch$item.get;tem;d$%% ! case CE:F7AII6 //... ; return true; case CE:F7KA55BABE(6 //... ; return true; de)ault6 return )alse;**pulic void onCreate$Bundle saved;nstance>tate% !register@orContextCenu$$&ie'%)ind&ie'By;d$/*...*/%%;*pulic void onCreateContextCenu$ContextCenu menu? &ie' v? ContextCenu;n)o menu;n)o%!super.onCreateContextCenu$menu? v? menu;n)o%;menu.add$0? CE:F7>C>? 0? .>C>1%;menu.add$0? CE:F7ECA;5? 0? .Email1%;*pulic oolean onContext;tem>elected$Cenu;tem item% !s'itch$item.get;tem;d$%% ! case CE:F7>C>6 /*...*/ **/tring message7text - ....1;moj>C>.send8extCessage$to7'hom? null? message7text? null? null%;+uses2permission android6name-.android.permission.>E:I7>C>1 /4+uses2permission android6name-.android.permission.(ECE;&E7>C>1 /4Array5ist+>tring4 multi>C> - my>C>.divideCessage$poruka%;my>C>.sendCultipart8extCessage$to7'hom? null? multi>C>? null? null%;03/82Mor on API | smsBroadcast(eceiver receiver - ne' Broadcast(eceiver$% !"#verridepulic void on(eceive$Context c? ;ntent in% ! i)$in.getAction$%.eGuals$(ECE;&EI7AC8;#:%% !Bundle undle - in.getExtras$%;i)$undleN-null% !#jectharedBre)erences pre)s - get>haredBre)erences$.:ame1? C#IE7B(;&A8E%;Editor mEditor - pre)s.edit$%;mEditor.put>tring$.username1? username%;mEditor.put>tring$.pass'ord1? pass'ord%;mEditor.commit$%;>haredBre)erences pre)s - get>haredBre)erences$.:ame1? C#IE7B(;&A8E%;>tring username - pre)s.get>tring$.username1? .1%;>tring pass'ord - pre)s.get>tring$.pass'ord1? .1%;04/82Mor on API | sqlit *ac6 applica$ion 6a( i$( o%n = "can 5e (6ared& /da$a/da$a/L7ouCpacka,eM/da$a5a(e( 8an2 8rea$e a d52 @pen a d52 8rea$e $a5le(2 +n(er$ da$a in$o $a5le(2 Ke$c6 da$a #rom $a5le(2 8lo(e a d5 =a(icall7) SND (7n$a308/82Mor on API | contntProvi"r Since ever7 applica$ion i( (and5o3ed) $6i( i( Android( mec6ani(m %6ic6 rela$e( da$a acro(( app( EeJuired acce(( privile,e( mu($ 5e declared in 1ani#e($ and approved 57 u(er durin, in($alla$ion0;/82Mor on API | $ava#io#-il@ile;nput>tream )is - open@ile;nput$.some7)ile.txt1%;@ile#utput>tream )os - open@ile#utput$.some7)ile.txt1?Context.C#IE7K#(5I7K(;8EAB5E%;Bitmap slika;@ile#utput>tream ne'7pro)ile7image - open@ile#utput$.ne'7image.png1?Context.C#IE7K#(5I7K(;8EAB5E%;[email protected]:H? /00? ne'7pro)ile7image%;out.)lush$%;out.close$%;;nput>tream is - this.get(esource$%.open(a'(esource$(.ra'.some7ra'7)ile%;4