Post on 29-Nov-2014
description
1 Scoala de Vara IP Workshop 2011 – Calimanesti Valcea
AndroidIntents, IntentFilters, BroadcastReceivers
Vlad PETRE
vlad@vladpetre.com
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()– …
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
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);
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
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