Differences

This shows you the differences between two versions of the page.

Link to this comparison view

eim:laboratoare:laborator04 [2020/03/11 15:25]
stefan.aldoiu [Gestiunea evenimentelor cu difuzare prin intermediul intențiilor (Optional)]
eim:laboratoare:laborator04 [2021/02/16 16:02] (current)
dragos.niculescu
Line 370: Line 370:
   PackageManager.DONT_KILL_APP);​   PackageManager.DONT_KILL_APP);​
 </​code>​ </​code>​
 +</​spoiler>​
 === Trimiterea unei intenții cu difuzare === === Trimiterea unei intenții cu difuzare ===
 +<​spoiler>​
 Construirea unei intenții care urmează să fie difuzată la nivelul sistemului de operare Android poate fi realizată prin definirea unui obiect de tipul ''​Intent'',​ pentru care se vor specifica acțiunea, datele și categoria, astfel încât obiectele de tip ascultător să îl poată identifica cât mai exact. Ulterior, acesta va fi trimis tuturor proceselor aferente aplicațiilor instalate pe dispozitivul mobil prin intermediul metodei ''​sendBroadcast()'',​ căreia îi este atașat ca parametru. Construirea unei intenții care urmează să fie difuzată la nivelul sistemului de operare Android poate fi realizată prin definirea unui obiect de tipul ''​Intent'',​ pentru care se vor specifica acțiunea, datele și categoria, astfel încât obiectele de tip ascultător să îl poată identifica cât mai exact. Ulterior, acesta va fi trimis tuturor proceselor aferente aplicațiilor instalate pe dispozitivul mobil prin intermediul metodei ''​sendBroadcast()'',​ căreia îi este atașat ca parametru.
  
Line 384: Line 384:
 sendBroadcast(intent);​ sendBroadcast(intent);​
 </​code>​ </​code>​
 +</​spoiler>​
 === Primirea unui intenții cu difuzare === === Primirea unui intenții cu difuzare ===
 +<​spoiler>​
 Pentru a putea primi o intenție cu difuzare, o componentă trebuie să fie înregistrată în acest sens, definind un filtru de intenții pentru a specifica ce tipuri de acțiuni și ce tipuri de date asociate intenției poate procesa. ​ Pentru a putea primi o intenție cu difuzare, o componentă trebuie să fie înregistrată în acest sens, definind un filtru de intenții pentru a specifica ce tipuri de acțiuni și ce tipuri de date asociate intenției poate procesa. ​
  
Line 443: Line 443:
  
  
 +</​spoiler>​
 === Tipuri particulare de intenții cu difuzare === === Tipuri particulare de intenții cu difuzare ===
 +<​spoiler>​
  
 Există și tipuri particulare de intenții cu difuzare: Există și tipuri particulare de intenții cu difuzare:
   - intenții cu difuzare **ordonate**,​ utile în situația în care o intenție cu difuzare trebuie să fie procesată secvențial de mai mulți ascultători,​ fiecare dintre aceștia având posibilitatea de a modifica intenția respectivă;​   - intenții cu difuzare **ordonate**,​ utile în situația în care o intenție cu difuzare trebuie să fie procesată secvențial de mai mulți ascultători,​ fiecare dintre aceștia având posibilitatea de a modifica intenția respectivă;​
   - intenții cu difuzare **persistente**,​ care mențin valoarea care a fost transmisă cel mai recent.   - intenții cu difuzare **persistente**,​ care mențin valoarea care a fost transmisă cel mai recent.
 +</​spoiler>​
 == Intenții cu difuzare ordonate == == Intenții cu difuzare ordonate ==
  
 +<​spoiler>​
 Pentru ca o intenție cu difuzare să poate fi procesată de mai mulți ascultători într-o anumită ordine, ar trebui să fie transmisă prin intermediul metodei ''​sendOrderedBroadcast()''​ căreia i se poate atașa (opțional) și o anumită permisiune, pe care clasa ascultător trebuie să o dețină: Pentru ca o intenție cu difuzare să poate fi procesată de mai mulți ascultători într-o anumită ordine, ar trebui să fie transmisă prin intermediul metodei ''​sendOrderedBroadcast()''​ căreia i se poate atașa (opțional) și o anumită permisiune, pe care clasa ascultător trebuie să o dețină:
  
