Android 2                              Ondra Zahradník                              MFF - 5.12.2012Wednesday, December 5, ...
AgendaWednesday, December 5, 2012
Agenda          1. Rekapitulace z minulaWednesday, December 5, 2012
Agenda          1. Rekapitulace z minula          2. BroadcastReceiverWednesday, December 5, 2012
Agenda          1. Rekapitulace z minula          2. BroadcastReceiver          3. Podpora různých zařízeníWednesday, Dece...
Agenda          1. Rekapitulace z minula          2. BroadcastReceiver          3. Podpora různých zařízení          4. Dy...
Agenda          1. Rekapitulace z minula          2. BroadcastReceiver          3. Podpora různých zařízení          4. Dy...
Agenda          1. Rekapitulace z minula          2. BroadcastReceiver          3. Podpora různých zařízení          4. Dy...
Agenda          1. Rekapitulace z minula          2. BroadcastReceiver          3. Podpora různých zařízení          4. Dy...
House-keeping notes          • slajdy - http://goo.gl/2siyO          • zdroje - http://goo.gl/HqMIs          • vaše otázky...
Rekapitulace z minula          1. Android SDK          2. Eclipse + ADT          3. Emulátor / device          4. Založení...
BroadcastyWednesday, December 5, 2012
Broadcasty          • Aplikace reaguje na důležité událostiWednesday, December 5, 2012
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...Wednesday, De...
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...          • B...
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...          • B...
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...          • B...
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...          • B...
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...          • B...
Broadcasty          • Aplikace reaguje na důležité události              • Boot, SMS, Call, připojení, čas...          • B...
PříkladWednesday, December 5, 2012
Příklad          • Vypište číslo a text příchozí sms v toastuWednesday, December 5, 2012
Příklad          • Vypište číslo a text příchozí sms v toastu              • Toast - http://goo.gl/WoTkWednesday, December...
Příklad          • Vypište číslo a text příchozí sms v toastu              • Toast - http://goo.gl/WoTk              • Opr...
Příklad          • Vypište číslo a text příchozí sms v toastu              • Toast - http://goo.gl/WoTk              • Opr...
Příklad          • Vypište číslo a text příchozí sms v toastu              • Toast - http://goo.gl/WoTk              • Opr...
Příklad          • Vypište číslo a text příchozí sms v toastu              • Toast - http://goo.gl/WoTk              • Opr...
Příklad          • Vypište číslo a text příchozí sms v toastu              • Toast - http://goo.gl/WoTk              • Opr...
Zdroje a kvalifikátoryWednesday, December 5, 2012
Zdroje a kvalifikátory          • ZdrojeWednesday, December 5, 2012
Zdroje a kvalifikátory          • Zdroje              • texty, obrázky, layout, barvy,...Wednesday, December 5, 2012
Zdroje a kvalifikátory          • Zdroje                                  MyProject/                                       ...
Zdroje a kvalifikátory          • Zdroje                                  MyProject/                                       ...
Zdroje a kvalifikátory          • Zdroje                                  MyProject/                                       ...
Zdroje a kvalifikátory          • Zdroje                                             MyProject/                            ...
Zdroje a kvalifikátory          • Zdroje                                             MyProject/                            ...
Zdroje a kvalifikátory          • Zdroje                                             MyProject/                            ...
Zdroje a kvalifikátory          • Zdroje                                             MyProject/                            ...
Resource resolvingWednesday, December 5, 2012
Resource resolvingWednesday, December 5, 2012
Resource resolving             drawable/             drawable-en/             drawable-fr-rCA/             drawable-en-por...
Resource resolving             drawable/             drawable-en/             drawable-fr-rCA/               Locale = en-G...
Resource resolving             drawable/             drawable-en/             drawable-fr-rCA/               Locale = en-G...
Resource resolving             drawable/             drawable-en/             drawable-fr-rCA/               Locale = en-G...
Resource resolving             drawable/             drawable-en/             drawable-fr-rCA/               Locale = en-G...
Různé obrazovkyWednesday, December 5, 2012
Různé obrazovky          • obrazovky small, normal, large, xlargeWednesday, December 5, 2012
Různé obrazovky          • obrazovky small, normal, large, xlarge              • wrap_content, match_parent              •...
Různé obrazovky          • obrazovky small, normal, large, xlarge              • wrap_content, match_parent              •...
Různé obrazovky          • obrazovky small, normal, large, xlarge              • wrap_content, match_parent              •...
Různé obrazovky          • obrazovky small, normal, large, xlarge              • wrap_content, match_parent              •...
Různé hustotyWednesday, December 5, 2012
Různé hustotyWednesday, December 5, 2012
Různé hustotyWednesday, December 5, 2012
Různé hustotyWednesday, December 5, 2012
Různé hustoty          • hustoty ldpi, mdpi, hdpi, xhdpiWednesday, December 5, 2012
Různé hustoty          • hustoty ldpi, mdpi, hdpi, xhdpiWednesday, December 5, 2012
Různé hustoty          • hustoty ldpi, mdpi, hdpi, xhdpi               •   xhdpi: 2.0               •   hdpi: 1.5         ...
Různé hustoty          • hustoty ldpi, mdpi, hdpi, xhdpi                                          MyProject/              ...
Různé hustoty          • hustoty ldpi, mdpi, hdpi, xhdpi                                          MyProject/              ...
Podpora různých verzíWednesday, December 5, 2012
Podpora různých verzí          • Na trhu Android v2.1 - v4.0.3Wednesday, December 5, 2012
Podpora různých verzí          • Na trhu Android v2.1 - v4.0.3          • Nastavit minSdkVersion a targetSdkVersion       ...
Podpora různých verzí          • Na trhu Android v2.1 - v4.0.3          • Nastavit minSdkVersion a targetSdkVersion       ...
Příklad          • Rozšiřte příklad jednoduché kalkulačky o               podporu češtiny a landscape režimu          • zd...
Různá zařízeníWednesday, December 5, 2012
Různá zařízení          • deklarativně podadresáři v /resWednesday, December 5, 2012
Různá zařízení          • deklarativně podadresáři v /res          • defaultní a alternativníWednesday, December 5, 2012
Různá zařízení          • deklarativně podadresáři v /res          • defaultní a alternativní                   dvě zaříze...
Různá zařízení          • deklarativně podadresáři v /res          • defaultní a alternativní                   dvě zaříze...
Dynamické UI pomocí fragmentů          • Fragment je kus funkčního UI          • Aktivita hostí fragmenty          • Jedna...
FragmentWednesday, December 5, 2012
FragmentWednesday, December 5, 2012
Fragment       Fragment a jeho UI       public class ArticleFragment extends Fragment {           @Override           publ...
Fragment       Fragment a jeho UI       public class ArticleFragment extends Fragment {           @Override           publ...
Fragment       Fragment a jeho UI       public class ArticleFragment extends Fragment {           @Override           publ...
Fragmenty na telefonu a tabletuWednesday, December 5, 2012
Fragmenty na telefonu a tabletuWednesday, December 5, 2012
Fragmenty na telefonu a tabletu                              <?xml version="1.0" encoding="utf-8"?>                       ...
Fragmenty na telefonu a tabletu                              <?xml version="1.0" encoding="utf-8"?>                       ...
Fragmenty na telefonu a tabletu                      public class MainActivity extends Activity implements TitlesFragment....
Komunikace mezi fragmentyWednesday, December 5, 2012
Komunikace mezi fragmentyWednesday, December 5, 2012
Komunikace mezi fragmenty          • FragmentA definuje Listener interfaceWednesday, December 5, 2012
Komunikace mezi fragmenty          • FragmentA definuje Listener interface          • Activity interface implementujeWednes...
Komunikace mezi fragmenty          • FragmentA definuje Listener interface          • Activity interface implementuje      ...
Nové API na starých Androidech          • support lib. zpřístupňuje nové api pro staré               devices          • Fr...
Příklad          • do seznamu přidejte možnost změnit položku          • změnu potvrďte FragmentDialogem          • zdrojá...
PřestávkaWednesday, December 5, 2012
Motivace -rychlé appkyWednesday, December 5, 2012
Motivace -rychlé appky          • Nechceme čekat, když čekámeWednesday, December 5, 2012
Motivace -rychlé appky          • Nechceme čekat, když čekáme          • Chceme rychlé appkyWednesday, December 5, 2012
Motivace -rychlé appky          • Nechceme čekat, když čekáme          • Chceme rychlé appky              1.síťovat, když ...
Motivace -rychlé appky          • Nechceme čekat, když čekáme          • Chceme rychlé appky              1.síťovat, když ...
Motivace -rychlé appky          • Nechceme čekat, když čekáme          • Chceme rychlé appky              1.síťovat, když ...
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
Omezený programovací modelWednesday, December 5, 2012
Omezený programovací model          • Slabý procesorWednesday, December 5, 2012
Omezený programovací model          • Slabý procesor          • Opravdový multi-taskingWednesday, December 5, 2012
Omezený programovací model          • Slabý procesor          • Opravdový multi-tasking          • “Application not respon...
Omezený programovací model          • Slabý procesor          • Opravdový multi-tasking          • “Application not respon...
Omezený programovací model          • Slabý procesor          • Opravdový multi-tasking          • “Application not respon...
Architektura typické aplikace 1          • Zobraz seznam položek z databázeWednesday, December 5, 2012
Architektura typické aplikace 1          • Zobraz seznam položek z databáze                         ListFragmentWednesday,...
Architektura typické aplikace 1          • Zobraz seznam položek z databáze                                        čte dat...
Architektura typické aplikace 1          • Zobraz seznam položek z databáze                                        čte dat...
Architektura typické aplikace 1          • Zobraz seznam položek z databáze                              UI               ...
Architektura typické aplikace 1          • Zobraz seznam položek z databáze                              UI               ...
DatabázeWednesday, December 5, 2012
Databáze          • SQLite v3 databázeWednesday, December 5, 2012
Databáze          • SQLite v3 databáze          • SQLiteOpenHelperWednesday, December 5, 2012
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databázeWednesday,...
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databáze          ...
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databáze          ...
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databáze          ...
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databáze          ...
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databáze          ...
Databáze          • SQLite v3 databáze          • SQLiteOpenHelper              • stará se o life-cycle databáze          ...
CursorWednesday, December 5, 2012
Cursor          • zpřístupňuje řádky výsledku   db.query()Wednesday, December 5, 2012
Cursor          • zpřístupňuje řádky výsledku   db.query()          • metody pro pohybWednesday, December 5, 2012
Cursor          • zpřístupňuje řádky výsledku             db.query()          • metody pro pohyb              •     moveTo...
Cursor          • zpřístupňuje řádky výsledku             db.query()          • metody pro pohyb              •     moveTo...
Cursor          • zpřístupňuje řádky výsledku             db.query()          • metody pro pohyb              •     moveTo...
Cursor          • zpřístupňuje řádky výsledku               db.query()          • metody pro pohyb              •     move...
Cursor          • zpřístupňuje řádky výsledku               db.query()          • metody pro pohyb              •     move...
Cursor          • zpřístupňuje řádky výsledku               db.query()          • metody pro pohyb              •     move...
Příklad              1. prozkoumejte DatabaseHelper              2. v MainFragment zobrazte seznam knizek v DB            ...
Architektura typické aplikace 2          • Zobraz seznam položek z databázeWednesday, December 5, 2012
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                         ListFragmentWednesday,...
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                         ListFragment          ...
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                         ListFragment          ...
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                         ListFragment          ...
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                                        UI     ...
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                                        UI     ...
Architektura typické aplikace 2          • Zobraz seznam položek z databáze                                        UI     ...
ContentProviderWednesday, December 5, 2012
ContentProvider          • Jednotné API pro přístup k modeluWednesday, December 5, 2012
ContentProvider          • Jednotné API pro přístup k modelu          • Zapouzdřuje CRUD operace nad databázíWednesday, De...
ContentProvider          • Jednotné API pro přístup k modelu          • Zapouzdřuje CRUD operace nad databází          • R...
ContentProvider          • Jednotné API pro přístup k modelu          • Zapouzdřuje CRUD operace nad databází          • R...
ContentProvider          • Jednotné API pro přístup k modelu          • Zapouzdřuje CRUD operace nad databází          • R...
Příklad              1. prozkoumejte komunikaci provideru a databáze              2. v Provider naimplementujte query oper...
Architektura typické aplikace 3          • Zobraz seznam položek z databázeWednesday, December 5, 2012
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragmentWednesday, D...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragment            ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragment            ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragment            ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragment            ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragment            ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                       ListFragment            ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                                          UI   ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                                          UI   ...
Architektura typické aplikace 3          • Zobraz seznam položek z databáze                                          UI   ...
Asynchroní operaceWednesday, December 5, 2012
Asynchroní operace          • Omezený programovací modelWednesday, December 5, 2012
Asynchroní operace          • Omezený programovací model              • slabý procesorWednesday, December 5, 2012
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-taskingWednesd...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
Asynchroní operace          • Omezený programovací model              • slabý procesor              • multi-tasking       ...
CursorLoaderWednesday, December 5, 2012
CursorLoader          • Čte z ContentProvideru na pozadíWednesday, December 5, 2012
CursorLoader          • Čte z ContentProvideru na pozadí          • Activity/Fragment notifikováno callbackem              ...
CursorLoader          • Čte z ContentProvideru na pozadí          • Activity/Fragment notifikováno callbackem              ...
CursorLoader          • Čte z ContentProvideru na pozadí          • Activity/Fragment notifikováno callbackem              ...
CursorLoader          • Čte z ContentProvideru na pozadí          • Activity/Fragment notifikováno callbackem              ...
Příklad              1. nahraďte volání provideru CursorLoaderem                  1. hint: fragment nechť implementuje    ...
Architektura typické aplikace 4          • Aktualizace z internetuWednesday, December 5, 2012
Architektura typické aplikace 4          • Aktualizace z internetu                       ListFragment               načítá...
Architektura typické aplikace 4          • Aktualizace z internetu                                          UI            ...
Architektura typické aplikace 4          • Aktualizace z internetu                                          UI            ...
Architektura typické aplikace 4          • Aktualizace z internetu                                          UI            ...
Architektura typické aplikace 4          • Aktualizace z internetu                       ListFragment                  Int...
Architektura typické aplikace 4          • Aktualizace z internetu                       ListFragment                     ...
Architektura typické aplikace 4          • Aktualizace z internetu                              Aktualizace               ...
IntentServiceWednesday, December 5, 2012
IntentService          • Implementuje frontu tasků za zpracovaníWednesday, December 5, 2012
IntentService          • Implementuje frontu tasků za zpracovaní              •     onHandleIntent(Intent i)Wednesday, Dec...
IntentService          • Implementuje frontu tasků za zpracovaní              •     onHandleIntent(Intent i)          • Im...
IntentService          • Implementuje frontu tasků za zpracovaní              •     onHandleIntent(Intent i)          • Im...
IntentService          • Implementuje frontu tasků za zpracovaní              •     onHandleIntent(Intent i)          • Im...
IntentService          • Implementuje frontu tasků za zpracovaní              •     onHandleIntent(Intent i)          • Im...
SíťováníWednesday, December 5, 2012
Síťování          • Http Client, UrlConnectionWednesday, December 5, 2012
Síťování          • Http Client, UrlConnection                      	       	   try {                      	       	   	  ...
Síťování          • Http Client, UrlConnection                      	       	   try {                      	       	   	  ...
Síťování          • Http Client, UrlConnection                      	       	   try {                      	       	   	  ...
Parsování a db insertWednesday, December 5, 2012
Parsování a db insert          • JSON - JSONObject, JSONArrayWednesday, December 5, 2012
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()Wednesd...
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()       ...
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()       ...
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()       ...
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()       ...
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()       ...
Parsování a db insert          • JSON - JSONObject, JSONArray              •     getString(), getInt(), getDouble()       ...
Příklad              1. Přes RefreshService aktualizujte tabulku Books              2. http://dl.dropbox.com/u/5296640/boo...
Architektura typické aplikace 5          • Operace create, update, deleteWednesday, December 5, 2012
Architektura typické aplikace 5          • Operace create, update, delete                       ListFragment              ...
Architektura typické aplikace 5          • Operace create, update, delete                                          UI     ...
Architektura typické aplikace 5          • Operace create, update, delete                                          UI     ...
Architektura typické aplikace 5          • Operace create, update, delete                                          UI     ...
Architektura typické aplikace 5          • Operace create, update, delete                                           čte da...
Architektura typické aplikace 5          • Operace create, update, delete                                           čte da...
Architektura typické aplikace 5          • Operace create, update, delete                                           čte da...
Architektura typické aplikace 5          • Operace create, update, delete                                   Zápis         ...
AsyncQueryHandlerWednesday, December 5, 2012
AsyncQueryHandler          • Volá crud operace v threadu na pozadíWednesday, December 5, 2012
AsyncQueryHandler          • Volá crud operace v threadu na pozadí          • Zpětně notifikuje volajícíhoWednesday, Decemb...
AsyncQueryHandler          • Volá crud operace v threadu na pozadí          • Zpětně notifikuje volajícího          • Probl...
AsyncQueryHandler          • Volá crud operace v threadu na pozadí          • Zpětně notifikuje volajícího          • Probl...
AsyncQueryHandler          • Volá crud operace v threadu na pozadí          • Zpětně notifikuje volajícího          • Probl...
AsyncQueryHandler          • Volá crud operace v threadu na pozadí          • Zpětně notifikuje volajícího          • Probl...
AsyncQueryHandler          • Volá crud operace v threadu na pozadí          • Zpětně notifikuje volajícího          • Probl...
Příklad              1. Doplňte c, u, d operace do provideru a fragmentu          • zdrojáky              • mff-android-5 ...
Děkuji                                                @ondraz                      ukázky kódu a obrázky pocházejí z http:...
Próxima SlideShare
Cargando en…5
×

MFF Android 2 5.12.2012

1.041 visualizaciones

Publicado el

2nd lecture of Mo

Publicado en: Tecnología
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

MFF Android 2 5.12.2012

  1. 1. Android 2 Ondra Zahradník MFF - 5.12.2012Wednesday, December 5, 2012
  2. 2. AgendaWednesday, December 5, 2012
  3. 3. Agenda 1. Rekapitulace z minulaWednesday, December 5, 2012
  4. 4. Agenda 1. Rekapitulace z minula 2. BroadcastReceiverWednesday, December 5, 2012
  5. 5. Agenda 1. Rekapitulace z minula 2. BroadcastReceiver 3. Podpora různých zařízeníWednesday, December 5, 2012
  6. 6. Agenda 1. Rekapitulace z minula 2. BroadcastReceiver 3. Podpora různých zařízení 4. Dynamické UI pomocí fragmentůWednesday, December 5, 2012
  7. 7. Agenda 1. Rekapitulace z minula 2. BroadcastReceiver 3. Podpora různých zařízení 4. Dynamické UI pomocí fragmentů 5. PřestávkaWednesday, December 5, 2012
  8. 8. Agenda 1. Rekapitulace z minula 2. BroadcastReceiver 3. Podpora různých zařízení 4. Dynamické UI pomocí fragmentů 5. Přestávka 6. Architektura typické aplikaceWednesday, December 5, 2012
  9. 9. Agenda 1. Rekapitulace z minula 2. BroadcastReceiver 3. Podpora různých zařízení 4. Dynamické UI pomocí fragmentů 5. Přestávka 6. Architektura typické aplikace 7. Otázky a odpovědiWednesday, December 5, 2012
  10. 10. House-keeping notes • slajdy - http://goo.gl/2siyO • zdroje - http://goo.gl/HqMIs • vaše otázkyWednesday, December 5, 2012
  11. 11. Rekapitulace z minula 1. Android SDK 2. Eclipse + ADT 3. Emulátor / device 4. Založení nového projektu 5. Struktura Android projektu 6. Activity, layout, Intent = UI 7. Kompilace a spuštění 8. DebuggingWednesday, December 5, 2012
  12. 12. BroadcastyWednesday, December 5, 2012
  13. 13. Broadcasty • Aplikace reaguje na důležité událostiWednesday, December 5, 2012
  14. 14. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas...Wednesday, December 5, 2012
  15. 15. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas... • BroadcastReceiverWednesday, December 5, 2012
  16. 16. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas... • BroadcastReceiver <receiver android:name=".SMSReceiver"> <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>Wednesday, December 5, 2012
  17. 17. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas... • BroadcastReceiver <receiver android:name=".SMSReceiver"> <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context ctx, Intent i) { //TODO do something } }Wednesday, December 5, 2012
  18. 18. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas... • BroadcastReceiver <receiver android:name=".SMSReceiver"> <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context ctx, Intent i) { • Možno definovat vlastní //TODO do something } }Wednesday, December 5, 2012
  19. 19. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas... • BroadcastReceiver <receiver android:name=".SMSReceiver"> <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context ctx, Intent i) { • Možno definovat vlastní //TODO do something } } • globálníWednesday, December 5, 2012
  20. 20. Broadcasty • Aplikace reaguje na důležité události • Boot, SMS, Call, připojení, čas... • BroadcastReceiver <receiver android:name=".SMSReceiver"> <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver> public class SMSReceiver extends BroadcastReceiver { @Override public void onReceive(Context ctx, Intent i) { • Možno definovat vlastní //TODO do something } } • globální • lokální - notifikační systém uvnitř appky, levnéWednesday, December 5, 2012
  21. 21. PříkladWednesday, December 5, 2012
  22. 22. Příklad • Vypište číslo a text příchozí sms v toastuWednesday, December 5, 2012
  23. 23. Příklad • Vypište číslo a text příchozí sms v toastu • Toast - http://goo.gl/WoTkWednesday, December 5, 2012
  24. 24. Příklad • Vypište číslo a text příchozí sms v toastu • Toast - http://goo.gl/WoTk • Oprávnění android.permission.RECEIVE_SMSWednesday, December 5, 2012
  25. 25. Příklad • Vypište číslo a text příchozí sms v toastu • Toast - http://goo.gl/WoTk • Oprávnění android.permission.RECEIVE_SMS • SMS Intent - extra “pdus” seznam smsekWednesday, December 5, 2012
  26. 26. Příklad • Vypište číslo a text příchozí sms v toastu • Toast - http://goo.gl/WoTk • Oprávnění android.permission.RECEIVE_SMS • SMS Intent - extra “pdus” seznam smsek • SmsMessage.createFromPduWednesday, December 5, 2012
  27. 27. Příklad • Vypište číslo a text příchozí sms v toastu • Toast - http://goo.gl/WoTk • Oprávnění android.permission.RECEIVE_SMS • SMS Intent - extra “pdus” seznam smsek • SmsMessage.createFromPdu • SMS lze posílat z DDMS do emulátoruWednesday, December 5, 2012
  28. 28. Příklad • Vypište číslo a text příchozí sms v toastu • Toast - http://goo.gl/WoTk • Oprávnění android.permission.RECEIVE_SMS • SMS Intent - extra “pdus” seznam smsek • SmsMessage.createFromPdu • SMS lze posílat z DDMS do emulátoru • zdrojáky - mff-android-helloWednesday, December 5, 2012
  29. 29. Zdroje a kvalifikátoryWednesday, December 5, 2012
  30. 30. Zdroje a kvalifikátory • ZdrojeWednesday, December 5, 2012
  31. 31. Zdroje a kvalifikátory • Zdroje • texty, obrázky, layout, barvy,...Wednesday, December 5, 2012
  32. 32. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png layout/ main.xml info.xml values/ strings.xmlWednesday, December 5, 2012
  33. 33. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png • Kvalifikátory layout/ main.xml info.xml values/ strings.xml • jazyk (en_rUS, cs, ...)Wednesday, December 5, 2012
  34. 34. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png • Kvalifikátory layout/ main.xml info.xml values/ strings.xml • jazyk (en_rUS, cs, ...) • nejmenší šířka (sw720dp)Wednesday, December 5, 2012
  35. 35. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png • Kvalifikátory layout/ main.xml info.xml values/ strings.xml • jazyk (en_rUS, cs, ...) • nejmenší šířka (sw720dp) • velikost obrazovky (small, normal, large, xlarge)Wednesday, December 5, 2012
  36. 36. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png • Kvalifikátory layout/ main.xml info.xml values/ strings.xml • jazyk (en_rUS, cs, ...) • nejmenší šířka (sw720dp) • velikost obrazovky (small, normal, large, xlarge) • orientace (land, port)Wednesday, December 5, 2012
  37. 37. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png • Kvalifikátory layout/ main.xml info.xml values/ strings.xml • jazyk (en_rUS, cs, ...) • nejmenší šířka (sw720dp) • velikost obrazovky (small, normal, large, xlarge) • orientace (land, port) • hustota (ldpi, mdpi, hdpi, xhdpi)Wednesday, December 5, 2012
  38. 38. Zdroje a kvalifikátory • Zdroje MyProject/ src/ • texty, obrázky, layout, barvy,... MyActivity.java res/ drawable/ icon.png • Kvalifikátory layout/ main.xml info.xml values/ strings.xml • jazyk (en_rUS, cs, ...) • nejmenší šířka (sw720dp) • velikost obrazovky (small, normal, large, xlarge) • orientace (land, port) • hustota (ldpi, mdpi, hdpi, xhdpi) res/ • layout, layout-land, layout-land-v13 drawable/ icon.png background.png • drawable, drawable-hdpi, drawable-xhdpi drawable-hdpi/ icon.png background.pngWednesday, December 5, 2012
  39. 39. Resource resolvingWednesday, December 5, 2012
  40. 40. Resource resolvingWednesday, December 5, 2012
  41. 41. Resource resolving drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/Wednesday, December 5, 2012
  42. 42. Resource resolving drawable/ drawable-en/ drawable-fr-rCA/ Locale = en-GB drawable-en-port/ Screen orientation = port drawable-en-notouch-12key/ Screen pixel density = hdpi drawable-port-ldpi/ Touchscreen type = notouch drawable-port-notouch-12key/ Primary text input method = 12keyWednesday, December 5, 2012
  43. 43. Resource resolving drawable/ drawable-en/ drawable-fr-rCA/ Locale = en-GB drawable-en-port/ Screen orientation = port drawable-en-notouch-12key/ Screen pixel density = hdpi drawable-port-ldpi/ Touchscreen type = notouch drawable-port-notouch-12key/ Primary text input method = 12key drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/Wednesday, December 5, 2012
  44. 44. Resource resolving drawable/ drawable-en/ drawable-fr-rCA/ Locale = en-GB drawable-en-port/ Screen orientation = port drawable-en-notouch-12key/ Screen pixel density = hdpi drawable-port-ldpi/ Touchscreen type = notouch drawable-port-notouch-12key/ Primary text input method = 12key drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/ drawable/ drawable-en/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/Wednesday, December 5, 2012
  45. 45. Resource resolving drawable/ drawable-en/ drawable-fr-rCA/ Locale = en-GB drawable-en-port/ Screen orientation = port drawable-en-notouch-12key/ Screen pixel density = hdpi drawable-port-ldpi/ Touchscreen type = notouch drawable-port-notouch-12key/ Primary text input method = 12key drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/ drawable/ drawable-en/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/ drawable-en/ drawable-en-port/ drawable-en-notouch-12key/Wednesday, December 5, 2012
  46. 46. Různé obrazovkyWednesday, December 5, 2012
  47. 47. Různé obrazovky • obrazovky small, normal, large, xlargeWednesday, December 5, 2012
  48. 48. Různé obrazovky • obrazovky small, normal, large, xlarge • wrap_content, match_parent • RelativeLayoutWednesday, December 5, 2012
  49. 49. Různé obrazovky • obrazovky small, normal, large, xlarge • wrap_content, match_parent • RelativeLayout • 9-patchWednesday, December 5, 2012
  50. 50. Různé obrazovky • obrazovky small, normal, large, xlarge • wrap_content, match_parent • RelativeLayout • 9-patchWednesday, December 5, 2012
  51. 51. Různé obrazovky • obrazovky small, normal, large, xlarge • wrap_content, match_parent • RelativeLayout • 9-patchWednesday, December 5, 2012
  52. 52. Různé hustotyWednesday, December 5, 2012
  53. 53. Různé hustotyWednesday, December 5, 2012
  54. 54. Různé hustotyWednesday, December 5, 2012
  55. 55. Různé hustotyWednesday, December 5, 2012
  56. 56. Různé hustoty • hustoty ldpi, mdpi, hdpi, xhdpiWednesday, December 5, 2012
  57. 57. Různé hustoty • hustoty ldpi, mdpi, hdpi, xhdpiWednesday, December 5, 2012
  58. 58. Různé hustoty • hustoty ldpi, mdpi, hdpi, xhdpi • xhdpi: 2.0 • hdpi: 1.5 • mdpi: 1.0 (baseline) • ldpi: 0.75Wednesday, December 5, 2012
  59. 59. Různé hustoty • hustoty ldpi, mdpi, hdpi, xhdpi MyProject/ res/ drawable-xhdpi/ • xhdpi: 2.0 awesomeimage.png • hdpi: 1.5 drawable-hdpi/ • mdpi: 1.0 (baseline) awesomeimage.png drawable-mdpi/ • ldpi: 0.75 awesomeimage.png drawable-ldpi/ awesomeimage.pngWednesday, December 5, 2012
  60. 60. Různé hustoty • hustoty ldpi, mdpi, hdpi, xhdpi MyProject/ res/ drawable-xhdpi/ • xhdpi: 2.0 awesomeimage.png • hdpi: 1.5 drawable-hdpi/ • mdpi: 1.0 (baseline) awesomeimage.png drawable-mdpi/ • ldpi: 0.75 awesomeimage.png drawable-ldpi/ awesomeimage.png • dp = density independent pixelWednesday, December 5, 2012
  61. 61. Podpora různých verzíWednesday, December 5, 2012
  62. 62. Podpora různých verzí • Na trhu Android v2.1 - v4.0.3Wednesday, December 5, 2012
  63. 63. Podpora různých verzí • Na trhu Android v2.1 - v4.0.3 • Nastavit minSdkVersion a targetSdkVersion <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >     <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />     ... </manifest>Wednesday, December 5, 2012
  64. 64. Podpora různých verzí • Na trhu Android v2.1 - v4.0.3 • Nastavit minSdkVersion a targetSdkVersion • Kontrolovat verzi API private void setUpActionBar() {     // Make sure were running on Honeycomb or higher to use ActionBar APIs     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {         ActionBar actionBar = getActionBar();         actionBar.setDisplayHomeAsUpEnabled(true);     } }Wednesday, December 5, 2012
  65. 65. Příklad • Rozšiřte příklad jednoduché kalkulačky o podporu češtiny a landscape režimu • zdrojáky, ze kterých lze vyjít • mff-android-hello • dokumentace • http://goo.gl/RKihTWednesday, December 5, 2012
  66. 66. Různá zařízeníWednesday, December 5, 2012
  67. 67. Různá zařízení • deklarativně podadresáři v /resWednesday, December 5, 2012
  68. 68. Různá zařízení • deklarativně podadresáři v /res • defaultní a alternativníWednesday, December 5, 2012
  69. 69. Různá zařízení • deklarativně podadresáři v /res • defaultní a alternativní dvě zařízení jeden layoutWednesday, December 5, 2012
  70. 70. Různá zařízení • deklarativně podadresáři v /res • defaultní a alternativní dvě zařízení jeden layout jedno zařízení dva layoutyWednesday, December 5, 2012
  71. 71. Dynamické UI pomocí fragmentů • Fragment je kus funkčního UI • Aktivita hostí fragmenty • Jedna aplikace pro telefon i tabletWednesday, December 5, 2012
  72. 72. FragmentWednesday, December 5, 2012
  73. 73. FragmentWednesday, December 5, 2012
  74. 74. Fragment Fragment a jeho UI public class ArticleFragment extends Fragment {     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {         // Inflate the layout for this fragment         return inflater.inflate(R.layout.article_view, container, false);     } }Wednesday, December 5, 2012
  75. 75. Fragment Fragment a jeho UI public class ArticleFragment extends Fragment {     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {         // Inflate the layout for this fragment         return inflater.inflate(R.layout.article_view, container, false);     } } Layout <fragment android:name="com.example.android.fragments.ArticleFragment"               android:id="@+id/article_fragment"               android:layout_weight="2"               android:layout_width="0dp"               android:layout_height="match_parent" />Wednesday, December 5, 2012
  76. 76. Fragment Fragment a jeho UI public class ArticleFragment extends Fragment {     @Override     public View onCreateView(LayoutInflater inflater, ViewGroup container,         Bundle savedInstanceState) {         // Inflate the layout for this fragment         return inflater.inflate(R.layout.article_view, container, false);     } } Layout <fragment android:name="com.example.android.fragments.ArticleFragment"               android:id="@+id/article_fragment"               android:layout_weight="2"               android:layout_width="0dp"               android:layout_height="match_parent" /> Instance public class MainActivity extends FragmentActivity {     @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.news_articles);     } }Wednesday, December 5, 2012
  77. 77. Fragmenty na telefonu a tabletuWednesday, December 5, 2012
  78. 78. Fragmenty na telefonu a tabletuWednesday, December 5, 2012
  79. 79. Fragmenty na telefonu a tabletu <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:orientation="horizontal"   android:layout_width="match_parent"   android:layout_height="match_parent"   android:id="@+id/frags">     <!-- "Fragment A" -->   <fragment class="com.example.android.TitlesFragment"             android:id="@+id/list_frag"             android:layout_width="@dimen/titles_size"             android:layout_height="match_parent"/>     <!-- "Fragment B" -->   <fragment class="com.example.android.DetailsFragment"             android:id="@+id/details_frag"             android:layout_width="match_parent"             android:layout_height="match_parent" /> </LinearLayout>Wednesday, December 5, 2012
  80. 80. Fragmenty na telefonu a tabletu <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="match_parent"     android:layout_height="match_parent">     <!-- "Fragment A" -->     <fragment class="com.example.android.TitlesFragment"               android:id="@+id/list_frag"               android:layout_width="match_parent"               android:layout_height="match_parent"/> </FrameLayout>Wednesday, December 5, 2012
  81. 81. Fragmenty na telefonu a tabletu public class MainActivity extends Activity implements TitlesFragment.OnItemSelectedListener {     public void onItemSelected(int position) {         DisplayFragment displayFrag = (DisplayFragment) getFragmentManager()                                     .findFragmentById(R.id.display_frag);         if (displayFrag == null) {             // DisplayFragment (Fragment B) is not in the layout (handset layout),             // so start DisplayActivity (Activity B)             // and pass it the info about the selected item             Intent intent = new Intent(this, DisplayActivity.class);             intent.putExtra("position", position);             startActivity(intent);         } else {             // DisplayFragment (Fragment B) is in the layout (tablet layout),             // so tell the fragment to update             displayFrag.updateContent(position);         }     } }Wednesday, December 5, 2012
  82. 82. Komunikace mezi fragmentyWednesday, December 5, 2012
  83. 83. Komunikace mezi fragmentyWednesday, December 5, 2012
  84. 84. Komunikace mezi fragmenty • FragmentA definuje Listener interfaceWednesday, December 5, 2012
  85. 85. Komunikace mezi fragmenty • FragmentA definuje Listener interface • Activity interface implementujeWednesday, December 5, 2012
  86. 86. Komunikace mezi fragmenty • FragmentA definuje Listener interface • Activity interface implementuje • FragmentA volá callback onItemSelected(...)Wednesday, December 5, 2012
  87. 87. Nové API na starých Androidech • support lib. zpřístupňuje nové api pro staré devices • Fragment, Loader • ViewPager, accessibility, NotificationBuilder,... import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; ... • ActionBarSherlock • AnimationsWednesday, December 5, 2012
  88. 88. Příklad • do seznamu přidejte možnost změnit položku • změnu potvrďte FragmentDialogem • zdrojáky • http://goo.gl/NmK4o • dokumentace • http://goo.gl/tuZwX • http://goo.gl/bK5GQWednesday, December 5, 2012
  89. 89. PřestávkaWednesday, December 5, 2012
  90. 90. Motivace -rychlé appkyWednesday, December 5, 2012
  91. 91. Motivace -rychlé appky • Nechceme čekat, když čekámeWednesday, December 5, 2012
  92. 92. Motivace -rychlé appky • Nechceme čekat, když čekáme • Chceme rychlé appkyWednesday, December 5, 2012
  93. 93. Motivace -rychlé appky • Nechceme čekat, když čekáme • Chceme rychlé appky 1.síťovat, když se nikdo nedíváWednesday, December 5, 2012
  94. 94. Motivace -rychlé appky • Nechceme čekat, když čekáme • Chceme rychlé appky 1.síťovat, když se nikdo nedívá 2.provádět akce okamžitěWednesday, December 5, 2012
  95. 95. Motivace -rychlé appky • Nechceme čekat, když čekáme • Chceme rychlé appky 1.síťovat, když se nikdo nedívá 2.provádět akce okamžitě 3.prioritizovat taskyWednesday, December 5, 2012
  96. 96. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  97. 97. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  98. 98. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  99. 99. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  100. 100. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  101. 101. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  102. 102. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  103. 103. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  104. 104. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  105. 105. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  106. 106. Příklad - Corkbin pro iOS a AndroidWednesday, December 5, 2012
  107. 107. Omezený programovací modelWednesday, December 5, 2012
  108. 108. Omezený programovací model • Slabý procesorWednesday, December 5, 2012
  109. 109. Omezený programovací model • Slabý procesor • Opravdový multi-taskingWednesday, December 5, 2012
  110. 110. Omezený programovací model • Slabý procesor • Opravdový multi-tasking • “Application not responding” aka. ANRWednesday, December 5, 2012
  111. 111. Omezený programovací model • Slabý procesor • Opravdový multi-tasking • “Application not responding” aka. ANR • Aktualizace UI pouze v ui threaduWednesday, December 5, 2012
  112. 112. Omezený programovací model • Slabý procesor • Opravdový multi-tasking • “Application not responding” aka. ANR • Aktualizace UI pouze v ui threadu • UI žije jenom chvíliWednesday, December 5, 2012
  113. 113. Architektura typické aplikace 1 • Zobraz seznam položek z databázeWednesday, December 5, 2012
  114. 114. Architektura typické aplikace 1 • Zobraz seznam položek z databáze ListFragmentWednesday, December 5, 2012
  115. 115. Architektura typické aplikace 1 • Zobraz seznam položek z databáze čte data ListFragment DBWednesday, December 5, 2012
  116. 116. Architektura typické aplikace 1 • Zobraz seznam položek z databáze čte data ListFragment DB sqlWednesday, December 5, 2012
  117. 117. Architektura typické aplikace 1 • Zobraz seznam položek z databáze UI čte data ListFragment DB sqlWednesday, December 5, 2012
  118. 118. Architektura typické aplikace 1 • Zobraz seznam položek z databáze UI Model čte data ListFragment DB sqlWednesday, December 5, 2012
  119. 119. DatabázeWednesday, December 5, 2012
  120. 120. Databáze • SQLite v3 databázeWednesday, December 5, 2012
  121. 121. Databáze • SQLite v3 databáze • SQLiteOpenHelperWednesday, December 5, 2012
  122. 122. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databázeWednesday, December 5, 2012
  123. 123. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databáze • callbacky pro vytvoření a upgradeWednesday, December 5, 2012
  124. 124. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databáze • callbacky pro vytvoření a upgrade • onCreate() a onUpgrade()Wednesday, December 5, 2012
  125. 125. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databáze • callbacky pro vytvoření a upgrade • onCreate() a onUpgrade() • zpřístupňuje interface databázeWednesday, December 5, 2012
  126. 126. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databáze • callbacky pro vytvoření a upgrade • onCreate() a onUpgrade() • zpřístupňuje interface databáze • getWritableDatabase()Wednesday, December 5, 2012
  127. 127. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databáze • callbacky pro vytvoření a upgrade • onCreate() a onUpgrade() • zpřístupňuje interface databáze • getWritableDatabase() • db.query(), db.insert (), db.update (), db.delete ()Wednesday, December 5, 2012
  128. 128. Databáze • SQLite v3 databáze • SQLiteOpenHelper • stará se o life-cycle databáze • callbacky pro vytvoření a upgrade • onCreate() a onUpgrade() • zpřístupňuje interface databáze • getWritableDatabase() • db.query(), db.insert (), db.update (), db.delete () • db.beginTransaction(), db.setTransactionSuccessful(), db.endTransaction()Wednesday, December 5, 2012
  129. 129. CursorWednesday, December 5, 2012
  130. 130. Cursor • zpřístupňuje řádky výsledku db.query()Wednesday, December 5, 2012
  131. 131. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohybWednesday, December 5, 2012
  132. 132. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohyb • moveToFirst(), moveToNext(), getCount()Wednesday, December 5, 2012
  133. 133. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohyb • moveToFirst(), moveToNext(), getCount() • metody pro čteníWednesday, December 5, 2012
  134. 134. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohyb • moveToFirst(), moveToNext(), getCount() • metody pro čtení • getColumnIndex(String columnName)Wednesday, December 5, 2012
  135. 135. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohyb • moveToFirst(), moveToNext(), getCount() • metody pro čtení • getColumnIndex(String columnName) • getString(int columnIndex), ...Wednesday, December 5, 2012
  136. 136. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohyb • moveToFirst(), moveToNext(), getCount() • metody pro čtení • getColumnIndex(String columnName) • getString(int columnIndex), ... • db.query(table, columns, selection, selectionArgs,........)Wednesday, December 5, 2012
  137. 137. Cursor • zpřístupňuje řádky výsledku db.query() • metody pro pohyb • moveToFirst(), moveToNext(), getCount() • metody pro čtení • getColumnIndex(String columnName) • getString(int columnIndex), ... • db.query(table, columns, selection, selectionArgs,........) • SimpleCursorAdapter, CursorAdapterWednesday, December 5, 2012
  138. 138. Příklad 1. prozkoumejte DatabaseHelper 2. v MainFragment zobrazte seznam knizek v DB 1. hint: použijte Cursor a SimpleCursorAdapter • zdrojáky • mff-android-1 • dokumentace • http://goo.gl/eme2aWednesday, December 5, 2012
  139. 139. Architektura typické aplikace 2 • Zobraz seznam položek z databázeWednesday, December 5, 2012
  140. 140. Architektura typické aplikace 2 • Zobraz seznam položek z databáze ListFragmentWednesday, December 5, 2012
  141. 141. Architektura typické aplikace 2 • Zobraz seznam položek z databáze ListFragment poskytuje data ContentProviderWednesday, December 5, 2012
  142. 142. Architektura typické aplikace 2 • Zobraz seznam položek z databáze ListFragment poskytuje data uri ContentProviderWednesday, December 5, 2012
  143. 143. Architektura typické aplikace 2 • Zobraz seznam položek z databáze ListFragment poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  144. 144. Architektura typické aplikace 2 • Zobraz seznam položek z databáze UI ListFragment poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  145. 145. Architektura typické aplikace 2 • Zobraz seznam položek z databáze UI ListFragment poskytuje data uri Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  146. 146. Architektura typické aplikace 2 • Zobraz seznam položek z databáze UI ListFragment poskytuje data uri Model čte data ContentProvider DB sql BoilerplateWednesday, December 5, 2012
  147. 147. ContentProviderWednesday, December 5, 2012
  148. 148. ContentProvider • Jednotné API pro přístup k modeluWednesday, December 5, 2012
  149. 149. ContentProvider • Jednotné API pro přístup k modelu • Zapouzdřuje CRUD operace nad databázíWednesday, December 5, 2012
  150. 150. ContentProvider • Jednotné API pro přístup k modelu • Zapouzdřuje CRUD operace nad databází • REST-like api a systém URIWednesday, December 5, 2012
  151. 151. ContentProvider • Jednotné API pro přístup k modelu • Zapouzdřuje CRUD operace nad databází • REST-like api a systém URI • Řeší synchronizaciWednesday, December 5, 2012
  152. 152. ContentProvider • Jednotné API pro přístup k modelu • Zapouzdřuje CRUD operace nad databází • REST-like api a systém URI • Řeší synchronizaci • Poskytuje data jiným aplikacímWednesday, December 5, 2012
  153. 153. Příklad 1. prozkoumejte komunikaci provideru a databáze 2. v Provider naimplementujte query operaci 3. v MainFragment načtěte data přes provider • zdrojáky • mff-android-2 • dokumentace • http://goo.gl/EFKK7Wednesday, December 5, 2012
  154. 154. Architektura typické aplikace 3 • Zobraz seznam položek z databázeWednesday, December 5, 2012
  155. 155. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragmentWednesday, December 5, 2012
  156. 156. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragment načítání dat CursorLoaderWednesday, December 5, 2012
  157. 157. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragment načítání dat callbacky CursorLoaderWednesday, December 5, 2012
  158. 158. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragment načítání dat callbacky CursorLoader poskytuje data ContentProviderWednesday, December 5, 2012
  159. 159. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragment načítání dat callbacky CursorLoader poskytuje data uri ContentProviderWednesday, December 5, 2012
  160. 160. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DBWednesday, December 5, 2012
  161. 161. Architektura typické aplikace 3 • Zobraz seznam položek z databáze ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  162. 162. Architektura typické aplikace 3 • Zobraz seznam položek z databáze UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  163. 163. Architektura typické aplikace 3 • Zobraz seznam položek z databáze UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  164. 164. Architektura typické aplikace 3 • Zobraz seznam položek z databáze UI ListFragment načítání dat callbacky Boilerplate CursorLoader poskytuje data uri Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  165. 165. Asynchroní operaceWednesday, December 5, 2012
  166. 166. Asynchroní operace • Omezený programovací modelWednesday, December 5, 2012
  167. 167. Asynchroní operace • Omezený programovací model • slabý procesorWednesday, December 5, 2012
  168. 168. Asynchroní operace • Omezený programovací model • slabý procesor • multi-taskingWednesday, December 5, 2012
  169. 169. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threaduWednesday, December 5, 2012
  170. 170. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threadu • Application not responding aka. ANRWednesday, December 5, 2012
  171. 171. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threadu • Application not responding aka. ANR • UI žije jenom chvíliWednesday, December 5, 2012
  172. 172. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threadu • Application not responding aka. ANR • UI žije jenom chvíli • Vše, co může dlouho trvat, mimo ui threadWednesday, December 5, 2012
  173. 173. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threadu • Application not responding aka. ANR • UI žije jenom chvíli • Vše, co může dlouho trvat, mimo ui thread • síťová komunikaceWednesday, December 5, 2012
  174. 174. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threadu • Application not responding aka. ANR • UI žije jenom chvíli • Vše, co může dlouho trvat, mimo ui thread • síťová komunikace • čtení z databázeWednesday, December 5, 2012
  175. 175. Asynchroní operace • Omezený programovací model • slabý procesor • multi-tasking • aktualizace UI pouze v ui threadu • Application not responding aka. ANR • UI žije jenom chvíli • Vše, co může dlouho trvat, mimo ui thread • síťová komunikace • čtení z databáze • čtení z filesystémuWednesday, December 5, 2012
  176. 176. CursorLoaderWednesday, December 5, 2012
  177. 177. CursorLoader • Čte z ContentProvideru na pozadíWednesday, December 5, 2012
  178. 178. CursorLoader • Čte z ContentProvideru na pozadí • Activity/Fragment notifikováno callbackem • onCreateLoader() • onLoadFinished() • onLoadReset()Wednesday, December 5, 2012
  179. 179. CursorLoader • Čte z ContentProvideru na pozadí • Activity/Fragment notifikováno callbackem • onCreateLoader() • onLoadFinished() • onLoadReset() • Umí reusovat jednou nahraný CursorWednesday, December 5, 2012
  180. 180. CursorLoader • Čte z ContentProvideru na pozadí • Activity/Fragment notifikováno callbackem • onCreateLoader() • onLoadFinished() • onLoadReset() • Umí reusovat jednou nahraný Cursor • Obnoví Cursor při updatu modeluWednesday, December 5, 2012
  181. 181. CursorLoader • Čte z ContentProvideru na pozadí • Activity/Fragment notifikováno callbackem • onCreateLoader() • onLoadFinished() • onLoadReset() • Umí reusovat jednou nahraný Cursor • Obnoví Cursor při updatu modelu • Je třeba volat v jako onActivityCreated() ().getSupportLoaderManager().initLoader() getActivityWednesday, December 5, 2012
  182. 182. Příklad 1. nahraďte volání provideru CursorLoaderem 1. hint: fragment nechť implementuje LoaderManager.LoaderCallbacks 2. hint: použijte getActivity().getContentResolver() • zdrojáky • mff-android-3 • dokumentace • http://goo.gl/BBb2NWednesday, December 5, 2012
  183. 183. Architektura typické aplikace 4 • Aktualizace z internetuWednesday, December 5, 2012
  184. 184. Architektura typické aplikace 4 • Aktualizace z internetu ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  185. 185. Architektura typické aplikace 4 • Aktualizace z internetu UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  186. 186. Architektura typické aplikace 4 • Aktualizace z internetu UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  187. 187. Architektura typické aplikace 4 • Aktualizace z internetu UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri Čtení Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  188. 188. Architektura typické aplikace 4 • Aktualizace z internetu ListFragment IntentService Intent načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  189. 189. Architektura typické aplikace 4 • Aktualizace z internetu ListFragment IntentService Intent provede načítání dat callbacky síťování CursorLoader poskytuje data uri zapisuje sql, CV čte data ContentProvider DB sqlWednesday, December 5, 2012
  190. 190. Architektura typické aplikace 4 • Aktualizace z internetu Aktualizace ListFragment IntentService Intent provede načítání dat callbacky síťování CursorLoader poskytuje data uri zapisuje sql, CV čte data ContentProvider DB sqlWednesday, December 5, 2012
  191. 191. IntentServiceWednesday, December 5, 2012
  192. 192. IntentService • Implementuje frontu tasků za zpracovaníWednesday, December 5, 2012
  193. 193. IntentService • Implementuje frontu tasků za zpracovaní • onHandleIntent(Intent i)Wednesday, December 5, 2012
  194. 194. IntentService • Implementuje frontu tasků za zpracovaní • onHandleIntent(Intent i) • Impl. pomocí HandlerThread a HandlerWednesday, December 5, 2012
  195. 195. IntentService • Implementuje frontu tasků za zpracovaní • onHandleIntent(Intent i) • Impl. pomocí HandlerThread a Handler • Třeba definovat v manifestuWednesday, December 5, 2012
  196. 196. IntentService • Implementuje frontu tasků za zpracovaní • onHandleIntent(Intent i) • Impl. pomocí HandlerThread a Handler • Třeba definovat v manifestu • Volání přes Context.startService()Wednesday, December 5, 2012
  197. 197. IntentService • Implementuje frontu tasků za zpracovaní • onHandleIntent(Intent i) • Impl. pomocí HandlerThread a Handler • Třeba definovat v manifestu • Volání přes Context.startService() final Intent i = new Intent(getActivity(), MyService.class); getActivity().startService(i);Wednesday, December 5, 2012
  198. 198. SíťováníWednesday, December 5, 2012
  199. 199. Síťování • Http Client, UrlConnectionWednesday, December 5, 2012
  200. 200. Síťování • Http Client, UrlConnection try { final URL url = new URL("http://...."); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { final InputStream is = connection.getInputStream(); try { //TODO networking } finally { is.close(); } } } catch (IOException e) { // TODO: handle exception }Wednesday, December 5, 2012
  201. 201. Síťování • Http Client, UrlConnection try { final URL url = new URL("http://...."); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { final InputStream is = connection.getInputStream(); try { //TODO networking } finally { is.close(); } } } catch (IOException e) { // TODO: handle exception }Wednesday, December 5, 2012
  202. 202. Síťování • Http Client, UrlConnection try { final URL url = new URL("http://...."); final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); if (connection.getResponseCode() == 200) { final InputStream is = connection.getInputStream(); try { //TODO networking } finally { is.close(); } } } catch (IOException e) { // TODO: handle exception } • Oprávnění • android.permission.INTERNETWednesday, December 5, 2012
  203. 203. Parsování a db insertWednesday, December 5, 2012
  204. 204. Parsování a db insert • JSON - JSONObject, JSONArrayWednesday, December 5, 2012
  205. 205. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble()Wednesday, December 5, 2012
  206. 206. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble() • XMLWednesday, December 5, 2012
  207. 207. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble() • XML • android.util.XMLWednesday, December 5, 2012
  208. 208. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble() • XML • android.util.XML • android.sax.RootElementWednesday, December 5, 2012
  209. 209. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble() • XML • android.util.XML • android.sax.RootElement • ContentValuesWednesday, December 5, 2012
  210. 210. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble() • XML • android.util.XML • android.sax.RootElement • ContentValues • db.insert()Wednesday, December 5, 2012
  211. 211. Parsování a db insert • JSON - JSONObject, JSONArray • getString(), getInt(), getDouble() • XML • android.util.XML • android.sax.RootElement • ContentValues • db.insert() • getContentResolver.notify(Uri,...)Wednesday, December 5, 2012
  212. 212. Příklad 1. Přes RefreshService aktualizujte tabulku Books 2. http://dl.dropbox.com/u/5296640/books.json • zdrojáky • mff-android-4 • dokumentace • http://goo.gl/3EeeWednesday, December 5, 2012
  213. 213. Architektura typické aplikace 5 • Operace create, update, deleteWednesday, December 5, 2012
  214. 214. Architektura typické aplikace 5 • Operace create, update, delete ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  215. 215. Architektura typické aplikace 5 • Operace create, update, delete UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  216. 216. Architektura typické aplikace 5 • Operace create, update, delete UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  217. 217. Architektura typické aplikace 5 • Operace create, update, delete UI ListFragment načítání dat callbacky CursorLoader poskytuje data uri Čtení Model čte data ContentProvider DB sqlWednesday, December 5, 2012
  218. 218. Architektura typické aplikace 5 • Operace create, update, delete čte data ListFragment AsyncQueryHandler uri, CV načítání dat callbacky CursorLoader poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  219. 219. Architektura typické aplikace 5 • Operace create, update, delete čte data ListFragment AsyncQueryHandler uri, CV načítání dat callbacky provede c, u, d uri, CV CursorLoader ContentProvider poskytuje data uri čte data ContentProvider DB sqlWednesday, December 5, 2012
  220. 220. Architektura typické aplikace 5 • Operace create, update, delete čte data ListFragment AsyncQueryHandler uri, CV načítání dat callbacky provede c, u, d uri, CV CursorLoader ContentProvider poskytuje data uri zapisuje sql, CV čte data ContentProvider DB sqlWednesday, December 5, 2012
  221. 221. Architektura typické aplikace 5 • Operace create, update, delete Zápis čte data ListFragment AsyncQueryHandler uri, CV načítání dat callbacky provede c, u, d uri, CV CursorLoader ContentProvider poskytuje data uri zapisuje sql, CV čte data ContentProvider DB sqlWednesday, December 5, 2012
  222. 222. AsyncQueryHandlerWednesday, December 5, 2012
  223. 223. AsyncQueryHandler • Volá crud operace v threadu na pozadíWednesday, December 5, 2012
  224. 224. AsyncQueryHandler • Volá crud operace v threadu na pozadí • Zpětně notifikuje volajícíhoWednesday, December 5, 2012
  225. 225. AsyncQueryHandler • Volá crud operace v threadu na pozadí • Zpětně notifikuje volajícího • Problém - volající nemusí již existovatWednesday, December 5, 2012
  226. 226. AsyncQueryHandler • Volá crud operace v threadu na pozadí • Zpětně notifikuje volajícího • Problém - volající nemusí již existovat • ŘešeníWednesday, December 5, 2012
  227. 227. AsyncQueryHandler • Volá crud operace v threadu na pozadí • Zpětně notifikuje volajícího • Problém - volající nemusí již existovat • Řešení • Implementovat jako inner-static nebo top-levelWednesday, December 5, 2012
  228. 228. AsyncQueryHandler • Volá crud operace v threadu na pozadí • Zpětně notifikuje volajícího • Problém - volající nemusí již existovat • Řešení • Implementovat jako inner-static nebo top-level • WeakReference pro odkaz na volajícíhoWednesday, December 5, 2012
  229. 229. AsyncQueryHandler • Volá crud operace v threadu na pozadí • Zpětně notifikuje volajícího • Problém - volající nemusí již existovat • Řešení • Implementovat jako inner-static nebo top-level • WeakReference pro odkaz na volajícího private class MyQueryHandler extends AsyncQueryHandler { // Use weak reference to avoid memoey leak private WeakReference<MyActivity> mMyActivity; public MyQueryHandler(Context context) { super(context.getContentResolver()); mMyActivity = new WeakReference<MyActivity>((MyActivity) context); } protected void onQueryComplete(int token, Object cookie, Cursor cursor) { MyActivity activity = mMyActivity.get(); if (activity != null && !activity.isFinishing()) { ... } }Wednesday, December 5, 2012
  230. 230. Příklad 1. Doplňte c, u, d operace do provideru a fragmentu • zdrojáky • mff-android-5 • dokumentace • http://goo.gl/BS1hrWednesday, December 5, 2012
  231. 231. Děkuji @ondraz ukázky kódu a obrázky pocházejí z http://developer.android.com pod licencemi Apache v2.0 a Creative Commons Attribution v2.5Wednesday, December 5, 2012

×