Android Programming


Published on

Mobile Programming with Android course slides. Course contains about 260 PowerPoint slides, exercise materials and 70 example projects.

Published in: Technology, Education

Android Programming

  1. 1. Android  Programming   Pasi  Manninen     JAMK  University  of  Applied  Sciences   Slide  version  Nov  20th,  2013    
  2. 2. 1.  Android  IntroducDon   What  is  Android?   Android  Version  History   Features   Development  Framework  and   Android  SoMware  Stack   •  A  few  important  Android  terms  to   understand   •  Android  ApplicaDon  Fundamentals   •  •  •  •  Android  Programming,  Pasi  Manninen.   2  
  3. 3. What  is  Android?   •  1.  A  free  open-­‐source  operaDng  system  for  mobile  devices   •  2.  An  open-­‐source  development  pla.orm  for  creaDng   mobile  and  applicaDons   •  3.  Devices  that  runs  Android  applicaDons   •  Allows  coding  with  Java  language   •  Based  on  the  Linux  kernel   •  Open  (all  features  are  open  to  developer)   •  All  applicaDons  are  equal  (core  and  3th  party)   •  Really  fast  and  easy  applicaDon  development   •  Developed  by  Google  and  the  Open  Handset  Alliance,  OHA   •  Announced  5th  Nov,  2007   •  h[p://       Android  Programming,  Pasi  Manninen.   3  
  4. 4. Open  Handset  Alliance     •  OHA,  Group  of  technology  and  mobile   companies   •  Android  is  the  first  complete,  open,  and  free   mobile  pla`orm  provided  by  OHA   •  The  goal  is  offer  richer  experience  with  mobile   devices  (with  open  standards)   •  Handset  manufacturers  don’t  need  to  pay  any   lisencing  fees  to  load  Android  on  their  devices   •  h[p://   Android  Programming,  Pasi  Manninen.   4  
  5. 5. Android  Version  History   •  Android  has  seen  a  number  of  updates  since   its  original  release  (July  22nd,  2013):                   h[p://     Android  Programming,  Pasi  Manninen.   5  
  6. 6. NaDve  Android  ApplicaDons   •  •  •  •  •  •  •  •  •  •  •  •  •  An  e-­‐mail  client   An  SMS  management  applicaDon   A  full  PIM  (Calendar,  Contacts,  ...)   A  WebKit-­‐based  wed  browser   A  music  player  and  picture  gallery   A  Camera  and  video  recording  apps   The  Home  Screen   The  Android  Market  (Google  mobile)   Google  Maps  (Google  mobile)   Gmail  Client  (Google  Mobile)   Google  Talk  (Google  Mobile)   YouTube  video  Player  (Google  Mobile)   …   Android  Programming,  Pasi  Manninen.   6  
  7. 7. Features  (Android  SDK)   •  GSM,  EDGE,  3G,  Wi-­‐Fi  networks  for  telephony  or  data  transfer   •  LocaDon  based  services  as  GPS,  Google  Maps,  Geocoding   •  Full  mulDmedia  control  (playback  and  recording  with  camera  and   microphone),  formats  MPEG4,  H.264,MP3,AAC,AMR,JPG,PNG,GIF...   •  Sensors,  accelerometers,  compass   •  Bluetooth   •  Shared  data  stores  (SQLite,  Preferenses,  Content  Providers)   •  Home-­‐Screen  widgets,  Live  Folders,  Live  Wallpapers   •  An  integrated  WebKit-­‐based  browser   •  Hardware  accelerated  graphics  (OpenGL  ES  2.0)   •  Background  applicaDons  and  processes   •  No  licensing,  distribuDon  or  development  fees   •  …   Android  Programming,  Pasi  Manninen.   7  
  8. 8. Development  Framework   •  Android  applicaDons  are  wri[en  with  Java   •  Programs  are  executed  in  custom  virtual  machine   called  Dalvik   •  Each  applicaDon  runs  its  own  process  in  Dalvik   •  SDK  gives  all  what  you  need  start  developing,  tesDng   and  debugging  your  applicaDon   –  Android  API   –  Development  tools   –  Android  Virtual  Device  Manager  and  Emulator   –  Full  documentaDon  with  sample  codes   –  Online  support  h[p://     Android  Programming,  Pasi  Manninen.   8  
  9. 9. Android  SoMware  Stack   Android  Programming,  Pasi  Manninen.   9  
  10. 10. A  few  important  Android  “terms”   •  AcDvity   –  •  ApplicaDon  Class   –  •  A  component  that  does  nothing  but  receive  and  react  to  broadcast  announcements   Views   –  –  •  ”intenDon”  to  do  some  work  in  your  applicaDon   Asynchronous  messages  which  holds  the  content  of  the  message   IntentReceiver   –  •  Makes  a  specific  set  of  the  applicaDon's  data  available  to  other  applicaDons   Intent   –  –  •  Doesn’t  have  visual  interface,  runs  background  for  an  indefinite  period  of  Dme   ContentProvider   –  •  Differences  to  AcDvity  based  applicaDons:  maintain  applicaDon  state  and  it  is  easy  to  transfer  objects  and   use  resources  between  components   Service   –  •  A  single  visual  user  interface,  applicaDon  is  made  up  of  one  or  more  AcDviDes   User  interface  elements  like  a  Bu[on  or  a  Label  or  lots  of  other  UI  elements   Hierarchical  structure   Home  Screen  Widgets   –   ApplicaDons  that  can  be  run  in  Android  devices  home  screen  (can  be  an  entry  point  to  real  applicaDon  also)   Android  Programming,  Pasi  Manninen.   10  
  11. 11. Android  ApplicaDon  Fundamentals   •  Android  applicaDon  lives  in  its  own  world   –  Every  applicaDon  runs  in  its  own  process   –  Each  applicaDon  is  assigned  a  unique  Linux  user   ID,  applicaDon  files  are  visible  only  that  user  and   applicaDon  (permissions)   •  ApplicaDon  can  make  use  of  elements  of  other   applicaDons   •  System  must  be  able  to  start  an  applicaDon   process  when  any  part  of  it  is  needed   Android  Programming,  Pasi  Manninen.   11  
  12. 12. 2.  Set  up  a  complete  Android   development  environment   •  •  •  •  System  requirements   Installing  Java     Serng  up  the  ADT  Bundle   Hands-­‐on  training:     –  Install  and  configure  Android  development   environment   Android  Programming,  Pasi  Manninen.   12  
  13. 13. System  Requirements   •  OperaDng  systems   –  Windows  XP  (32-­‐bit),  Vista  (32-­‐  or  64-­‐bit),  or   Windows  7  (32-­‐  or  64-­‐bit)   –  Mac  OS  X  10.5.8  or  later  (x86  only)   –  Linux  (tested  on  Ubuntu  Linux,  Lucid  Lynx)   •  Eclipse  IDE  3.6.2  or  later,  JDT-­‐plugin   •  JDK  6  (or  later)   Android  Programming,  Pasi  Manninen.   13  
  14. 14. Installing  Java     •  Needed  Java  JDK  can  be  download  from   Oracle  site:   –  h[p:// downloads/index.html     •  Remember  download  right  version  of  Java  (32   or  64  bit)   Android  Programming,  Pasi  Manninen.   14  
  15. 15. Serng  up  the  ADT  Bundle   •  To  get  started  go  to   –  h[p://   •  Download  the  SDK  and  unpack  the  ZIP  file  to   appropriate  locaDon   •  Open  Eclipse  from  eclipse  folder   •  Install  addiDonal  version  of  Android  or  other   needed  packages  with  SDK  Manager   Android  Programming,  Pasi  Manninen.   15  
  16. 16. Install  and  Configure  Android   development  environment   •  Hands-­‐on  training:   –  Download  and  install  Java  JDK   –  Download  and  install  the  Android  SDK  (it  installs   eclipse  too)   –  Start  eclipse  and  Android  SDK  Manager   –  Add  needed  Android  packages  and  other  extras   Android  Programming,  Pasi  Manninen.   16  
  17. 17. 3.  CreaDng  a  first  Android  ApplicaDon   •  •  •  •  CreaDng  Android  Project  in  Eclipse   Running  applicaDon  in  Emulator   Running  applicaDon  in  Device   Debugging  applicaDon   –  Eclipse  debug  perspecDve   –  Dalvik  Debug  Monitor  Service  (DDMS)   •  Hands-­‐on  training:     –  Hello  Android!   Android  Programming,  Pasi  Manninen.   17  
  18. 18. CreaDng  an  Android  Project  in  Eclipse   •  Android  project  contains   all  the  files  that  comprise   the  source  code  for  your   Android  app   •  Android  SDK  tools  make  it   easy  to  start  a  new   Android  project  with  a  set   of  default  project   directories  and  files   •  Select  File  >  New  >   Android  ApplicaDon   Project  from  Eclipse   •  A  few  dialogs  will  be  shown  to  configure  your   applicaDon  default  serngs   Android  Programming,  Pasi  Manninen.   18  
  19. 19. Running  applicaDon  in  Emulator   •  With  ADT  running  your  applicaDon  does   following:   –  Current  project  compiles  and  converts  to  Android   executable  (.dex)   –  Executable  and  resources  will  be  packed  into  an   Android  package  (.apk)   –  Selected  virtual  device  will  be  started  and  your   applicaDon  will  be  installed  and  started   •  Needed  emulators  (virtual  devices)  can  be   created  with  Android  Virtual  Device  Manager   (AVD)     Android  Programming,  Pasi  Manninen.   19  
  20. 20. Running  applicaDon  in  device   •  Device  has  to  be  plugged   to  development  machine   with  USB  cable   •  USB  debugging  has  to  be   enabled  in  device   •  Select  Run   ConfiguraDons…  and   choose  device  from   Android  Device  Chooser   Android  Programming,  Pasi  Manninen.   20  
  21. 21. Debugging  applicaDon   •  The  Debug  PerspecDve  in  Eclipse   –  Use  Debug,  Variables,  Breakpoints  and  LogCat   tabs  in  Eclipse   •  The  DDMS  (Dalvik  Debug  Monitor  Service)   PerspecDve   –  Show  the  AVDs  and  real  devices  list   –  Emulator  controls  (locaDon,  phone  call,  …)   –  Processes,  Threads,  heap,  memory  allocaDon,   files,  …   Android  Programming,  Pasi  Manninen.   21  
  22. 22. CreaDng  a  first  Android  ApplicaDon   •  Hands-­‐on  training  :  Hello  Android!   –  Create  a  new  Android  Project   –  Create  first  Android  ApplicaDon   –  Run,  debug  and  test  in  an     emulator  and  real  device   –  DDMS,  Dalvik  Debug   Monitor  Service   Android  Programming,  Pasi  Manninen.   22  
  23. 23. 4.  Publishing  ApplicaDon  to  Google   Play   •  ApplicaDon  Requirements   •  Signing  the  ApplicaDon   –  Strategy   –  Debug  and  Public  Release   •  Google  Play   –  ApplicaDon  LisDng   –  Uploading  a  new  ApplicaDon   Android  Programming,  Pasi  Manninen.   23  
  24. 24. ApplicaDon  Requirements   •  ApplicaDon  must  be  signed  with  private  key,  validity  period   ends  aMer  22  October  2033   •  ApplicaDon  must  define  both  an  android:versionCode  and   an  android:versionName  a[ribute  in  the  manifest  file   •  ApplicaDon  must  define  both  an  android:icon  and  an   android:label  a[ribute  in  the  <applica:on>  element  of  its   manifest   <manifest  xmlns:android="h[p://"                                        package="fi.ptm.nameday"                                            android:versionCode="8"                                              android:versionName="1.0.6">                                                <applicaDon  android:icon="@drawable/icon"                                                                                        android:label="@string/app_name">   ...   Android  Programming,  Pasi  Manninen.       24  
  25. 25. Signing  the  ApplicaDon   •  All  Android  apps  must  be  signed   –  the  system  will  not  install  an  applicaDon  that  is  not  signed   •  You  can  use  self-­‐signed  cerDficates  to  sign  your  applicaDons   –  no  cerDficate  authority  is  needed   •  ApplicaDon  must  be  signed  it  with  a  suitable  private  key  before   publishing  to  Android  Market   –  By  default  applicaDon  is  signed  with  debug  key  (generated  with  SDK   Tools  in  Eclipse)   •  The  system  tests  a  signer  cerDficate's  expiraDon  date  only  at  install   Dme   •  You  can  use  standard  tools  to  generate  keys  and  sign  your   applicaDon  .apk  files   –  Keytool  and  Jarsigner  (in  command  line)   –  ADT  Export  Wizard  in  Eclipse   Android  Programming,  Pasi  Manninen.   25  
  26. 26. Signing  Strategy   •  Use  same  cerDficate  for  all  applicaDons   –  applicaDon  upgrade  (seamless)   –  applicaDon  modularity  (same  process)   –  code  and  data  sharing  (through  permissions)   •  Validity  period  of  cerDficate  exceeds  the   expected  lifespan  of  applicaDon   –  validity  period  of  25  years  or  more  is  recommended   (no  upgrades)   –  Android  Market  (validity  period  ending  aMer  22   October  2033)   Android  Programming,  Pasi  Manninen.   26  
  27. 27. Signing  in  Debug  Mode   •  The  Android  build  tools  provide  a  debug  signing  mode   •  ADT  generates  a  debug  cerDficate  automaDcally  for   emulator  and  device     –  Keystore  name:  "debug.keystore"   –  Keystore  password:  "android"   –  Key  alias:  "androiddebugkey"   –  Key  password:  "android"   –  CN:  "CN=Android  Debug,O=Android,C=US“   –  Keystore  is  located  in  your  home  directory’s  .android  dir   •  Debug  cerDficates  expire  aMer  365  days  aMer  creaDon   Android  Programming,  Pasi  Manninen.   27  
  28. 28. Signing  Public  Release   •  •  •  •  •  Make  sure  that  your  applicaDon  is  ready   Obtain  a  suitable  private  key   Compile  applicaDon  in  release  mode   Sign  applicaDon  with  private  key   On  Eclipse  right-­‐click  on  your  project  folder   –  select  Android  Tools  >  Export  Unsigned   ApplicaDon  Package   –  select  File  >  Export  to  export  signed  APK,  select   Export  Android  ApplicaDon   Android  Programming,  Pasi  Manninen.   28  
  29. 29. Publish  -­‐  KeyStore   •  Create  a  new  KeyStore  if  needed   •  Remember  your   password   Android  Programming,  Pasi  Manninen.   29  
  30. 30. Publish  –  Key  CreaDon   •  KeyStore  Alias  for  later  use   •  Validity  period   •  Personal,  corporate  or   organizaDon   idenDficaDon   Android  Programming,  Pasi  Manninen.   30  
  31. 31. Publish  –  Signed  APK  File   •  Enter  desDnaDon  for  the  APK  file   •  APK  file  is  ready   to  publish  in     Android  Market   Android  Programming,  Pasi  Manninen.   31  
  32. 32. Google  Play   •  Google  Play  is  a  hosted  service   –  easy  for  users  to  find  and  download  Android  applicaDons   –  easy  for  developers  to  publish  their  applicaDons   •  To  publish  your  applicaDon  on  Google  Play   –  register  with  the  service  using  your  Google  account   –  agree  to  the  terms  of  service   –  developer  fee  is  $25  (Iphone  developer  cost  is  $99)   •  Once  published,  users  can  see  your  applicaDon,   download  it,  and  rate  it  using  the  Play  applicaDon   installed  on  their  Android-­‐powered  devices   •  h[ps://     Android  Programming,  Pasi  Manninen.   32  
  33. 33. ApplicaDon  LisDngs   •  All  applicaDons  are  listed  nicely  with  basic   informaDon   –  Name,  download  counts,  stars  and  so  on   Android  Programming,  Pasi  Manninen.   33  
  34. 34. Uploading  applicaDon   •  ApplicaDon  uploading   is  easy   •  You  can  add  a   screenshots  and   promoDonal     graphics   Android  Programming,  Pasi  Manninen.   34  
  35. 35. ApplicaDon  Details   •  Select:   –  languages   –  descripDon   –  app  type  and   category   –  price   –  protecDon   Android  Programming,  Pasi  Manninen.   35  
  36. 36. Contact  InformaDons   •  Select  Copy   protecDon   •  Give  contact   InformaDon   •  And     Publish!   Android  Programming,  Pasi  Manninen.   36  
  37. 37. 5.  Directory  Structure  of  an  Android   ApplicaDon  Project   •  Android  ApplicaDon  Project  folder   •  Android  ApplicaDon  Resources   •  Resource  examples:   –  strings.xml   –  colors.xml   •  AndroidManifest.xml   •  AndroidManifest.xml  example:   –  HelloAndroid  project   •  SupporDng  different  languages  and  hardwares   •  Exercise:  Texts,  colors  and  localizaDon   Android  Programming,  Pasi  Manninen.   37  
  38. 38. Android  ApplicaDon  Project  folder   •  Android  project  holds  all  the  code  and  resources  in   different  folders.   •  Some  of  the  folders  are  generated  by  default  and     some  has  to  be  done  by  self  if  needed     src    (all  source  codes)   gen  (Java  files  generated  by  ADT)   assets  (used  for  example  store  raw  asset  files)   bin  (output  directory,  apk  is  here)   res  (resources  of  the  applicaDon)   res/drawable  (image  and  image-­‐descriptor  files)   res/layout  (views  of  the  applicaDon)   res/menu  (applicaDon  menus)   res/values  (other  resources  of  the  applicaDon)   …   –  Strings,  styles,  colors  and  so  on...  (xml  based)   Android  Programming,  Pasi  Manninen.   38  
  39. 39. Android  ApplicaDon  Resources   •  It  is  good  to  keep  non-­‐code  resources  (images,  strings,  animaDon,  themes,   layouts)  external  to  code   •  Easy  to  maintain,  update  and  manage   •  Supports  different  devices  and  localizaDon   •  Android  selects  resources  dynamically  in  runDme  (no  need  to  code)   •  ApplicaDon  resources  are  stored  under  res/  folder   –  –  –  –  –  res/anim  (frame  by  frame  animaDons)   res/drawable  (bitmaps,  other  types  drawable  types)   res/layout  (UI  layouts)   res/menu  (menu  layouts)   res/values  (different  resources)  for  example   •  arrays.xml,  colors.xml,  dimens.xml,  strings.xml,  styles.xml,  themes.xml   –  res/xml  (arbitrary  XML  files)   •  •  Resources  can  be  used  from  code  or  from  other  recources   System  Resources  are  defined  under  android.R   Android  Programming,  Pasi  Manninen.   39  
  40. 40. Resource  example:  strings.xml   •  Easy  to  update  later,  localizaDon   <?xml  version="1.0"  encoding="u/-­‐8"?>   <resources>          <string  name="app_name">NameDay</string>          <string  name="widget_header">Nameday's</string>          <string  name="widget_footer">(c)  2013  PTM</string>   </resources>   Used  in  main.xml  layout  (for  example):   <TextView          android:id=”@+id/text”          android:text=”@string/widget_header”  />   //  Used  in  code:   CharSequence  str  =  getString(R.string.widget_header);   TextView  tv  =  (TextView)  findViewById(;   tv.setText(str);   Android  Programming,  Pasi  Manninen.   40  
  41. 41. Resource  example:  colors.xml   •  Stored  in  res/values  folder   •  It  is  good  pracDce  to  keep  all  color  values  in  same  file   •  Used  same  way  as  strings  in  earlier  example   <?xml  version="1.0"  encoding="u/-­‐8"?>   <resources>          <color  name="opaque_blue">#00F</color>          <color  name="transparent_green">#7700FF00</color>          <color  name="Ptle_color_dark">#FF860000</color>   </resources>   Android  Programming,  Pasi  Manninen.   41  
  42. 42. AndroidManifest.xml   •  ApplicaDon  descriptor  file   •  Defines  your  applicaDon   –  AcDviDes   –  ContentProviders   –  Services   –  Intent  Receivers   –  Permissions   –  Version  number   –   and  a  lots  of  more...   Android  Programming,  Pasi  Manninen.   42  
  43. 43. AndroidManifest.xml   example:  HelloAndroid  project   <?xml  version="1.0"  encoding="u/-­‐8"?>   <manifest  xmlns:android="hTp://"          package="fi.ptm.helloandroid"          android:versionCode="1"          android:versionName="1.0"  >            <uses-­‐sdk  android:minSdkVersion="16"  android:targetSdkVersion="17"  />            <applicaDon                  android:allowBackup="true"                  android:icon="@drawable/ic_launcher"                  android:label="@string/app_name"                  android:theme="@style/AppTheme"  >                  <acDvity                          android:name="fi.ptm.helloandroid.MainAcPvity"                          android:label="@string/app_name"  >                          <intent-­‐filter>                                  <acDon  android:name="android.intent.acPon.MAIN"  />                                  <category  android:name="android.intent.category.LAUNCHER"  />                          </intent-­‐filter>                  </acDvity>          </applicaDon>     </manifest>   Android  Programming,  Pasi  Manninen.   43  
  44. 44. Different  languages  and  hardware   •  Like  said  Android  has  dynamic  resource  selecDon   mechanism   •  All  is  done  with  using  directory  structure   •  Spesific  languages,  locaDons  and  hardware   •  AlternaDves  are  described  with  –  mark     For  example  project:   -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐   res/layout/main.xml   res/layout-­‐land/main.xml   res/values-­‐fi/strings.xml   res/values-­‐en/strings.xml   Android  Programming,  Pasi  Manninen.   44  
  45. 45. Support  different  screen  sizes   •  Portrait  and  lanscape  modes   can  be  easily  done  with   resources   •  Portrait  mode  is  created   automaDcally  when  project  is   done  (layout)   •  Create  a  new  folder  (layout-­‐ land)  for  landscape  acDviDes   •  Android  switches  layouts   automaDcally  when  new   mode  is  detected   Android  Programming,  Pasi  Manninen.   45  
  46. 46. Support  different  languages   •  Language  support  is  done   via  resources  also   •  Default  language  strings   are  stored  to  values  folder   •  Create  a  new  values-­‐ (language  code)  folder  for   all  supported  languages   –  For  example  values-­‐fi  for   Finnish   •  Android  automaDcally  uses   right  values  folder  if  device   switches  language   Android  Programming,  Pasi  Manninen.   46  
  47. 47. Exercise:  Texts,  Colors  and  LocalizaDon   •  Create  an  applicaDon  with  a  few  TextViews   with  different  colors  and  texts  (use  XML  files).   Make  a  few  localizaDon  test  (for  example  fi)   and  test  localizaDon  in  emulator.   Android  Programming,  Pasi  Manninen.   47  
  48. 48. 6.  AcDviDes  and  User  Interface   •  •  •  •  •  •  •  •  •  •  •  What  is  AcDvity?   AcDviDes  and  tasks   StarDng  process  and  threads   AcDvity  lifecycle   Declaring  acDvity  in  the  manifest   Basics  of  the  Views  and  Layouts   Defining  layouts  with  XML   How  Android  draws  a  view  (AcDvity)   Common  Layouts  and  Controls  with  examples   Handling  UI  events   Exercise:  Basic  UI  Controls   Android  Programming,  Pasi  Manninen.   48  
  49. 49. What  is  AcDvity?   •  ApplicaDon  component  (user  interface)  that  provides  a   screen  which  user  can  interact  to  do  something   •  ApplicaDon  usually  contains  a  mulDple  acDviDes  which   makes  the  whole  applicaDon   •  Typically,  one  acDvity  in  an  applicaDon  is  specified  as  the   main  acDvity,  which  is  presented  to  the  user  when   launching  the  applicaDon  for  the  first  Dme   •  Each  acDvity  can  then  start  another  acDvity  in  order  to   perform  different  acDons   •  AcDviDes  are  subclasses  from  AcDvity  class   •  Developer  implements  callback  methods  that  the  system   calls  different  states  of  the  applicaDon  (AcDvity)   Android  Programming,  Pasi  Manninen.   49  
  50. 50. AcDviDes  and  tasks   •  A  task  is  what  the  user  experiences  as  an  applicaDon   •  Task  is  like  a  collecDon  of  AcDvites  what  runs  in  same   applicaDon   •  All  acDviDes  are  set  in  the  stack   •  The  root  acDvity  in  the  stack  is  the  one  that  began  the  task   (the  applicaDon  launcher)   •  AcDvity  at  the  top  of  the  stack  is  one  that's  currently   running   •  The  previous  acDviDes  remains  in  the  stack  and  are  paused/ stopped  (acDvated  when  user  presses  back  bu[on)   •  By  default,  all  the  acDviDes  in  an  applicaDon  have  an   affinity  for  each  other  (name  of  the  .apk  package  name)   Android  Programming,  Pasi  Manninen.   50  
  51. 51. StarDng  process  and  threads   •  When  the  first  of  an  applicaDon's  components  needs  to  be   run,  Android  starts  a  Linux  process  for  it  with  a  single   thread  of  execuDon   •  The  process  where  a  component  runs  is  controlled  by  the   manifest  file     •    Note!   •  Android  may  decide  to  shut  down  a  process  at  some  point   •  Everything  runs  in  the  main  thread  (including  UI),  avoid   long  lasDng  operaDons   –  Maintain  UI  responsive   –  Use  another  thread  (AsyncTask)  for  the  long  operaDons   Android  Programming,  Pasi  Manninen.   51  
  52. 52. AcDvity  lifecycle   •  Three  main  states:  running,     paused  and  stopped   •  If  an  acDvity  is  paused  or     stopped,  the  system  can     drop  it  from  memory   •  Do  your  applicaDon  UI,   bind  Data  sources  and  event     handlers  in  onCreate()   •  AMer  onResume()  acDvity   is  visible  to  end  user   •  In  onPause()  save  criDcal   data  to  applicaDon’s  data  store   Note:  This  will  be  discussed  more  deeply  later…   Android  Programming,  Pasi  Manninen.   52  
  53. 53. Declaring  acDvity  in  the  manifest   •  AcDvity  has  to  be  declared  in  the  manifest  file   •  Use  android:name  a[ribute  to  specify  the  class   name  of  the  acDvity   •  Use  other  a[ributes  to  add  addiDonal   informaDon  of  the  acDvity  (label,  icon,  theme,  …)   •  Use  Intent  filters  if  you  want  to  make  your   acDvity  available  to  system  or  other  applicaDons   <acDvity                          android:name="fi.ptm.helloandroid.MainAcPvity”                          android:label="@string/app_name"  >                          <intent-­‐filter>                                  <acDon  android:name="android.intent.acPon.MAIN"  />                                  <category  android:name="android.intent.category.LAUNCHER"  />                          </intent-­‐filter>   </acDvity>   Android  Programming,  Pasi  Manninen.   53  
  54. 54. Basics  of  the  Views  and  Layouts   •  Android  applicaDon  UI  is  built   using  View  and  ViewGroup   objects   •  Bu[on,  Text  (and  so  on  UI   objects)  are  View’s  subclasses   and  they  are  called  as   ”widgets”  or  ”Views”   •  Layout  architectures  like   linear,  tabular  and  relaDve  are   ViewGroup’s  subclasses  and   they  are  called  as  “Layouts”   Android  Programming,  Pasi  Manninen.   54  
  55. 55. Defining  layouts  with  XML   •  Most  common  way  is  to  use  XML  layout  for   declaring  AcDvity  layout   •  Each  element  in  XML  is  either  a  View  or   ViewGroup  object     •  View  objects  are  leaves  in  the  tree,  ViewGroup   objects  are  branches  in  the  tree   •  The  name  of  an  XML  element  is  respecDve  to  the   Java  class  that  it  represents  like:  <TextView>   element  creates  a  TextView  in  your  UI   •  Layout  and  its  elements  can  be  instanDate  at   runDme  programmaDcally  also   Android  Programming,  Pasi  Manninen.   55  
  56. 56. How  Android  draws  a  view   •  A[ach  the  view  hierarchy  tree  to  the  screen,  AcDvity  must  call  the   setContentView()  method  and  pass  a  reference  to  the  root  node   object   •  The  draw()  method  of  a  View  is  called   •  Two  process:  measure  and  layout  pass   •  Mostly  used  layout  params:   –  Exact  number   –  match_parent,  view  wants  to  be  as  big  as  its  parent   –  wrap_content,  view  wants  to  be  just  big  enough  to  enclose  its  content   •  Size,  Padding,  Margins  is  used  like  in  HTML   •  Dimensions:  dp,  sp,  pt,  px,  mm  and  in   •  Different  Views  and  Layouts  has  its  own  subclass  of  Layout  Params   Android  Programming,  Pasi  Manninen.   56  
  57. 57. Common  Layouts   •  FrameLayout   –  a  blank  space  on  your  screen  that  you  can  later  fill  with  a  single  object   •  LinearLayout   –  aligns  all  children  in  a  single  direcDon  (verDcally  or  horizontally)   –  all  children  are  stacked  one  aMer  the  other   •  TableLayout   –  posiDons  its  children  into  rows  and  columns   –  doesn’t  display  border  lines  for  their  rows,  columns,  or  cells   •  RelaDveLayout   –  child  views  specify  their  posiDon  relaDve  to  the  parent  view  or  to  each   other   •  More:     –  Gallery,  GridView,  ListView,  ScrollView,  Spinner,  SurfaceView,   TabHost,  ViewFlipper,  ViewSwitcher,  Fragments,  WebView,…   Android  Programming,  Pasi  Manninen.   57  
  58. 58. LinearLayout  example   <!–  ac:vity_main.xml-­‐-­‐>   <LinearLayout  xmlns:android="hTp://"          xmlns:tools="hTp://”>          <TextView                  android:id="@+id/textView1"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:text="@string/hello_world"  />          <Bu[on                  android:id="@+id/buTon1"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content”                  android:text="@string/buTon_string"  />   </LinearLayout>   //  load  acDvity_main.xml   public  void  onCreate(Bundle  savedInstanceState)  {          super.onCreate(savedInstanceState);          setContentView(;   }   Android  Programming,  Pasi  Manninen.   58  
  59. 59. RelaDveLayout  example   <RelaDveLayout  xmlns:android="hTp://"          xmlns:tools="hTp://"          xmlns:ads="hTp://"          android:layout_width="match_parent"          android:layout_height="match_parent"          tools:context=".MainAcPvity"  >            <                    android:id="@+id/adView"                  android:layout_width="match_parent"                  android:layout_height="50dip"                  ads:adUnitId=”xxxxxxx"                  ads:adSize="BANNER"                  ads:testDevices="TEST_EMULATOR,  TEST_DEVICE_ID"                  ads:loadAdOnCreate="true"                  android:layout_alignParentBoOom="true"                  />     …   Android  Programming,  Pasi  Manninen.   59  
  60. 60. RelaDveLayout  example   …   <TableLayout          android:id="@+id/keypad"      android:orientaDon="verPcal"      android:layout_width="fill_parent"      android:layout_height="wrap_content”    android:stretchColumns="*”    android:layout_above="@+id/adView”>      <TableRow>    <Bu[on  android:id="@+id/keypad_1"  android:text="1"      android:onClick="buTonClicked"></BuTon>    <Bu[on  android:id="@+id/keypad_2"  android:text=“2"      android:onClick="buTonClicked"></BuTon>    …    </TableRow>      …   </TableLayout>   …     Android  Programming,  Pasi  Manninen.   60  
  61. 61. RelaDveLayout  example   …   <HorizontalScrollView                android:id="@+id/scrollView"                android:layout_width="fill_parent"                android:layout_height="75dp"                android:layout_above="@+id/keypad"                android:paddingTop="2dp"                android:paddingBo[om="2dp"                >                <LinearLayout  android:id="@+id/linearLayoutOfImages"                          android:layout_width="fill_parent"                          android:layout_height="fill_parent"                          android:orientaDon="horizontal">                                            </LinearLayout>            </HorizontalScrollView>   …   Android  Programming,  Pasi  Manninen.   61  
  62. 62. RelaDveLayout  example   …   <fi.ptm.teksDtv.AspectRaDoImageView                android:layout_centerHorizontal="true"              android:id="@+id/imageView"              android:src="@drawable/ladataan"                android:layout_alignParentTop="true"                android:layout_height="wrap_content"              android:layout_width="match_parent"                android:adjustViewBounds="true"/>   <TextView                android:id="@+id/pageTitle"              android:layout_width="wrap_content"              android:layout_height="wrap_content"              android:layout_alignParentLeR="true"              android:text="100/01"              android:background="#FFFFFF"              android:textColor="#000000"/>    </RelaDveLayout>   Android  Programming,  Pasi  Manninen.   62  
  63. 63. Common  Input  Controls   •  Input  controls  are  the  interacDve   components  in  your  applicaDon’s  user   interface   •  Android  provides  a  wide  variety  of   controls  to  use  in  your  UI   –  Bu[ons,  text  fields,  seek  bars,  checkboxes,   spinners,  pickers  and  so  on…   •  All  controls  can  be  found  in  layout   pale[e   •  Use  drag  and  drop  to  set  controls  to   layout  or  edit  your  XML  file  directly   Android  Programming,  Pasi  Manninen.   63  
  64. 64. Handling  UI  Events   •  Many  ways  to  intercept  the  events  from  a   user's  interacDon  (depends  the  SDK  version)   •  The  approach  is  to  capture  the  events  from   the  specific  View  object  that  the  user  interacts   with   •  Use  different  EventListeners  with  code  or  in   XML   –  onClick,  onLongClick,  onFocusChange,  …   Android  Programming,  Pasi  Manninen.   64  
  65. 65. Example:  Handling  UI  Events   •  Only  with  coding   //  Create  an  implementaDon  of  OnClickListener   private  OnClickListener  buOon1Listener  =  new  OnClickListener()  {          public  void  onClick(View  v)  {                  //  Do  something  when  the  bu[on  is  clicked                  Toast.makeText(getApplicaDonContext(),  "Bu[on  1  clicked",                            Toast.LENGTH_SHORT).show();          }   };     @Override   protected  void  onCreate(Bundle  savedInstanceState)  {      super.onCreate(savedInstanceState);      setContentView(R.layout.acDvity_main);      //  Capture  our  bu[on  from  layout      Bu[on  buOon1  =  (Bu[on)findViewById([on1);      //  Register  the  onClick  listener  with  the  implementaDon  above      buOon1.setOnClickListener(buOon1Listener);   }   •  With  XML  and  code   <Bu[on                  android:id="@+id/bu[on2"                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:layout_below="@+id/bu[on1"                  android:layout_centerHorizontal="true"                  android:layout_marginTop="19dp"                  android:onClick="buOon2Clicked"                  android:text="OnClick  with  XML"  />   public  void  buOon2Clicked(View  view)  {      Toast.makeText(getApplicaDonContext(),              "Bu[on  2  clicked",  Toast.LENGTH_SHORT).show();   }   Android  Programming,  Pasi  Manninen.   65  
  66. 66. Bu[ons  Example   •  Different  bu[on  types   –  Bu[on  with  text   –  Bu[on  with  text  and  image   –  ImageBu[on  with  image   •  Responding  Click  Events   –  onClick   –  OnClickListener   Android  Programming,  Pasi  Manninen.   66  
  67. 67. Text  Fields  Example   •  Use  TextView  to  show  text   •  Use  EditText  to  ask  text  from  the  end  user   –  automaDcally  displays  the  keyboard   –  different  input  types  (android:inputType)   •  text,  textEmailAddress,  textUri,  number,  phone   •  textCapSentences,  textCapWords,   textAutoCorrecDon,  textPassword,     textMulDline   –  text  selecDon   •  cut,  copy,  paste   –  auto-­‐compleDon   •  use  AutoCompleteTextView   •  define  the  array  that  contains  all  text   suggesDons  in  strings  resource   •  create  String  based  Adapter  in  code  and   and  use  it  in  your  AutoCompleteTextView   Android  Programming,  Pasi  Manninen.   67  
  68. 68. CheckBoxes,  Radio  and  Toggle  Bu[ons   Example   •  Checkboxes  allow  the  user  to   select  one  or  more  opDons   from  a  set   •  Radio  bu[ons  allow  the  user   to  select  one  opDon  from  a  set   •  A  toggle  bu[on  or  switch   allows  the  user  to  change  a   serng  between  two  states   Android  Programming,  Pasi  Manninen.   68  
  69. 69. Spinner  Example   •  Provides  a  quick  way  to   select  one  value  from  a  set   •  Touching  the  spinner  displays   a  dropdown  menu  with  all   other  available  value  (user   can  select  one)   •  Define  String  resource  and   create  String  based  Adapter   in  code  and  use  it  to  your   Spinner   Android  Programming,  Pasi  Manninen.   69  
  70. 70. Pickers  Example   •  Android  provides  controls  for   the  user  to  pick  a  Dme  or  pick   a  date  as  ready-­‐to-­‐use  dialogs   •  Using  these  pickers  helps   ensure  that  your  users  can   pick  a  Dme  or  date  that  is   valid,  forma[ed  correctly,   and  adjusted  to  the  user's   locale   •  It  is  recommended  to  use   DialogFragment  to  display   Dme  or  date  picker     Android  Programming,  Pasi  Manninen.   70  
  71. 71. Exercise:  Basic  UI  Controls   •  RadioBu[ons  and  selecDon   •  Different  texts  controls   Android  Programming,  Pasi  Manninen.   71  
  72. 72. 7.  Menus,  NoDfying  and  Dialogs   •  Working  with  Menus   –  –  –  –  –  –  –  Using  OpDons  Menu   Example:  OpDons  Menu  with  XML   Contextual  Menus   Using  Context  Menu   Examples  with  Context  Menu   Using  Contextual  AcDon  Mode   Using  PopUp  Menu   •  NoDfying  the  User   •  NoDfying  the  user  with  Dialogs   –  NoDfying  with  the  Toast   –  Example:  Display  Toasts   –  Using  NoDficaDon  Area   –  –  –  –  –  –  –  CreaDng  a  Dialog   Examples:  AlertDialog  with  Bu[ons  and  List   Custom  Dialog  Layouts   Examples:  Custom  Dialog   Passing  Events  back  to  Dialog’s  Host   ProgressDialog,  ProgressBar  and  Indicators   Example:  ProgressBar   Android  Programming,  Pasi  Manninen.   72  
  73. 73. Working  with  Menus   •  OpDons  Menu   –  primary  set  of  menu  items  for  an  AcDvity   –  opened  by  pressing  the  device  MENU  key   –  two  groups  of  menu  items:     •  Icon  Menu   •  Expanded  Menu   •  Context  Menu   –  floaDng  list  of  menu  items     –  appear  when  you  perform  a  long-­‐press  on  a  View  (like  right  click  in  PC)   •  PopUp   –  a  modal  menu  anchored  to  a  View   –  appears  below  the  anchor  view  if  there  is  room,  or  above  the  view   otherwise   Android  Programming,  Pasi  Manninen.   73  
  74. 74. Using  OpDons  Menu   •  Implemented  by  onCreateOp:onsMenu()  callback,  which  receives   an  instance  of  Menu   •  Menu  can  be  structured  with  coding  or  using  XML  resource  (save  to   menu  folder)   •  Use  XML  to  get   –  easier  to  visualize  the  menu  structure     –  separates  the  content  for  the  menu  from  your  applicaDon's  behavioral   code   –  allows  you  to  create  alternaDve  menu  configuraDons  for  different   pla`orm     •  Menu  selecDon  will  call  onOp:onsItemSelected(MenuItem)   funcDon   •  Android  3.0  (API  level  11)  and  higher,  items  from  the  opDons  menu   can  be  available  in  the  acDons  bar   (android:showAsAcDon=“ifRoom”)   Android  Programming,  Pasi  Manninen.   74  
  75. 75. Example:  OpDons  Menu  with  XML   <!–  res/menu/main.xml  -­‐-­‐>   <menu          xmlns:android="hTp://"  >          <item                  android:id="@+id/acPon_video"                  android:orderInCategory="100"                  android:showAsAcDon="ifRoom"                  android:icon="@drawable/video"                  android:Dtle="@string/acPon_video"/>        <item  …        <item                  android:id="@+id/acPon_quit"                  android:orderInCategory="100"                  android:showAsAcDon="never"                  android:Dtle="@string/acPon_quit"/>   /*  Create  menu  items  */   public  boolean  onCreateOpDonsMenu(Menu  menu)  {            //  load  menu  from  resources            MenuInflater  inflater  =  getMenuInflater();            inflater.inflate(,  menu);            return  true;   }   Android  Programming,  Pasi  Manninen.   75  
  76. 76. Example:  OpDons  Menu  with  XML   •  Use  Resource  Id’s  in  onOpDonsItemSelected()        /**  Handle  item  selecDons  */          public  boolean  onOpDonsItemSelected(MenuItem  item)  {                  switch  (item.getItemId())  {                          case                                  Toast.makeText(getBaseContext(),  "Music",  Toast.LENGTH_SHORT).show();                                  return  true;                          case                                  Toast.makeText(getBaseContext(),  “Video",  Toast.LENGTH_SHORT).show();                                  return  true;                          case                                  Toast.makeText(getBaseContext(),  "Quit",  Toast.LENGTH_SHORT).show();                                  return  true;                  }                  return  false;          }   Android  Programming,  Pasi  Manninen.   76  
  77. 77. Contextual  Menus   •  Offers  acDons  that  affect  a  specific  item  or   context  frame  in  the  UI   •  OMen  used  with  List  or  Grid  Views   •  Two  different  ways  to  use   –  floaDng  context  menu  (list  of  menu  items  showed   when  user  performs  a  long  press),  one  selecDon   –  contextual  acDon  mode    (Android  3.0  or  higher),     with  mulDple  selecDon   Android  Programming,  Pasi  Manninen.   77  
  78. 78. Using  Context  Menu   •  Override  the  AcDvity's  context  menu  callback   methods:   –  onCreateContextMenu(ContextMenu,View,Conte xtMenuInfo)   –  onContextItemSelected(MenuItem)   •  Use  registerForContextMenu()  method  to   register  ContextMenu  to  View   •  Menu  can  be  structured  with  coding  or  using   XML  resource  (save  to  menu  folder)   Android  Programming,  Pasi  Manninen.   78  
  79. 79. Example:  Context  Menu   •  Populate  ListView  with  ArrayAdapter   •  AcDvity  should  extend  ListAcDvity   ListView  in  Layout   //  create  string  array   private  String  []  items=  {"John  Koch","Peter  Michell","Ina  kudson”};     @Override   public  void  onCreate(Bundle  savedInstanceState)  {          setListAdapter(new  ArrayAdapter<String>  (                  this,                  android.R.layout.simple_list_item_1,                  items));                  //  register  contextMenu  for  this  ListAcDvity                  registerForContextMenu(getListView());          }   Android  Programming,  Pasi  Manninen.   79  
  80. 80. Example:  Context  Menu   •  Context  Menu  menu  items  can  be  added  like   in  OpDons  Menu  (coding  or  XML)   Long  press  here   <?xml  version="1.0"  encoding="u/-­‐8"?>   <menu  …>          <item                  android:id="@+id/acPon_call"                  android:orderInCategory="100"                  android:Dtle="@string/acPon_call"/>          <item    ….               </menu>   @Override   public  void  onCreateContextMenu(ContextMenu  menu,  View  v,                                            ContextMenuInfo  menuInfo)  {          super.onCreateContextMenu(menu,  v,  menuInfo);          MenuInflater  inflater  =  getMenuInflater();          inflater.inflate(,  menu);   }   Android  Programming,  Pasi  Manninen.   80  
  81. 81. Example  Context  Menu   •  Get  the  selecDon  with  onContextItemSelected   @Override   public  boolean  onContextItemSelected(MenuItem  item)  {          //  context  menu  item          AdapterContextMenuInfo  info  =  (AdapterContextMenuInfo)                    item.getMenuInfo();          //  text  view  in  list          TextView  textView  =  (TextView)  info.targetView;          //  name  in  textview          String  name  =  textView.getText().toString();          //  acDon          switch  (item.getItemId())  {                  case                  Toast.makeText(getBaseContext(),  "Call  to  "+name,  Toast.LENGTH_SHORT).show();                  return  true;   ...   Android  Programming,  Pasi  Manninen.   81  
  82. 82. Using  Contextual  AcDon  Mode   •  In  specific  view   –  implement  AcDonMode.Callback   interface   •  specify  acDons  with  XML  resource   (menu)   •  respond  click  events  on  acDon   items   •  handle  prepare  and  destroy  events   –  call  startAcDonMode  to  show   the  acDon   •  Example  in  source  codes   Android  Programming,  Pasi  Manninen.   82  
  83. 83. Using  PopUp  Menu     •  Define  menu  with  XML   •  Call  PopUp  constructor  and   set  menu  item  click  listener   •  Show  PopUp  menu   •  Handle  selecDon  with   onMenuItemClick   •  Example  in  source  codes   Note:  This  is  not  the  same  as  a  context  menu,  which  is   generally  for  acPons  that  affect  selected  content.  For  acPons   that  affect  selected  content,  use  the  contextual  acPon  mode   or  floaPng  context  menu.   Android  Programming,  Pasi  Manninen.   83  
  84. 84. NoDfying  the  User   •  It  is  good  to  noDfy  the  user  about  an  event  that   occurs  in  your  applicaDon   –  Saving  a  file  is  complete   –  ApplicaDon  is  running  in  the  background  and  needs   response  from  user   –  ApplicaDon  is  performing  work  that  the  user  must   wait  for   •  Android  offers  a  few  basic  techniques:   –  Toast  NoDficaDon     –  Using  NoDficaDon  Area   –  Dialog  NoDficaDon   Android  Programming,  Pasi  Manninen.   84  
  85. 85. NoDfying  the  user  with  Toast   •  A  toast  noDficaDon  is  a  message  that  pops  up  on  the   window   •  Fills  the  amount  of  space  required  for  the  message   •  User's  current  acDvity  remains  visible  and  interac:ve   •  NoDficaDon  automaDcally  fades  in  and  out   •  Can  be     –  fired  from  background  service   –  posiDoned  differently   –  customized   Android  Programming,  Pasi  Manninen.   85  
  86. 86. Example:  Display  Toasts   //  get  applicaDon  context   Context  context  =  getApplicaDonContext();   //  toast  message   CharSequence  text  =  "Long  Toast";   //  duraDon   int  duraDon  =  Toast.LENGTH_SHORT;   //  create  toast   Toast  toast  =  Toast.makeText(context,text,duraPon);   //  show  toast;       //  or   Toast.makeText(context,text,duraDon).show();     //  posiDon  top  leM  corner   toast.setGravity(Gravity.BOTTOM|Gravity.LEFT,  0,  0);     Android  Programming,  Pasi  Manninen.   86  
  87. 87. Example:  Display  Custom  Toast   //  toast.xml  –  layout  file   <?xml  version="1.0"  encoding="UTF-­‐8"?>   <LinearLayout  …          android:id="@+id/toast”  …  >          <ImageView  android:id="@+id/image”  …  />          <TextView  android:id="@+id/text”  …/>   </LinearLayout>     get  layout  from  AcDvity   //   •  Make  layout   •  Get  layout  from   AcDvity   •  Set  Image  and  Text   •  Show  toast   LayoutInflater  inflater  =  getLayoutInflater();   //  inflate  layout  from  XML  (toast.xml)   View  layout  =  inflater.inflate(R.layout.toast,  (ViewGroup)  findViewById(;   //  get  image  from  resource   ImageView  image  =  (ImageView)  layout.findViewById(;   image.setImageResource(R.drawable.ptm);   //  set  text   TextView  text  =  (TextView)  layout.findViewById(;   text.setText("This  is  a  custom  PTM  toast!");   //  create  and  show  toast   Toast  toast  =  new  Toast(getApplicaDonContext());   toast.setGravity(Gravity.CENTER_VERTICAL,  0,  0);   toast.setDuraDon(Toast.LENGTH_LONG);   toast.setView(layout);;   Android  Programming,  Pasi  Manninen.   87  
  88. 88. Using  NoDficaDon  Area   •  Adds  an  icon  to  the  system's  status  bar  and  an  expanded   message  in  the  NoDficaDons  window   •  Configurable:  alert  the  user  with  a  sound,  vibraDon  or   flashing  light  in  device   •  Own  layout  can  be  used  like  in  Toast  NoDficaDons   •  Ideal  when  applicaDon  is  working  in  a  background  Service   and  needs  to  no:fy  the  user  about  an  event   •  When  the  user  selects  the  expanded  message,  Android   fires  an  Intent  that  is  defined  by  the  noDficaDon  (usually  to   launch  an  AcDvity)   •  Design  guidelines   –  h[p://[erns/ noDficaDons.html     Android  Programming,  Pasi  Manninen.   88  
  89. 89. Example:  NoDficaDon  Area   •  Create  noDficaDon  from  a  Bu[on   •  Open  AcDvity  from  noDficaDon   •  Programming   –  Use  NoDficaDonCombat.Builder  to   set  icon,  Dtle  and  text  of  noDficaDon   –  Use  TaskStackBuilder  and   PendingIntent  to  start  AcDvity  when   user  clicks  noDficaDon   –  Use  NoDficaDonManager  to  lauch   noDficaDon   Android  Programming,  Pasi  Manninen.   89  
  90. 90. NoDfying  the  user  with  Dialogs   •  Usually  appears  in  front  of  the  current  AcDvity   •  Underlying  AcDvity  loses  focus   •  Ask  user  to  make  a  decision  or  enter  addiDonal   informaDon   •  How  to   –  use  DialogFragment  as  a  container  of  your  dialog   –  use  AlertDialog  as  a  style  and  structure  of  your  dialog   –  use  DatePickerDialog  or  TimePickerDialog  in  special  case   –  Dialog  class  is  base  class  behind  all  dialogs   •  Design  guidelines   –  h[p://­‐blocks/ dialogs.html     Android  Programming,  Pasi  Manninen.   90  
  91. 91. CreaDng  a  Dialog   •  Extend  your  own  class  from  DialogFragment   •  Create  for  example  AlertDialog  in   onCreateDialog()  method   •  Create  instance  of  your  class  and  call  show()   method   •  AlertDialog’s  bu[on  touches  will  automaDcally   dismiss  the  dialog  for  you   Android  Programming,  Pasi  Manninen.   91  
  92. 92. Example:  AlertDialog  with  Bu[ons   •  Three  regions   –  Title,  Content  area  and  AcDon  bu[ons   public  class  ExitDialogFragment  extends  DialogFragment  {          @Override          public  Dialog  onCreateDialog(Bundle  savedInstanceState)  {                  AlertDialog.Builder  builder  =  new  AlertDialog.Builder(getAcDvity());                  builder.setTitle(R.string.dialog_Ptle)                                          .setMessage(R.string.dialog_exit)                                          .setPosiDveBu[on(R.string.dialog_yes,  new  DialogInterface.OnClickListener()  {                                              public  void  onClick(DialogInterface  dialog,  int  id)  {  //  Close  applicaDon  }                                          })                                          .setNegaDveBu[on(R.string.dialog_cancel,  new  DialogInterface.OnClickListener()  {                                            public  void  onClick(DialogInterface  dialog,  int  id)  {  //  User  cancelled  the  dialog  }                                });                  //  Create  the  AlertDialog  object  and  return  it                  return  builder.create();          }   public  void  exitDialog(View  view)  {   }          ExitDialogFragment  eDialog  =  new  ExitDialogFragment();,  "exit");   }     Android  Programming,  Pasi  Manninen.   92  
  93. 93. Example:  AlertDialog  with  List   •  Create  list  in  String  resources   public  class  ListDialogFragment  extends  DialogFragment  {      @Override      public  Dialog  onCreateDialog(Bundle  savedInstanceState)  {              AlertDialog.Builder  builder  =  new  AlertDialog.Builder(getAcDvity());              builder.setTitle(R.string.listdialog_Dtle)                      .setItems(R.array.messagetypes,  new  DialogInterface.OnClickListener()  {                              public  void  onClick(DialogInterface  dialog,  int  index)  {                                      Resources  res  =  getResources();                                      String[]  messageTypes  =  res.getStringArray(R.array.messagetypes);                                      Toast.makeText(getAcDvity(),  "Selected  messageType  =  "  +  messageTypes[index],                                                      Toast.LENGTH_SHORT).show();                              }              });              return  builder.create();            }   }   Android  Programming,  Pasi  Manninen.   93  
  94. 94. Custom  Dialog  Layouts   •  Create  your  own  layout  for  the  dialog  window   with  layout  and  widget  elements   •  Add  layout  to  AlertDialog  with  setView()   method   •  Custom  layout  fills  the  dialog,  use   AlertDialog.builder  to  add  bu[ons     •  Note   –  Normal  AcDvity  can  be  used  as  a  Dialog  also   <acDvity  android:theme="@android:style/Theme.Holo.Dialog"  >   Android  Programming,  Pasi  Manninen.   94  
  95. 95. Example:  Custom  Dialog   public  class  TeamDialogFragment  extends  DialogFragment  {      @Override      public  Dialog  onCreateDialog(Bundle  savedInstanceState)  {          AlertDialog.Builder  builder  =  new  AlertDialog.Builder(getAcDvity());          //  get  the  layout  inflater          LayoutInflater  inflater  =  getAcDvity().getLayoutInflater();          //  Inflate  and  set  the  layout  for  the  dialog          builder.setView(inflater.inflate(R.layout.add_team_dialog,  null))                                    .setTitle("Add  a  new  Team")                                  .setPosiDveBu[on("Add",  new  DialogInterface.OnClickListener()  {                                          @Override                                          public  void  onClick(DialogInterface  dialog,  int  id)  {  //  Add  a  team…  }                                            })                                .setNegaDveBu[on("Cancel",  new  DialogInterface.OnClickListener()  {                                          public  void  onClick(DialogInterface  dialog,  int  id)  {    }                                            });                        return  builder.create();            }   }   //  add_team_dialog.xml   <RelaDveLayout…        <TextView…        <EditText…     Android  Programming,  Pasi  Manninen.   95  
  96. 96. Passing  events  back  to  dialog’s  host   •  Dialog  might  perform  the  necessary   acDon  itself  (oMen  you  want  to  send   informaDon  back  to  the  AcDvity  which   opened  the  dialog)   –  Define  an  interface  with  a  method  for   each  type  of  click  event   –  Implement  interface  in  the  host   component  that  will  receive  the  acDon   events  from  the  dialog   –  Override  DialogFrament’s  onA[ach()-­‐ method  to  instanDate  your  listener   (send  events  to  host)     //  look  DialogsExample  in  CustomDialog  project  (Custom  Dialog,  Add  a  new  Team)     Android  Programming,  Pasi  Manninen.   96  
  97. 97. ProgressDialog   •  ProgressDialog  is  an  extension  of  AlertDialog  class   •  Use  in  following  cases:   –  display  a  progress  animaDon  (a  spinning  wheel  or  a   progress  bar)   •  ProgressDialog  can  also  provide  bu[ons,  such  as   one  to  cancel  a  download   •  To  show  ProgressDialog  call  simply     Note!   –  Android  Progress  &  AcDvity  guidelines  says  ”avoid”   for  ProgressDialog  use   –  You  should  use  ProgressBar  instead  (inside  your   acDvity)   Android  Programming,  Pasi  Manninen.   97  
  98. 98. ProgressBar  and  Indicators   •  Use  Progress  bars  and  acDvity  indicators  to   signal  to  users  that  something  is  happening   •  A  progress  bar  should  always  fill  from  0%  to   100%  and  never  move  backwards  to  a  lower   value   •  Design  guidelines:   –  h[p://­‐ blocks/progress.html     Android  Programming,  Pasi  Manninen.   98  
  99. 99. Example:  ProgressBar   •  Sample  layout  with  ProgressBar   •  Show  also  systems  ProgressBar  (circle)   •  Simulate  loading  with  Thread   @Override   protected  void  onCreate(Bundle  savedInstanceState)  {      super.onCreate(savedInstanceState);      //  acDvate  indeterminate  progress      getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS);      //  set  layout  for  the  acDvity      setContentView(R.layout.acDvity_main);          //  get  progressbar      progressBar  =  (ProgressBar)  findViewById(;   }   //  start  "loading...”     public  void  startBu[onPressed(View  view)  {      MainAcDvity.this.setProgressBarIndeterminateVisibility(true);      startLoading();   }     Android  Programming,  Pasi  Manninen.   99  
  100. 100. 8.  Understanding  of  the  Intents   •  Intents   •  Intent  Object   –  AcDons,  Data,  Category,  Extras   •  •  •  •  •  •  •  •  •  Intent  ResoluDon,  Filters,  Matching   Intent  AcDons,  Data  and  Category  test   Example:  Intent  Filters  in  Manifest   Using  Explicit  Intent  to  start  a  new  AcDvity   Data  transfer  between  AcDviDes   ExpecDng  a  result  from  an  AcDvity   Using  Implicit  Intents   Custom  and  Broadcast  Intents  with  Receivers   Examples  and  Exercises  with  AcDviDes  and  Intents   Android  Programming,  Pasi  Manninen.   100  
  101. 101. Intents   •  The  most  unique  and  important  concept  in   Android  Development   •  Intent  can  be  used  to   –  broadcast  data  between  applicaDons  and   applicaDon  components   –  start  AcDviDes  and  Services   –  broadcast  that  an  event  or  acDon  has  occured   •  Intent  is  like  a  ”message”  to  someone   Android  Programming,  Pasi  Manninen.   101  
  102. 102. Intent  Object   •  An  Intent  object  is  a  bundle  of  informaDon   •  Object  contains:   –  Component,  specifies  an  explicit  name  of  a  component  class  to  use   for  the  intent   –  Ac:on,  acDon  to  be  performed  (Androids  own  or  your  own  defined)   –  Data,  the  URI  of  the  data  to  be  acted  on  and  the  MIME  type  of  that   data   –  Category,  a  string  containing  addiDonal  informaDon  about  the  kind  of   component  that  should  handle  the  intent   –  Type,  specifies  an  explicit  type  (a  MIME  type)  of  the  intent  data   –  Extras,  key-­‐value  pairs  for  addiDonal  informaDon  that  should  be   delivered  to  the  component  handling  the  intent   –  Flags,  instruct  the  Android  system  how  to  launch  an  acDvity  and  how   to  treat  it   Android  Programming,  Pasi  Manninen.   102  
  104. 104. Intent  Object  Data   •  Some  examples  of  acDon/data  pairs   –  ACTION_VIEW  content://contacts/people/1   –  ACTION_DIAL  content://contacts/people/1     –  ACTION_VIEW  tel:123   –  ACTION_DIAL  tel:123   –  ACTION_EDIT  content://contacts/people/1   –  ACTION_VIEW  content://contacts/people/   Android  Programming,  Pasi  Manninen.   104  
  105. 105. Intent  Object  Category   •  Any  number  of  category  descripDons  can  be   placed  in  an  Intent  object   •  Gives  addiDonal  informaDon  about  the  acDon  to   execute   •  •  •  •  •  •  •  CATEGORY_DEFAULT   CATEGORY_BROWSABLE   CATEGORY_TAB   CATEGORY_ALTERNATIVE   CATEGORY_SELECTED_ALTERNATIVE   CATEGORY_LAUNCHER   CATEGORY_INFO   •  •  •  •  •  •  •  CATEGORY_HOME   CATEGORY_PREFERENCE   CATEGORY_TEST   CATEGORY_CAR_DOCK   CATEGORY_DESK_DOCK   CATEGORY_CAR_MODE   …   Android  Programming,  Pasi  Manninen.   105  
  106. 106. Intent  Object  Extras   •  Extras  is  a  Bundle  of  any  addiDonal   informaDon   •  Used  to  provide  extended  informaDon  to  the   component   Intent  intent  =  new  Intent(Intent.ACTION_SENDTO);   intent.setData(Uri.parse("sms://"));             intent.putExtra("address",  "04012345678");             intent.putExtra("sms_body",  "Your  message  here");         startAcDvity(intent);   Android  Programming,  Pasi  Manninen.       106  
  107. 107. Intent  ResoluDon   •  Intents  can  be  divided  into  two  groups   –  Explicit  intents,  are  typically  used  for  applicaDon-­‐internal   messages  (between  AcDviDes)   –  Implicit  intents,  are  oMen  used  to  acDvate  components  in   other  applicaDons   •  Android  delivers  an  explicit  intent  to  an  instance  of  the   designated  target  class   •  Implicit  intents  are  resolved  by  Intent  Filters  by  Intent   object’s  AcDon,  Data  and  Category     •  In  implicit  intents,  Android  system  must  find  the  best   component  (or  components)  to  handle  the  intent   Android  Programming,  Pasi  Manninen.   107  
  108. 108. Intent  Filters   •  An  explicit  intent  is  always  delivered  to  its  target,  no   ma[er  what  it  contains   •  AcDviDes,  services,  and  broadcast  receivers  can  have   one  or  more  intent  filters   •  Each  filter  describes  a  capability  of  the  component,  a   set  of  intents  that  the  component  is  willing  to  receive   •  Component  has  separate  filters  for  each  job  it  can  do   •  Intent  Filters  are  set  up  in  the  applica:on's  manifest   file  (AndroidManifest.xml)  as  <intent-­‐filter>  elements     •  An  implicit  intent  is  tested  against  acDon,  data  and   category  fields  in  manifest   Android  Programming,  Pasi  Manninen.   108  
  109. 109. Intent  Matching   •  Intents  are  matched  against  intent  filters  not   only  to  discover  a  target  component  to  acDvate,   but  also  to  discover  something  about  the  set  of   components  on  the  device   •  Examples:   •    AcDvity  is  shown  in  applicaDon  launcher  (”menu  in  screen”)   –  android.intent.acDon.MAIN   –  android.intent.category.LAUNCHER"   •  AcDvity  handles  widgets  Update  (Dme  based)  and  two  own   “Receiver”  and  “Reload”  Intents   –  android.appwidget.acDon.APPWIDGET_UPDATE   –  fi.ptm.namedays.ACTION_WIDGET_RECEIVER   –  fi.ptm.namedays.ACTION_WIDGER_RELOAD     Android  Programming,  Pasi  Manninen.   109  
  110. 110. Intent  Filters  –  AcDon  Test   •  To  pass  this  test,  the  Intent  object  must  match  one  of   the  acDons  listed  in  the  filter  (in  manifest)   •  An  Intent  object  that  doesn't  specify  an  acDon   automaDcally  passes  the  acDon  test,  as  long  as  the   filter  contains  at  least  one  acDon   •  Intent  filter  must  contain  at  least  one  acDon  element   <intent-­‐filter  .  .  .  >          <acDon  android:name="com.example.project.SHOW_CURRENT"  />          <acDon  android:name="com.example.project.SHOW_RECENT"  />          <acDon  android:name="com.example.project.SHOW_PENDING"  />          .  .  .   </intent-­‐filter>   Android  Programming,  Pasi  Manninen.   110  
  111. 111. Intent  Filters  –  Category  Test   •  To  pass  the  category  test,  every  category  in  the   Intent  object  must  match  a  category  in  the  filter   •  AddiDonal  categories  can  be  listed,  but  it  cannot   omit  any  that  are  in  the  intent   <intent-­‐filter  .  .  .  >          .  .  .              <category  android:name="android.intent.category.DEFAULT"  />          <category  android:name="android.intent.category.BROWSABLE"  />          .  .  .   </intent-­‐filter>   Android  Programming,  Pasi  Manninen.   111  
  112. 112. Intent  Filters  –  Data  test   •  Like  the  acDon  and  categories,  the  data  specificaDon  for  an  intent   filter  is  contained  in  a  subelement,  it  can  appear  mulDple  Dmes,  or   not  at  all   •  Each  <data>  element  can  specify  a  URI  and  a  data  type  (MIME   media  type)   •  When  the  URI  in  an  Intent  object  is  compared  to  a  URI  specificaDon   in  a  filter,  it's  compared  only  to  the  parts  of  the  URI  actually   menDoned  in  the  filter   <intent-­‐filter>          <acDon  android:name="android.intent.acDon.VIEW"  />          <category  android:name="android.intent.category.DEFAULT"  />          <category  android:name="android.intent.category.BROWSABLE"  />          <data  android:scheme="h[p"  />          <data  android:mimeType="audio/mp3"/>          <data  android:mimeType="audio/mp4"/>   ...   Android  Programming,  Pasi  Manninen.   112  
  113. 113. Example:  Intent  Filters  in  Manifest   <?xml  version="1.0"  encoding="u/-­‐8"?>   <manifest  …>          <applicaDon  ...>                  <acDvity  android:name=".MainAcPvity“                                                     MainAcDvity  can  be  lauched  from  the                                                  android:label="@string/app_name">   menu  and  it  can  also  handle  intent  that                          <intent-­‐filter>   is  describe  below.                                  <!–  start  as  main  entry  point  -­‐-­‐>                                    <acDon  android:name="android.intent.acPon.MAIN"  />                                  <category  android:name="android.intent.category.LAUNCHER"  />                          </intent-­‐filter>                          <intent-­‐filter>                                  <acDon  android:name="fi.ptm.PLAY_SOUND"  />                                  <data  android:mimeType="audio/mp3"  android:scheme="hTp"/>                                    <category  android:name="android.intent.category.DEFAULT"  />                                                            </intent-­‐filter>   </applicaDon>   </manifest>     Intent  intent  =  new  Intent(”fi.ptm.PLAY_SOUND”,                            Uri.parse(”h[p://”));   startAcDvity(intent);       Android  Programming,  Pasi  Manninen.   113  
  114. 114. Using  explicit  Intent  to  start  a  new   AcDvity   •  startAcDvity(intent)   –  starts  a  new  AcDvity   –  it  is  possible  to  send  data  to  with  intent   –  acDvity  will  not  be  informed  when  the  child   acDvity  is  complete   •  startAcDvityForResult(intent,  REQUEST_CODE)   –  like  previous,  but  it  takes  unique  constant   –  acDvity  will  be  noDfied  when  the  child  acDvity  is   complete  via  the  onAcDvityResult()  callback   Android  Programming,  Pasi  Manninen.   114