Line 481: Line 481:
 Frecvent, intențiile cu difuzare ordonate sunt folosite atunci când se dorește transmiterea unor rezultate înapoi, către aplicația Android care le-a transmis, după ce toți ascultătorii au realizat procesarea acestora. În acest sens, metoda ''​sendOrderedBroadcast()''​ va primi suplimentar ca parametrii și obiectul de tip ''​BroadcastReceiver''​ care va procesa ultimul intenția cu difuzare, un obiect de tip ''​Handler''​ care va primi rezultatul final (se transmite valoarea ''​null''​ dacă se dorește ca acesta să fie aplicația care a transmis intenția), rezultatul, secțiunile ''​data''​ / ''​extra''​ ale intenției pe care se poate opera. Frecvent, intențiile cu difuzare ordonate sunt folosite atunci când se dorește transmiterea unor rezultate înapoi, către aplicația Android care le-a transmis, după ce toți ascultătorii au realizat procesarea acestora. În acest sens, metoda ''​sendOrderedBroadcast()''​ va primi suplimentar ca parametrii și obiectul de tip ''​BroadcastReceiver''​ care va procesa ultimul intenția cu difuzare, un obiect de tip ''​Handler''​ care va primi rezultatul final (se transmite valoarea ''​null''​ dacă se dorește ca acesta să fie aplicația care a transmis intenția), rezultatul, secțiunile ''​data''​ / ''​extra''​ ale intenției pe care se poate opera.
  
 +</​spoiler>​
 == Intenții cu difuzare persistente == == Intenții cu difuzare persistente ==
 +<​spoiler>​
 Pentru ca o intenție cu difuzare să își mențină cea mai recentă valoare, ar trebui să fie transmisă prin intermediul metodei ''​sendStickyBroadcast()''​. Pentru ca o intenție cu difuzare să își mențină cea mai recentă valoare, ar trebui să fie transmisă prin intermediul metodei ''​sendStickyBroadcast()''​.
  
Line 507: Line 507:
 <​note>​În Android, astfel de intenții sunt utilizate de sistemul de operare pentru a indica starea dispozitivului mobil (nivelul de încărcare al bateriei, conectivitatea la Internet) pentru a îmbunătăți eficiența.</​note>​ <​note>​În Android, astfel de intenții sunt utilizate de sistemul de operare pentru a indica starea dispozitivului mobil (nivelul de încărcare al bateriei, conectivitatea la Internet) pentru a îmbunătăți eficiența.</​note>​
  
 +</​spoiler>​
 === Gestiunea intențiilor cu difuzare native === === Gestiunea intențiilor cu difuzare native ===
 +<​spoiler>​
 Cele mai multe servicii de sistem transmit intenții cu difuzare pentru a semnala faptul că s-au produs anumite modificări la nivelul stării dispozitivului mobil sau al aplicațiilor (primirea unui apel telefonic / mesaj, schimbarea nivelului de încărcare al bateriei, conectivitatea la Internet). Cele mai multe servicii de sistem transmit intenții cu difuzare pentru a semnala faptul că s-au produs anumite modificări la nivelul stării dispozitivului mobil sau al aplicațiilor (primirea unui apel telefonic / mesaj, schimbarea nivelului de încărcare al bateriei, conectivitatea la Internet).
  
Line 538: Line 538:
 boolean isMobile = (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE);​ boolean isMobile = (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE);​
 </​code>​ </​code>​
 +</​spoiler>​
 <​hidden>​ <​hidden>​
 ===== Fragmente (opțional) ===== ===== Fragmente (opțional) =====
Line 970: Line 970:
  
 **2.** Să se cloneze într-un director de pe discul local conținutul depozitului la distanță astfel creat. În urma acestei operații, directorul Laborator04 va trebui să se conțină fișierele ''​README.md'',​ ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate și ''​LICENSE''​. <​code>​ **2.** Să se cloneze într-un director de pe discul local conținutul depozitului la distanță astfel creat. În urma acestei operații, directorul Laborator04 va trebui să se conțină fișierele ''​README.md'',​ ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate și ''​LICENSE''​. <​code>​
