These slides are part of the Android Development Course which I taught to 10 students, while participating in the IP Workshop Summer School 2011.
http://www.scoaladevara.info/2011/?page_id=39
1. Android
Intents, IntentFilters, BroadcastReceivers
Vlad PETRE
vlad@vladpetre.com
http://twitter.com/vladpetre88
http://facebook.com/vladpetre88
http://www.linkedin.com/in/vladpetre88
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
2. Intentii
• O intentie reprezinta o descriere abstracta a unei
operatii ce se doreste a fi executata.
• Exemple de intentii:
– Apel telefonic
– Trimiterea unui sms
– Deschiderea unei activitati
• Reprezinta un Obiect.
2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
3. Atributele unui Intent
• Action
• Data
• Category
• Type
• Component
• Extras
3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
4. Action
• Descrie actiunea ce se doreste a fi executata:
– Apel telefonic
– Trimiterea unui SMS
– Deschiderea unui document
– Editarea unui document
– Pornirea unei activitati
• Reprezentat printr-un String. Exemple:
– “android.intent.action.MAIN”
– “android.intent.action.DIAL”
– “android.intent.action.VIEW”
– “android.intent.action.EDIT”
4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
5. Data
• In general o adresa URI.
• Exemple:
– http://www.google.ro
– content://contacts/…
– file:///sdcard/...
– tel://...
5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
6. Category
• Optional.
• Categoriseste actiunea. Ofera astfel informatii suplimentare.
– CATEGORY_LAUNCHER – activitate initiala a unui task
– CATEGORY_HOME – activitatea afiseaza homescreen-ul
–…
• Un Intent poate contine mai multe categorii.
• String:
– “android.intent.category.LAUNCHER”
6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
7. Type
• Tipul datelor din Intent
• Atribut optional.
• Daca nu e specificat, tipul este dedus din data in sine
(ex: file:///sdcard/poze/poza.jpg).
• String:
– “image/jpg”
– “contacts/contact”
7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
8. Component
• Specifica componenta exacta de destinatie.
• Atribut optional.
• Daca nu e specificat, componenta destinatie este
determinata pe baza celorlalte atribute (actiunea,
data/type, categorii).
• Daca e specificat, toate celelalte componente ale unui
Intent devin optionale.
8 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
9. Extras
• Date suplimentare
• Bundle
– putIntExtra(…)
– putBooleanExtra(…)
– getStringExtra()
– getIntExtra()
– getBooleanExtra()
–…
9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
11. Mod de folosire
• Metode care emit Intent-uri:
– void startActivity (Intent i)
– void startService (Intent i)
– void sendBroadcast (Intent i, String permission)
• Sistemul va cauta componenta cea mai potrivita
pentru a trata intentia.
11 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
12. Cautarea
• Cautarea componentei se realizeaza dupa:
– ACTION
– TYPE (de obiei este extras din DATA)
– CATEGORY
• Se determina astfel componenta cea mai potrivita
(sau o lista de compnente, in cazul in care mai multe
componente pot trata aceasta intentie).
12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
13. IntentFilters
• Mod de a declara filtre de intentii la care pot
raspunde diferite componente:
– Activitati
– Servicii
– BroadcastReceivers
• Trebuie declarat in Manifest.
13 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
14. Exemplu IntentFilters 1
• Ex: Launcher-ul cere o lista cu toate componentele
ce raspund la:
– Actiunea: ACTION_MAIN
– Categoria: CATEGORY_LAUNCHER
14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
15. Exemplu IntentFilters 2
• In Manifest
15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
16. Exemplu IntentFilters 3
• In Manifest
16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
18. Legarea activitatilor
• Pornirea unei activitati
• Pasarea de parametri noii activitati
• Intoarcerea unei valori de la noua activitate
18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
19. Metode din clasa Activity (1)
• Intent getIntent()
– Întoarce Intent-ul cu care a fost pornită
• void setResult (int resultCode)
– Setează valoarea de rezultat ce trebuie întoarsă
• void setResult (int resultCode, Intent data)
– Setează valoarea de rezultat ce trebuie întoarsă
– Adaugă date
19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
20. Metode din clasa Activity (2)
• void onActivityResult (int requestCode,
int resultCode, Intent data)
• Trebuie suprascrisa
• Este apelată de sistem când o activitate întoarce un rezultat.
• Parametri
– requestCode – codul pus in startActivityForResult(…)
– resultCode –codul intors de setResult(…)
– data – informațiile suplimentare setate de setResult(…)
20 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
21. Pornirea unei activitati (1)
context.startActivity(Intent intent);
Intent starter = new Intent(context,
ClasaActvitate.class);
context.startActivity(starter);
21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
22. Cum pornim o activitate pasand parametri?
22 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
23. Pornirea unei activitati cu parametri (1)
context.startActivity(Intent intent);
Intent starter = new Intent(context,
ClasaActvitate.class);
context.startActivity(starter);
starter.putExtra(“parametru1”, valoare);
context.startActivity(starter);
23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
24. Pornirea unei activitati cu parametri (2)
• Pentru a prelua parametrii intent-ului, in noua
activitate:
Intent starter = getIntent();
String parametru1 =
starter.getStringExtra(“parametru1”);
24 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
25. Cum pornesc o activitate ce intoarce o
valoare?
25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
26. Activitati ce intorc o valoare (1)
• In activitatea initiala:
context.startActivityForResult(Intent intent,
int requestCode);
int requestCode = 100;
Intent starter = new Intent(context,
ClasaActvitate.class);
context.startActivityForResult(starter,
requestCode);
26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
27. Activitati ce intorc o valoare (2)
• În noua activitate pornită, pentru a intoarce un
rezultat:
Intent data = new Intent(this);
data.putExtra(“rezultat1”, rezultat1);
data.putExtra(“rezultat2”, rezultat2);
int resultCode = 200;
setResult(resultCode, data);
finish();
27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
28. Activitati ce intorc o valoare (3)
• Inapoi in activitatea initiala, trebuie sa implementam
metoda care preia rezultatele:
void onActivityResult(int requestCode, int
resultCode, Intent data)
• requestCode – codul initial pentru a identifica cererea
• resultCode – codul intors ca rezultat
• data - un Intent care poate contine alte informatii
28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
29. BroadcastReceiver (I)
• Componenta ce permite captarea de anunturi
generate de sistem sau informatii generate de alte
aplicatii.
• Anunturile vin sub forma de Intent-uri.
• Exemple de actiuni informative:
– “android.intent.action.BATTERY_LOW”
– “android.intent.action.ACTION_BOOT_COMPLETED”
– “android.intent.action.ACTION_POWER_CONNECTED”
29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
30. BroadcastReceiver (II)
• Extind clasa BroadcastReceiver
– void onReceive(Context context, Intent intent)
• Trebuie suprascrisă
• Nu extinde Context, ci îl primește ca parametru.
30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
31. Ciclul de viata al unui BroadcastReceiver
• Cât timp rulează funcția onReceive()
• Un BroadcastReceiver nu poate:
– Porni ferestre de Dialog
– Executa actiuni asincrone
31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
32. Exemplu (1)
• In Manifest
32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
33. Exemplu (2)
33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
34. Referinte
• http://pdm.ipworkshop.ro
• http://developer.android.com/guide/topics/intents/inten
• http://developer.android.com/reference/android/conten
• http://developer.android.com/reference/android/conten
34 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
35. Întrebări?
35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea