[curs android] c08 - intents & broadcast receivers (ipw 2011)

35
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea Android Intents, IntentFilters, BroadcastReceivers Vlad PETRE vlad@vladpetre.com http://twitter.com/vladpetre88 http://facebook.com/vladpetre88 http://www.linkedin.com/in/ vladpetre88

Upload: vlad-petre

Post on 29-Nov-2014

761 views

Category:

Education


2 download

DESCRIPTION

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

TRANSCRIPT

1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

AndroidIntents, IntentFilters, BroadcastReceivers

Vlad PETRE

[email protected]

http://twitter.com/vladpetre88

http://facebook.com/vladpetre88

http://www.linkedin.com/in/vladpetre88

2 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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.

3 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Atributele unui Intent• Action• Data• Category• Type• Component• Extras

4 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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”

5 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Data• In general o adresa URI.• Exemple:

– http://www.google.ro– content://contacts/…– file:///sdcard/...– tel://...

6 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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”

7 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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”

8 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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.

9 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Extras• Date suplimentare• Bundle

– putIntExtra(…)– putBooleanExtra(…)– getStringExtra()– getIntExtra()– getBooleanExtra()– …

10 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Cum folosim Intent-urile?

11 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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.

12 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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).

13 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

IntentFilters• Mod de a declara filtre de intentii la care pot

raspunde diferite componente:– Activitati– Servicii– BroadcastReceivers

• Trebuie declarat in Manifest.

14 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu IntentFilters 1

• Ex: Launcher-ul cere o lista cu toate componentele ce raspund la:– Actiunea: ACTION_MAIN– Categoria: CATEGORY_LAUNCHER

15 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu IntentFilters 2

• In Manifest

16 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu IntentFilters 3

• In Manifest

17 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Cum legam activitatile?

18 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Legarea activitatilor• Pornirea unei activitati• Pasarea de parametri noii activitati• Intoarcerea unei valori de la noua activitate

19 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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

20 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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(…)

21 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Pornirea unei activitati (1)

context.startActivity(Intent intent);Intent starter = new Intent(context,

ClasaActvitate.class);context.startActivity(starter);

22 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Cum pornim o activitate pasand parametri?

23 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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);

24 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Pornirea unei activitati cu parametri (2)

• Pentru a prelua parametrii intent-ului, in noua activitate:

Intent starter = getIntent();String parametru1 = starter.getStringExtra(“parametru1”);

25 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Cum pornesc o activitate ce intoarce o valoare?

26 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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);

27 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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();

28 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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

29 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

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”

30 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

BroadcastReceiver (II)• Extind clasa BroadcastReceiver

– void onReceive(Context context, Intent intent)• Trebuie suprascrisă

• Nu extinde Context, ci îl primește ca parametru.

31 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Ciclul de viata al unui BroadcastReceiver

• Cât timp rulează funcția onReceive()

• Un BroadcastReceiver nu poate:– Porni ferestre de Dialog– Executa actiuni asincrone

32 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu (1)

• In Manifest

33 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Exemplu (2)

34 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Referinte• http://pdm.ipworkshop.ro• http://developer.android.com/guide/topics/intents/

intents-filters.html• http://developer.android.com/reference/android/co

ntent/Intent.html• http://developer.android.com/reference/android/co

ntent/BroadcastReceiver.html

35 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea

Întrebări?