-student@eim2017:~$ git clone https://​www.github.com/​eim2017/​Laborator04+student@eim-lab:~$ git clone https://​www.github.com/​perfectstudent/​Laborator04.git
 </​code>​ </​code>​
  
Line 984: Line 984:
 {{ :​eim:​laboratoare:​laborator04:​04androidstudio.png?​nolink&​600 }} {{ :​eim:​laboratoare:​laborator04:​04androidstudio.png?​nolink&​600 }}
  
-Se indică platforma pentru care se dezvoltă aplicația Android (se bifează doar //Phone and Tablet//), iar SDK-ul Android (minim) pentru care se garantează funcționarea este API 16 (Jelly Bean, 4.1).+Se indică platforma pentru care se dezvoltă aplicația Android (se bifează doar //Phone and Tablet//), iar SDK-ul Android (minim) pentru care se garantează funcționarea este API 24 (Nougat).
  
 {{ :​eim:​laboratoare:​laborator04:​05androidstudio.png?​nolink&​600 }} {{ :​eim:​laboratoare:​laborator04:​05androidstudio.png?​nolink&​600 }}
Line 1075: Line 1075:
   * se înregistrează o instanță a clasei ascultător ca mecanism de tratare a evenimentelor de tip accesare a butoanelor din cadrul interfeței grafice, prin apelul metodei ''​setOnClickListener()''​.   * se înregistrează o instanță a clasei ascultător ca mecanism de tratare a evenimentelor de tip accesare a butoanelor din cadrul interfeței grafice, prin apelul metodei ''​setOnClickListener()''​.
  
-**5.** Să se modifice aplicația Android [[https://​github.com/​eim2017/​Laborator03.git|Phone Dialer]] astfel încât să conțină un buton suplimentar prin care este invocată aplicația //Contacts Manager// căreia îi transmite numărul de telefon format și așteptând un rezultat cu privire la stocarea contactului în agenda telefonică.+**5.** Să se modifice aplicația Android [[https://​github.com/​eim-lab/​Laborator03.git|Phone Dialer]] astfel încât să conțină un buton suplimentar prin care este invocată aplicația //Contacts Manager// căreia îi transmite numărul de telefon format și așteptând un rezultat cu privire la stocarea contactului în agenda telefonică.
  
 {{ :​eim:​laboratoare:​laborator04:​10phone_dialer_portrait.png?​nolink&​300 }} {{ :​eim:​laboratoare:​laborator04:​10phone_dialer_portrait.png?​nolink&​300 }}
Line 1155: Line 1155:
  
 **7.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator04'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​ **7.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator04'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​
-student@eim2017:​~/​Laborator04$ git add * +student@eim-lab:​~/​Laborator04$ git add * 
-student@eim2017:​~/​Laborator04$ git commit -m "​implemented taks for laboratory 04" +student@eim-lab:​~/​Laborator04$ git commit -m "​implemented taks for laboratory 04" 
-student@eim2017:​~/​Laborator04$ git push origin master+student@eim-lab:​~/​Laborator04$ git push origin master
 </​code>​ </​code>​
  
Line 1172: Line 1172:
 [[http://​www.coreservlets.com/​android-tutorial|Android Programming Tutorials - Core Servlets]] - secțiunile Intents - part I, II & III\\  [[http://​www.coreservlets.com/​android-tutorial|Android Programming Tutorials - Core Servlets]] - secțiunile Intents - part I, II & III\\ 
 [[http://​www.vogella.com/​tutorials/​AndroidIntent/​article.html|Android Intents - Tutorial]] [[http://​www.vogella.com/​tutorials/​AndroidIntent/​article.html|Android Intents - Tutorial]]
 +
 +===== Android Fundamentals =====
 +[[https://​docs.google.com/​presentation/​d/​1kjxsI9brdVRIx3rqoB0H-1-PmVlzJbiQNf4PyqzZKJM/​edit#​slide=id.g116e4ee7f0_0_171|Android Intents]]
 +[[https://​docs.google.com/​presentation/​d/​1DSl-LNN7Kp3gQ9ZadBe8clWNGhs_8xdcYQoxZbF5cRk/​edit#​slide=id.g116d7d9d49_3_13|Explicit and Implicit Intents]]
eim/laboratoare/laborator04.1583933146.txt.gz · Last modified: 2020/03/11 15:25 by stefan.aldoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0